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

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

Введение

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

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

Создание службы 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.