Como usar o comando docker service rollback para reverter atualizações de serviço

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como gerenciar efetivamente as atualizações de serviços em um ambiente Docker Swarm. Começaremos criando um serviço Docker Swarm, que serve como base para implantar e escalar aplicações em contêineres.

Após a criação do serviço, você realizará uma atualização na configuração do serviço, simulando um cenário de implantação típico. O foco principal deste laboratório é demonstrar como usar o comando docker service rollback para reverter o serviço para sua versão anterior e estável. Finalmente, você verificará a configuração do serviço após o rollback para confirmar a restauração bem-sucedida.

Criar um serviço Docker Swarm

Nesta etapa, aprenderemos como criar um serviço Docker Swarm. Um serviço Docker Swarm é um conjunto de tarefas que são executadas em um cluster Swarm. Cada tarefa é uma instância de um contêiner. Os serviços são o conceito central do Docker Swarm, permitindo que você defina quantas réplicas de uma imagem de contêiner devem estar em execução e como elas devem ser atualizadas.

Antes de criar um serviço, precisamos inicializar um Docker Swarm. Como estamos executando em uma única VM, inicializaremos um Swarm de nó único.

Primeiro, vamos inicializar o Swarm:

docker swarm init --advertise-addr 127.0.0.1

Você deve ver uma saída indicando que o Swarm foi inicializado e que o nó atual agora é um manager.

Agora, vamos criar um serviço usando a imagem nginx. Vamos nomear o serviço my-nginx e especificar que queremos 3 réplicas do contêiner nginx em execução.

Primeiro, faça o pull da imagem nginx para garantir que ela esteja disponível localmente:

docker pull nginx:latest

Agora, crie o serviço:

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

Este comando cria um novo serviço chamado my-nginx com 3 réplicas usando a imagem nginx:latest. O Docker Swarm distribuirá automaticamente essas réplicas pelos nós no Swarm (neste caso, apenas nosso único nó).

Para verificar se o serviço foi criado e as réplicas estão em execução, você pode listar os serviços:

docker service ls

Você deve ver my-nginx listado com 3/3 réplicas em execução.

Você também pode inspecionar as tarefas associadas ao serviço:

docker service ps my-nginx

Este comando mostrará as tarefas individuais (contêineres) que compõem o serviço my-nginx, seu estado atual e o nó em que estão sendo executadas. Você deve ver 3 tarefas no estado Running.

Atualizar o serviço para uma nova configuração

Nesta etapa, atualizaremos o serviço my-nginx para usar uma versão diferente da imagem nginx. Isso demonstra como realizar uma atualização contínua (rolling update) de um serviço no Docker Swarm.

Primeiro, vamos fazer o pull da imagem nginx:1.21. Esta é uma versão específica do Nginx para a qual atualizaremos nosso serviço.

docker pull nginx:1.21

Agora, atualizaremos o serviço my-nginx para usar a imagem nginx:1.21. Também mudaremos o número de réplicas para 5.

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

Este comando informa ao Docker Swarm para atualizar o serviço my-nginx. A flag --image nginx:1.21 especifica a nova imagem a ser usada, e a flag --replicas 5 altera o número desejado de réplicas para 5. O Docker Swarm realizará uma atualização contínua, substituindo os contêineres antigos por novos que executam a imagem especificada e ajustando o número de réplicas.

Você pode monitorar o progresso da atualização listando as tarefas do serviço:

docker service ps my-nginx

Você verá novas tarefas sendo criadas com a imagem nginx:1.21 e as tarefas antigas sendo desligadas. Eventualmente, você deverá ver 5 tarefas no estado Running, todas usando a imagem nginx:1.21.

Você também pode verificar os detalhes do serviço para confirmar a atualização:

docker service inspect my-nginx --pretty

Procure os campos Image e Replicas na saída para confirmar que eles foram atualizados para nginx:1.21 e 5, respectivamente.

Reverter o serviço para a versão anterior

Nesta etapa, reverteremos o serviço my-nginx para sua configuração anterior. O Docker Swarm acompanha as configurações anteriores do serviço, permitindo que você reverta facilmente para um estado conhecido como bom (known good state) se uma atualização introduzir problemas.

Para reverter o serviço, usamos o comando docker service update com a flag --rollback.

docker service update --rollback my-nginx

Este comando instrui o Docker Swarm a reverter o serviço my-nginx para a configuração que ele tinha antes da última atualização. Em nosso caso, isso significa reverter para a imagem nginx:latest e o número original de réplicas (que era 3).

Você pode monitorar o processo de reversão listando as tarefas do serviço:

docker service ps my-nginx

Você verá tarefas executando a imagem nginx:1.21 sendo desligadas e novas tarefas executando a imagem nginx:latest sendo criadas. O número de tarefas também se ajustará de volta à contagem de réplicas anterior.

Assim que a reversão for concluída, você deverá ver tarefas executando a imagem nginx:latest e o número de réplicas deverá voltar para 3.

Você também pode inspecionar os detalhes do serviço para confirmar a reversão:

docker service inspect my-nginx --pretty

Procure os campos Image e Replicas na saída. Eles agora devem refletir a configuração antes da última atualização.

Verificar a configuração do serviço após a reversão

Nesta etapa, verificaremos explicitamente se o serviço my-nginx foi revertido com sucesso para sua configuração anterior. Isso envolve verificar tanto a imagem que está sendo usada pelo serviço quanto o número de réplicas.

Primeiro, vamos listar os serviços para ver o estado atual:

docker service ls

Você deve ver my-nginx listado, e a coluna REPLICAS deve mostrar 3/3. Isso indica que existem 3 réplicas desejadas e 3 estão atualmente em execução.

Em seguida, vamos inspecionar os detalhes do serviço para confirmar a imagem e a contagem de réplicas.

docker service inspect my-nginx --pretty

Na saída, procure o campo Image. Ele agora deve ser nginx:latest. Além disso, procure o campo Replicas, que deve ser 3.

Finalmente, vamos olhar para as tarefas associadas ao serviço para confirmar que os contêineres em execução estão usando a imagem correta.

docker service ps my-nginx

Você deve ver 3 tarefas listadas, e a coluna IMAGE para cada tarefa deve ser nginx:latest. O CURRENT STATE para todas as tarefas deve ser Running.

Ao realizar essas verificações, podemos ter certeza de que a reversão foi bem-sucedida e que o serviço está sendo executado em seu estado anterior desejado.

Resumo

Neste laboratório, aprendemos como gerenciar serviços do Docker Swarm, com foco específico na criação e atualização deles. Começamos inicializando um Docker Swarm de nó único e, em seguida, criamos um serviço chamado my-nginx com três réplicas usando a imagem nginx:latest. Verificamos a criação do serviço e as tarefas em execução usando docker service ls e docker service ps.

Após a criação do serviço, exploramos como atualizar a configuração do serviço. Isso envolveu a alteração da imagem usada pelo serviço, demonstrando um cenário comum para atualizações de serviço em um ambiente Swarm.