Como usar o comando docker service scale para escalar serviços

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como gerenciar efetivamente o número de instâncias em execução (réplicas) de seus serviços dentro de um Docker Swarm. Começaremos criando um serviço replicado, estabelecendo uma linha de base com múltiplas cópias em execução.

Após a criação, você explorará como ajustar dinamicamente a escala do serviço. Isso inclui escalar um único serviço para cima para lidar com o aumento da demanda, escalá-lo para baixo, até mesmo para zero réplicas, e, finalmente, escalar múltiplos serviços simultaneamente para gerenciar implantações complexas. Através de comandos práticos, você obterá experiência prática no uso do comando docker service scale para alcançar alta disponibilidade e otimização de recursos para suas aplicações em contêineres.

Criar um serviço replicado

Neste passo, aprenderemos como criar um serviço replicado usando o Docker. Um serviço replicado significa que múltiplas cópias idênticas (réplicas) do seu serviço estão sendo executadas simultaneamente. Isso fornece alta disponibilidade e permite que você lide com mais tráfego.

Primeiro, vamos baixar a imagem Docker necessária. Usaremos a imagem alpine para este exemplo.

docker pull alpine

Você deve ver a saída indicando que a imagem está sendo baixada.

Agora, vamos criar um serviço replicado chamado my-alpine-service com 3 réplicas. Usaremos a imagem alpine e o comando ping localhost. Este comando será executado dentro de cada contêiner e fará ping continuamente no localhost.

docker service create --name my-alpine-service --replicas 3 alpine ping localhost

Após executar este comando, o Docker Swarm criará o serviço e iniciará o número especificado de réplicas. Você deve ver a saída confirmando a criação do serviço.

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-alpine-service listado com 3 réplicas.

Você também pode inspecionar o serviço para obter mais detalhes.

docker service inspect my-alpine-service

Este comando exibirá um grande objeto JSON contendo informações detalhadas sobre o serviço, incluindo o número de réplicas.

Finalmente, vamos verificar as tarefas associadas ao serviço para ver os contêineres individuais em execução.

docker service ps my-alpine-service

Este comando mostrará o status de cada réplica (tarefa) do serviço. Você deve ver 3 tarefas listadas, cada uma em estado de execução.

Escalar um único serviço para cima (scale up)

Neste passo, aprenderemos como escalar um único serviço para cima. Escalar para cima significa aumentar o número de réplicas para um serviço. Isso é útil quando você precisa lidar com o aumento da carga ou tráfego.

No passo anterior, criamos um serviço chamado my-alpine-service com 3 réplicas. Agora, vamos escalar este serviço para cima para 5 réplicas. Podemos usar o comando docker service scale para isso.

docker service scale my-alpine-service=5

Após executar este comando, o Docker Swarm adicionará 2 novas réplicas ao serviço. Você deve ver a saída indicando que o serviço está sendo atualizado.

Para verificar se o serviço foi escalado para cima, você pode listar os serviços novamente.

docker service ls

Você deve agora ver my-alpine-service listado com 5 réplicas.

Você também pode verificar as tarefas associadas ao serviço para ver os contêineres recém-criados.

docker service ps my-alpine-service

Este comando mostrará o status de todas as 5 réplicas (tarefas) do serviço. Você deve ver 5 tarefas listadas, com as novas transitando para um estado de execução.

Reduzir um único serviço para zero (scale down)

Neste passo, aprenderemos como reduzir um único serviço para zero réplicas. Reduzir para zero efetivamente para todas as instâncias do serviço. Isso pode ser útil para desligar temporariamente um serviço sem remover sua configuração.

No passo anterior, escalamos o my-alpine-service para 5 réplicas. Agora, vamos reduzir este serviço para 0 réplicas. Usaremos o comando docker service scale novamente.

docker service scale my-alpine-service=0

Após executar este comando, o Docker Swarm irá parar e remover todas as réplicas em execução do serviço. Você deve ver a saída indicando que o serviço está sendo atualizado.

Para verificar se o serviço foi reduzido para zero, você pode listar os serviços.

docker service ls

Você deve agora ver my-alpine-service listado com 0 réplicas.

Você também pode verificar as tarefas associadas ao serviço.

docker service ps my-alpine-service

Este comando mostrará o status das tarefas. Como reduzimos para zero, não deve haver tarefas em execução listadas. Você pode ver tarefas em um estado "Shutdown" (Desligado), indicando que foram paradas.

Escalar múltiplos serviços

Neste passo, aprenderemos como escalar múltiplos serviços simultaneamente. Isso é útil quando você tem vários serviços que precisam ser escalados juntos, por exemplo, diferentes componentes de uma aplicação.

Primeiro, vamos criar outro serviço. Criaremos um serviço chamado my-nginx-service usando a imagem nginx com 1 réplica. Precisamos primeiro fazer o pull da imagem nginx.

docker pull nginx

Você deve ver a saída indicando que a imagem nginx está sendo baixada.

Agora, crie o my-nginx-service.

docker service create --name my-nginx-service --replicas 1 nginx

Você deve ver a saída confirmando a criação do my-nginx-service.

Agora temos dois serviços: my-alpine-service (atualmente escalado para 0) e my-nginx-service (escalado para 1). Vamos escalar ambos os serviços de uma vez. Escalaremos my-alpine-service para 2 réplicas e my-nginx-service para 3 réplicas.

docker service scale my-alpine-service=2 my-nginx-service=3

Após executar este comando, o Docker Swarm atualizará ambos os serviços de acordo com as contagens de réplicas especificadas. Você deve ver a saída indicando que ambos os serviços estão sendo atualizados.

Para verificar se ambos os serviços foram escalados, você pode listar os serviços.

docker service ls

Você deve agora ver my-alpine-service listado com 2 réplicas e my-nginx-service listado com 3 réplicas.

Você também pode verificar as tarefas para cada serviço individualmente para ver os contêineres em execução.

docker service ps my-alpine-service

Isso mostrará as 2 tarefas em execução para my-alpine-service.

docker service ps my-nginx-service

Isso mostrará as 3 tarefas em execução para my-nginx-service.

Finalmente, vamos limpar os serviços que criamos. Podemos remover ambos os serviços usando o comando docker service rm.

docker service rm my-alpine-service my-nginx-service

Você deve ver a saída confirmando a remoção de ambos os serviços.

Para verificar se os serviços foram removidos, liste os serviços novamente.

docker service ls

Não deve haver serviços listados.

Resumo

Neste laboratório, aprendemos como gerenciar o dimensionamento (scaling) de serviços Docker. Começamos criando um serviço replicado com um número especificado de réplicas, demonstrando a implantação inicial de uma aplicação tolerante a falhas. Em seguida, exploramos como ajustar dinamicamente o número de instâncias em execução para um único serviço, primeiro escalando-o para cima (scale up) para lidar com o aumento da demanda e, subsequentemente, escalando-o para baixo (scale down), incluindo a redução das réplicas para zero para efetivamente parar o serviço.

Finalmente, aprendemos como escalar múltiplos serviços simultaneamente, demonstrando a capacidade de gerenciar a alocação de recursos para várias aplicações dentro de um ambiente Docker Swarm com um único comando. Esses passos forneceram experiência prática no uso do comando docker service scale para gerenciar eficientemente o ciclo de vida e a utilização de recursos dos serviços.