Можно ли переключать привязку порта между док-контейнерами без простоев? - PullRequest
0 голосов
/ 22 марта 2019

Сценарий:

На локальном хосте 80 запущен контейнер с версией образа 1.0 и открытым портом 8080. Доступна новая версия образа, и необходимо переключить эти версии. Нет, любой инструмент оркестровки работает (Kubernetes, OpenShift и т. Д.).

Можно ли запустить контейнер с версией 1.1, чтобы он работал без проблем Пожалуйста, имейте в виду, что я не хочу быть простым, без репликации и т. Д. Просто докер контейнер с привязанным портом к localhost.

Вопросы: 1. Можно ли переключать отображение порта между контейнерами без простоя ? 2. Если нет, существует ли какой-либо механизм, реализованный с помощью Docker (бесплатная версия) для такого переключения?

Ответы [ 2 ]

1 голос
/ 22 марта 2019

Без простоя вам потребуется вторая реплика службы, работающая в рабочем состоянии, и прокси-сервер напротив этой службы, который прослушивает запросы пользователей и перенаправляет их от одного к другому. Как 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, на нужный контейнер, в то же время предоставляя функции для миграции между различными версиями с указанием веса используемого бэкэнда, чтобы вы могли делать больше, чем просто циклический перебор балансировка нагрузки при обновлении.

0 голосов
/ 22 марта 2019

Нет встроенного в Docker механизма, который позволял бы вам заменять один контейнер на другой с без прерывания.С другой стороны, продолжительность прерывания может быть измерена в миллисекундах;является ли это действительно проблемой для вас, полностью зависит от вашего приложения.

Вы можете получить желаемое поведение, введя динамический обратный прокси, такой как Traefik в вашу конфигурацию.Прокси-сервер связывается с портами хоста и обрабатывает запросы от удаленных систем, а затем распределяет эти запросы по одному или нескольким внутренним контейнерам.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...