#docker #docker-compose #docker-swarm
#docker #docker-создать #docker-swarm
Вопрос:
Я запускаю службу в Docker Swarm. Это то, что я сделал для развертывания службы:
docker swarm init
docker stack deploy -c docker-compose.yml MyApplication
Содержимое docker-compose.yml:
version: "3"
services:
web:
image: myimage:1.0
ports:
- "9000:80"
- "9001:443"
deploy:
replicas: 3
resources:
limits:
cpus: "0.5"
memory: 256M
restart_policy:
condition: on-failure
Давайте не будем говорить, что я обновляю приложение и создаю новый образ myimage:2.0
. Как правильно развернуть новую версию образа в службе без простоев?
Ответ №1:
Способ добиться этого:
- обеспечьте проверку работоспособности. Таким образом, docker узнает, прошло ли ваше новое развертывание успешно.
- контролируйте, как docker будет обновлять вашу службу с помощью update_config
- https://docs.docker.com/compose/compose-file/#update_config
- обратите внимание на
order
иparallelism
, например, если вы выберетеorder: stop-first
parallelism: 2
и количество ваших копий будет таким же, какparallelism
, ваше приложение полностью остановится при обновлении
- если ваше обновление не завершилось успешно, вы, вероятно, захотите выполнить откат
- также не забывайте о политике restart_policy
У меня есть несколько примеров на эту тему:
- Режим Docker Swarm Повторил пример с Flask и Caddy
- https://github.com/douglasmiranda/lab/tree/master/caddy-healthcheck-of-caddy-itself
С этим вы можете просто запустить docker stack deploy...
снова. Если в сервисе произошли изменения, он будет обновлен.
Ответ №2:
вы можете использовать команду docker service update --image
, но она запустит новый контейнер с неявным масштабом 0/1.
Время простоя зависит от вашего приложения.