Без простоя вам потребуется вторая реплика службы, работающая в рабочем состоянии, и прокси-сервер напротив этой службы, который прослушивает запросы пользователей и перенаправляет их от одного к другому. Как Swarm Mode, так и Kubernetes предоставляют эту возможность с помощью аналогичных инструментов: открываемый порт косвенно подключается к приложению через обратный прокси-сервер приложения или через некоторые правила iptables и записи ipvs в ядре.
Из коробки в последних версиях Docker включена поддержка Swarm Mode без установки дополнительных компонентов. Вы можете запустить простой docker swarm init
, чтобы запустить кластер роя из одного узла менее чем за секунду. И тогда вместо docker-compose up
вы переключаетесь на docker stack deploy -c docker-compose.yml $stack_name
, чтобы управлять вашими проектами практически с одним и тем же файлом композиции. Для режима роя вы должны использовать версию 3 синтаксиса составного файла.
Для файла составления синтаксиса v3 в режиме роя, который не имеет сбоев при обновлении, вы хотите, чтобы в образе, определенном в Healthcheck, отслеживалось приложение и сообщалось, когда оно будет готово к приему запросов. Затем вы захотите, чтобы в разделе развертывания файла compose было несколько реплик для HA или, по крайней мере, была настроена одна реплика для политики «start-first», чтобы убедиться, что новая служба работает до остановки старой. См. Составление документов для настройки параметров: https://docs.docker.com/compose/compose-file/#update_config
Для обратного прокси-сервера на основе приложения в Docker мне действительно нравится traefik, но больше, чтобы позволить мне запускать несколько сервисов контейнеров на основе http с одним открытым портом. Это позволяет мне отображать запросы, основанные на заголовке hostname / path / http, на нужный контейнер, в то же время предоставляя функции для миграции между различными версиями с указанием веса используемого бэкэнда, чтобы вы могли делать больше, чем просто циклический перебор балансировка нагрузки при обновлении.