У меня есть несколько Docker-контейнеров, работающих как:
- Nginx
- Веб-приложение 1
- Веб-приложение 2
- PostgreSQL
Поскольку Nginx необходимо подключаться к серверам веб-приложений в веб-приложениях 1 и 2, а веб-приложениям необходимо взаимодействовать с PostgreSQL, у меня есть такие связи:
- Nginx --- ссылка ---> Веб-приложение 1
- Nginx --- ссылка ---> Веб-приложение 2
- Веб-приложение 1 --- ссылка ---> PostgreSQL
- Веб-приложение 2 --- ссылка ---> PostgreSQL
Сначала это работает очень хорошо. Однако когда я разрабатываю новую версию веб-приложения 1 и веб-приложения 2, мне необходимо заменить их. Что я делаю, так это удаляю контейнеры веб-приложений, настраиваю новые контейнеры и запускаю их.
Для контейнеров веб-приложений их IP-адрес сначала будет выглядеть примерно так:
- 172.17.0.2
- 172.17.0.3
И после того, как я заменю их, у них будут новые IP-адреса:
- 172.17.0.5
- 172.17.0.6
Теперь эти открытые переменные среды в контейнере Nginx по-прежнему указывают на старые IP-адреса. Здесь возникает проблема. Как заменить контейнер, не нарушая связи между контейнерами? Та же проблема будет и с PostgreSQL. Если я хочу обновить версию образа PostgreSQL, мне, безусловно, нужно удалить ее и запустить новую, но затем мне нужно перестроить весь контейнерный граф, так что это не идеально для реальной работы сервера.