У меня есть большой проект Docker с файлами Dockerfiles для nginx, apache2, varnish, redis
, настроенный и хорошо работающий после нескольких недель изменений и тестирования.
Я сейчас нахожусь в точке, где настраиваю проекты для использования docker -compose и override.yml файлы для легкой настройки:
Я пытаюсь использовать одну и ту же настройку docker -compose для нескольких проектов (веб-сайтов)
Обычный запуск (с использованием docker-compose.yml and optional docker-compose.override.yml
) docker-compose up -d
Пользовательский запуск (с использованием специальных файлов c docker -compose) docker-compose -f docker-compose.yml -f custom/docker-compose.website1.yml up -d
Оба этих метода запускаются нормально: docker-compose ps
Игнорируйте тот факт, что они Exit 0 - я остановил их, используя docker-compose stop, the containers work fine
nginx -proxy / usr / bin / supervisord Exit 0 redis-cache / usr / bin / supervisord Exit 0 varni sh -cache / usr / bin / supervisord Exit 0 web-server-apache2 / usr / bin / supervisord Exit 0
Теперь мне нужен второй проект ( веб-сайт) для использования того же докера / docker - настройка конфигурации:
docker-compose -f docker-compose.yml -f anothercustomfolder/docker-compose.website2.yml up -d
К моему удивлению docker -compose воссоздали контейнеры и не создают новый набор контейнеров:
См. Раздел «Текущая настройка», чтобы узнать, как я настраиваю вещи.
Creating network "delete-network-frontend" with the default driver
Recreating nginx-proxy ... done
Recreating varnish-cache ... done
Recreating web-server ... done
Recreating redis-cache ... done
При запуске docker-compose ps
во второй папке настройки:
Обратите внимание, что имена не такие, как указано выше (это вторая настройка теста)
Name Command State Ports
------------------------------------------------------------------------------------------------
nginx-proxy-delete /usr/bin/supervisord Up 0.0.0.0:443->443/tcp,
0.0.0.0:80->80/tcp
redis-cache-delete /usr/bin/supervisord Up 0.0.0.0:6379->6379/tcp
varnish-cache-delete /usr/bin/supervisord Up 0.0.0.0:6081->6081/tcp,
0.0.0.0:6082->6082/tcp
web-server- /usr/bin/supervisord Up 0.0.0.0:8080->8080/tcp
apache2-delete
Похоже, что docker -compose выполнил две вещи: 1. Воссоздал (заменил) контейнеры проекта 1, использовал имена контейнеров проекта 1, чтобы указать, что они были «воссозданы», и 2. Удалите контейнеры проекта 1, переименовав его. для проецирования 2 контейнеров.
Текущая настройка
- Я создал полный проект Dockerfile, настроенный с помощью docker -compose.yml и двух файлов переопределения docker -compose (
docker-compose.website1.yml and
docker -compose.website2.yml`). - Я сделал полную копию рабочего Dockerfile / docker -compose.yml project и создал новую папку: In other слова, оба они будут использовать те же настройки docker, но использовать разные docker -compose.yml переопределить файлы .
/var/www/docker/site1
/var/www/docker/site2
Вопрос
TL; DR: как использовать рабочий проект docker-compose
в одной и той же операционной системе для нескольких проектов ... без замены другого контейнеров проекта.
Я хочу иметь возможность видеть (использовать оба) одновременно, и, например, иметь возможность видеть это: Игнорируйте тот факт, что порты здесь одинаковые, я зная, что они не будут работать одновременно, я обновлю пользовательские файлы проекта docker -compose.yml, когда это сработает
docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------
nginx-proxy /usr/bin/supervisord Up 0.0.0.0:443->443/tcp,
0.0.0.0:80->80/tcp
redis-cache /usr/bin/supervisord Up 0.0.0.0:6379->6379/tcp
varnish-cache /usr/bin/supervisord Up 0.0.0.0:6081->6081/tcp,
0.0.0.0:6082->6082/tcp
web-server- /usr/bin/supervisord Up 0.0.0.0:8080->8080/tcp
apache2
nginx-proxy /usr/bin/supervisord Up 0.0.0.0:443->443/tcp,
0.0.0.0:80->80/tcp
redis-cache-delete /usr/bin/supervisord Up 0.0.0.0:6379->6379/tcp
varnish-cache-delete /usr/bin/supervisord Up 0.0.0.0:6081->6081/tcp,
0.0.0.0:6082->6082/tcp
web-server- /usr/bin/supervisord Up 0.0.0.0:8080->8080/tcp
apache2-delete
Если кто-нибудь спросит: почему бы просто не поместить веб-сайты в один (один) контейнер ??
Если кто-то может спросить об этом, я знаю, что могу добавить несколько веб-сайтов в /etc/apache2/sites-enabled
(или nginx) и добавить пользовательские файлы конфигурации, используя ADD
в Dockerfile для каждого сайта, но с помощью этого метода я не может протестировать различные небольшие настройки .
Различные настройки, которые можно использовать, ссылаясь на другой другое изображение в 'override docker -compose files '
Например, я могу создать Dockerfile, который устанавливает все php7 .3 библиотеки, и запустить на нем Magento 2.3 , а затем создать еще один Dockerfile для test php7 .4, и есть еще один для запуска старого сайта Magento 1 на установке PHP5 .6 и т. Д. .