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

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

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

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

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

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

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

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

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

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

Спасибо!

2 ответа2

1

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

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

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

 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"
0

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .