Я бы предложил извлечь nginx-proxy
в отдельный docker-compose.yml
и создать хранилище для конфигурации "обратный прокси" со следующим:
Файл с дополнительным содержимым для добавления в /etc/hosts
127.0.0.1 dockertest.com
127.0.0.1 anothertest.com
127.0.0.1 third-domain.net
И docker-compose.yml
, который будет иметь только обратный прокси
version: "3.3"
services:
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- 80:80
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
Далее, как вы уже упоминали, создайте docker-compose.yml
для каждого из ваших репозиториев, которые действуют как конечные точки сети. Вам нужно будет добавить VIRTUAL_HOST
env var к сервисам, которые обслуживают ваши приложения (например, Apache).
Контейнер nginx-proxy
может работать в «постоянном режиме», поскольку он занимает небольшую площадь. Таким образом, всякий раз, когда вы запускаете новый контейнер с VIRTUAL_HOST
env var, конфигурация nginx-proxy
будет автоматически обновляться для включения нового локального домена. (Вам все равно придется обновить /etc/hosts
новой записью).
Если вы решите использовать сети, ваши контейнеры конечных веб-сайтов должны будут находиться в той же сети, что и nginx-proxy
, поэтому ваши файлы docker-compose должны быть изменены следующим образом:
# nginx-proxy/docker-compose.yml
version: "3.3"
services:
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- 80:80
networks:
- reverse-proxy
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
reverse-proxy:
# service1/docker-compose.yml
version: "3.3"
services:
php1:
...
networks:
- backend1
apache1:
...
networks:
- nginx-proxy_reverse-proxy
- backend1
environment:
- VIRTUAL_HOST=dockertest.com
mysql1:
...
networks:
- backend1
networks:
backend1:
nginx-proxy_reverse-proxy:
external: true
# service2/docker-compose.yml
version: "3.3"
services:
php2:
...
networks:
- backend2
apache2:
...
networks:
- nginx-proxy_reverse-proxy
- backend2
environment:
- VIRTUAL_HOST=anothertest.com
mysql2:
...
networks:
- backend2
networks:
backend2:
nginx-proxy_reverse-proxy:
external: true
Сеть reverse-proxy
, созданная в nginx-proxy/docker-compose.yml
, упоминается как nginx-proxy_reverse-proxy
в других файлах создания docker, потому что всякий раз, когда вы определяете сеть - ее окончательное имя будет {{folder name}}_{{network name}}
Если вы хотите взглянуть на решение, которое использует расширение прокси браузера вместо /etc/hosts
, посмотрите mitm-proxy-nginx-companion