Docker: запутался в нескольких контейнерах

Я хотел бы иметь возможность реплицировать среду разработки на нескольких компьютерах. Я думал, что Docker может быть хорошим инструментом для этого, но я застрял.

У меня есть приложение, которое использует:

  • Apache с некоторыми расширениями
  • PHP FPM
  • MySQL
  • Composer
  • компас (для перекомпиляции файлов SASS)
  • Grunt & Bower

все файлы должны оставаться на хост-компьютере и быть предоставляются услуги.

поэтому я создал Dockerfile, который настраивает и запускает Apache. Отлично!

к сожалению, я просто не могу понять, как действовать дальше.

Как настроить PHP FPM, MySQL и Compass? Я понимаю, что я должен выполнить каждый из этих процессов в отдельном контейнере, и связать их вместе (в отличие от запуска нескольких служб в одном контейнере).

инстинктивно, я бы создал несколько Dockerfiles, для каждого сервиса, а потом начать с докер-сочинять. Но, похоже, это не тот путь, и я не мог понять, что такое правильная идея.

Я нашел много пользовательских образов, но я бы предпочел создать лично каждый контейнер с моей собственной конфигурацией. Такое возможно?

или мне лучше просто подготовить и запустить полную виртуальную машину, в Vagrant или непосредственно на VirtualBox??

спасибо!

5
задан Palantir
источник

2 ответов

Docker Compose всегда был отличным инструментом в таком сценарии, где у вас есть небольшие микрослужбы вместо одного большого монолитного приложения, сброшенного в один образ Docker. Если вы не хотите иметь большое количество Dockerfile, вы всегда можете создать свой собственный образ Docker с необходимой упаковкой, чтобы сделать его простым.

пример: вместо того, чтобы вытаскивать официальный образ Ubuntu Docker, вы можете создать свой собственный образ Ubuntu Docker с необходимой упаковкой. Это уменьшит ваше путаница вокруг наличия большого количества Dockerfile. Но имейте в виду, что это будет нести накладные расходы на создание нового образа Docker каждый раз, когда вы хотите внести какие-либо изменения и что-то, что не рекомендуется для среды разработки.

вот фрагмент docker-compose.yml файл из этой ссылка, которая очень проста для понимания, не содержит отдельного файла Dockerfile и может быть легко настроена на основе вашего требования:

 version: '3'
services:
    web:
        image: nginx
        volumes:
            - "./etc/nginx/default.conf:/etc/nginx/conf.d/default.conf"
            - "./etc/ssl:/etc/ssl"
            - "./web:/var/www/html"
            - "./etc/nginx/default.template.conf:/etc/nginx/conf.d/default.template"
        ports:
            - "8000:80"
            - "3000:443"
        environment:
            - NGINX_HOST=${NGINX_HOST}
        command: /bin/bash -c "envsubst '$$NGINX_HOST' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
        restart: always
        depends_on:
            - php
            - mysqldb
    php:
        image: nanoninja/php-fpm
        restart: always
        volumes:
            - "./etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini"
            - "./web:/var/www/html"
    composer:
        image: "composer"
        volumes:
            - "./web/app:/app"
        command: install
    myadmin:
        image: phpmyadmin/phpmyadmin
        container_name: phpmyadmin
        ports:
            - "8080:80"
        environment:
            - PMA_ARBITRARY=1
            - PMA_HOST=${MYSQL_HOST}
        restart: always
        depends_on:
            - mysqldb
    mysqldb:
        image: mysql
        container_name: ${MYSQL_HOST}
        restart: always
        env_file:
            - ".env"
        environment:
            - MYSQL_DATABASE=${MYSQL_DATABASE}
            - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
            - MYSQL_USER=${MYSQL_USER}
            - MYSQL_PASSWORD=${MYSQL_PASSWORD}
        ports:
            - "8989:3306"
        volumes:
            - "./data/db/mysql:/var/lib/mysql"
1
отвечен ajeetraina 2017-11-09 00:56:37
источник

вы определенно на правильном пути. Docker-compose это то, что вы хотите.

каждая "служба" будет либо образом Docker, либо локальным файлом Dockerfile, который будет построен. Вы можете указать различные пути к файлам и имена файлов в файле compose, чтобы сделать вещи проще. Затем используйте ссылки Docker, чтобы связать все контейнеры вместе.

0
отвечен jmreicha 2015-10-25 04:47:51
источник

Другие вопросы docker