Как использовать команду docker service rollback для отмены обновлений службы

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии вы научитесь эффективно управлять обновлениями служб в среде Docker Swarm. Мы начнем с создания службы Docker Swarm, которая является основой для развертывания и масштабирования контейнеризованных приложений.

После создания службы вы выполните обновление конфигурации службы, имитируя типичный сценарий развертывания. Затем основной акцент в этом лабораторном занятии будет сделан на демонстрации того, как использовать команду docker service rollback для возврата службы к ее предыдущей стабильной версии. Наконец, вы проверите конфигурацию службы после отката, чтобы подтвердить успешное восстановление.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/ls -.-> lab-555230{{"Как использовать команду docker service rollback для отмены обновлений службы"}} docker/ps -.-> lab-555230{{"Как использовать команду docker service rollback для отмены обновлений службы"}} docker/inspect -.-> lab-555230{{"Как использовать команду docker service rollback для отмены обновлений службы"}} docker/create -.-> lab-555230{{"Как использовать команду docker service rollback для отмены обновлений службы"}} docker/pull -.-> lab-555230{{"Как использовать команду docker service rollback для отмены обновлений службы"}} end

Создание службы Docker Swarm

На этом шаге мы научимся создавать службу Docker Swarm. Служба Docker Swarm представляет собой набор задач, которые запускаются в кластере Swarm. Каждая задача является экземпляром контейнера. Службы - это центральное понятие Docker Swarm, которое позволяет определить, сколько реплик образа контейнера должно быть запущено и как они должны обновляться.

Перед созданием службы нам нужно инициализировать Docker Swarm. Поскольку мы работаем на одной виртуальной машине, мы инициализируем одноузловой Swarm.

Сначала инициализируем Swarm:

docker swarm init --advertise-addr 127.0.0.1

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

Теперь создадим службу с использованием образа nginx. Мы назовем службу my-nginx и укажем, что хотим запустить 3 реплики контейнера nginx.

Сначала загрузим образ nginx, чтобы убедиться, что он доступен локально:

docker pull nginx:latest

Теперь создадим службу:

docker service create --name my-nginx --replicas 3 nginx:latest

Эта команда создает новую службу с именем my-nginx с 3 репликами, используя образ nginx:latest. Docker Swarm автоматически распределит эти реплики по узлам в Swarm (в данном случае, только по нашему одному узлу).

Чтобы убедиться, что служба была создана и реплики запущены, вы можете вывести список служб:

docker service ls

Вы должны увидеть my-nginx в списке с 3/3 запущенными репликами.

Вы также можете проверить задачи, связанные со службой:

docker service ps my-nginx

Эта команда покажет вам отдельные задачи (контейнеры), которые составляют службу my-nginx, их текущее состояние и узел, на котором они запущены. Вы должны увидеть 3 задачи в состоянии Running.

Обновление службы до новой конфигурации

На этом шаге мы обновим службу my-nginx для использования другой версии образа nginx. Это демонстрирует, как выполнить постепенное обновление службы в Docker Swarm.

Сначала загрузим образ nginx:1.21. Это конкретная версия Nginx, на которую мы обновим нашу службу.

docker pull nginx:1.21

Теперь обновим службу my-nginx для использования образа nginx:1.21. Мы также изменим количество реплик на 5.

docker service update --image nginx:1.21 --replicas 5 my-nginx

Эта команда сообщает Docker Swarm обновить службу my-nginx. Флаг --image nginx:1.21 указывает новый образ для использования, а флаг --replicas 5 изменяет желаемое количество реплик на 5. Docker Swarm выполнит постепенное обновление, заменяя старые контейнеры новыми, запускающими указанный образ, и корректируя количество реплик.

Вы можете отслеживать ход обновления, выведя список задач службы:

docker service ps my-nginx

Вы увидите, как создаются новые задачи с использованием образа nginx:1.21, а старые задачи останавливаются. В конечном итоге вы должны увидеть 5 задач в состоянии Running, все используя образ nginx:1.21.

Вы также можете проверить детали службы, чтобы подтвердить обновление:

docker service inspect my-nginx --pretty

Найдите поля Image и Replicas в выводе, чтобы подтвердить, что они были обновлены соответственно до nginx:1.21 и 5.

Откат службы до предыдущей версии

На этом шаге мы откатим службу my-nginx до ее предыдущей конфигурации. Docker Swarm отслеживает предыдущие конфигурации служб, что позволяет легко вернуться к известному рабочему состоянию, если обновление привело к проблемам.

Для отката службы мы используем команду docker service update с флагом --rollback.

docker service update --rollback my-nginx

Эта команда информирует Docker Swarm откатить службу my-nginx до конфигурации, которая была до последнего обновления. В нашем случае это означает возвращение к образу nginx:latest и исходному количеству реплик (которое было 3).

Вы можете отслеживать процесс отката, выведя список задач службы:

docker service ps my-nginx

Вы увидите, как задачи, запускающие образ nginx:1.21, останавливаются, а создаются новые задачи с использованием образа nginx:latest. Количество задач также будет восстановлено до предыдущего количества реплик.

После завершения отката вы должны увидеть задачи, запускающие образ nginx:latest, и количество реплик должно вернуться до 3.

Вы также можете проверить детали службы, чтобы подтвердить откат:

docker service inspect my-nginx --pretty

Найдите поля Image и Replicas в выводе. Теперь они должны отражать конфигурацию до последнего обновления.

Проверка конфигурации службы после отката

На этом шаге мы явно проверим, что служба my-nginx была успешно откачена до ее предыдущей конфигурации. Это включает проверку как образа, используемого службой, так и количества реплик.

Сначала выведем список служб, чтобы увидеть текущее состояние:

docker service ls

Вы должны увидеть my-nginx в списке, и в столбце REPLICAS должно быть указано 3/3. Это означает, что требуется 3 реплики и 3 из них в настоящее время запущены.

Далее, проверим детали службы, чтобы подтвердить образ и количество реплик.

docker service inspect my-nginx --pretty

В выводе найдите поле Image. Теперь оно должно быть nginx:latest. Также найдите поле Replicas, которое должно быть равно 3.

Наконец, посмотрим на задачи, связанные со службой, чтобы подтвердить, что запущенные контейнеры используют правильный образ.

docker service ps my-nginx

Вы должны увидеть 3 задачи в списке, и в столбце IMAGE для каждой задачи должно быть указано nginx:latest. Состояние CURRENT STATE для всех задач должно быть Running.

Проведя эти проверки, мы можем быть уверены, что откат прошел успешно и служба работает в желаемом предыдущем состоянии.

Резюме

В этом практическом занятии (лабораторной работе) мы научились управлять службами Docker Swarm, сконцентрировавшись в частности на создании и обновлении этих служб. Мы начали с инициализации одноузлового кластера Docker Swarm, а затем создали службу с именем my-nginx с тремя репликами, используя образ nginx:latest. Мы проверили создание службы и запущенные задачи с помощью команд docker service ls и docker service ps.

После создания службы мы изучили, как обновить конфигурацию службы. Это включало изменение образа, используемого службой, демонстрируя распространенный сценарий обновления служб в среде Swarm.