У мене є кілька контейнерів 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, мені, звичайно, потрібно видалити її та запустити нову, але тоді мені потрібно відновити весь графік контейнера, тому це не ідеально для реальної роботи сервера.