Как создать подсети для каждой отдельной связки docker compose?

Всем доброго времени суток!

Я на данный момент изучаю докер для быстрого свертывания \ развертывания проектов на сервере\локалке для разарботки, и столкнулся с проблемой.

Я придумал немного странную композицию, в качестве фронта у меня NGINX который по идее должен проксировать все запросы по разным "связкам" docker-compose (т.е связке контейнеров)

Это связанно с тем что проект A у меня может быть php-apache + mysql, второй java+tomcat+SQLite.

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

т.е у меня это выглядит так:

  1. Запускается отдельно контейнер NGINX на порте 8080
  2. Далее я запускаю свой проект, в котором apache+mysql+php в той же сети что и контейнер с докером Из за чего мне нужно вручную прописывать порты внутри каждого отдельного проекта. Это не совсем то что нужно, ведь основная цель что бы проекты были максимально независимы и не связаны конфигом

Нету ли в линукс\nginx\docker способа создать что то вроде виртуальной подсети для каждоого проекта, и потом обращаться к этой сети через NGINX по локальному DNS?

например назвать сеть проекта А: project_a в NGINX проксировать запрос на project_a:80 (внутри сети у apache прокинуть порт 80) с проектом б тоже самое

Мою бы проблему решило бы так же "запекание" связки контейнеров docker-compose в один образ, но гугление показало что это противоречит цели docker-compose (организации контейнеров докер)


Ответы (1 шт):

Автор решения: Sergei Kirjanov

docker-compose лучше применять для каждого проекта отдельно -- раздельный деплой, т. к. некоторые проекты (которые просто паботают) не хочется трогать во время деплоя других.

Можно написать небольшую обертку к docker-compose которая может, например:

  • вывести лист используемых портов
  • проверить конфликты портов
  • создать конечные yml по шаблонам

Можно создать подсети, но есть шанс, что при рестарте сервера докер запутается и не сможет поднять все это в нужном порядке.

→ Ссылка