Итак, у меня есть:
version: "3.6"
services:
nginx:
image: nginx
app:
image: node:latest
И моя конфигурация nginx:
upstream project_app {
server app:4000;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://project_app;
}
Чтобы обновить контейнер без простоев (непрерывные обновления), я сначала увеличил масштаб app
service to 2:
docker-compose up -d --no-deps --scale app=2 --no-recreate app
Это создаст project_app_1
вдоль project_app
.
Но на этом этапе, даже когда новый контейнер project_app_1
готов, все трафик c идет к project_app
, бывшему контейнеру.
Чтобы их использовать, мне нужно запустить docker-compose restart nginx
.
Теперь траффи c маршрутизатор к project_app
и project_app_1
, что действительно круто.
Теперь я готов убить project_app
, который сейчас устарел.
Мои вопросы:
- Нужно ли перезапускать nginx снова после его смерти, чтобы убедиться, что all traffi c маршрутизируется на
project_app_1
или это несколько автоматизировано c? - Факт, что
http://app:4000
работает, из-за конфигурации имени хоста DNS, верно? Где можно узнать больше об этом? - Если обнаружение завершения работы работает автоматически в nginx, нет способа сделать обнаружение запуска также автоматическим c, чтобы избежать перезапуска nginx, который вызывает Время простоя 2 секунды?
Спасибо
PS: Если вам интересен весь сценарий, который я использую, я сообщил об этом в связанной проблеме github .