Em um ambiente de produção, no qual há a necessidade de Alta Disponibilidade e Tolerância a Falhas, é essencial adotar uma solução para gerenciar e dimensionar contêineres. A opção mais comumente escolhida por profissionais é o IBM Cloud Kubernetes Service, que utiliza o Kubernetes para orquestrar contêineres.
Neste guia, optei por uma solução simples: o Docker Swarm. Nele, os nós podem ser divididos em dois tipos principais: gerenciadores (managers) e trabalhadores (workers)
- Gerenciadores (Managers): São os nós responsáveis pela gestão e coordenação do cluster. Eles mantêm o estado atual do serviço e orquestram a distribuição de tarefas entre os nós trabalhadores. Em um cluster Docker Swarm, geralmente, é necessário pelo menos um gerenciador, mas pode-se ter vários para garantir alta disponibilidade.
- Trabalhadores (Workers): São os nós que executam as tarefas atribuídas pelos gerenciadores. Eles são responsáveis por executar os contêineres que compõem seus serviços.”
Laboratório
Neste laboratório, iremos criar um cluster Docker Swarm no Play with Docker com apenas três nós, cada um com as seguintes atribuições
- Nó 1: Gerenciador (Manager) -> IP: 192.168.0.8
- Nó 2: Trabalhador (Worker) -> IP: 192.168.0.7
- Nó 3: Trabalhador (Worker) -> IP: 192.168.0.6
1. Navegue até o Play-with-Docker e faça login com as credenciais do Docker Hub;
2. Clique três vezes em Add New Instance para que possamos criar três nós;
3. Acesse através de SSH o nó 1 e, em seguida, inicie um cluster no Docker usando o parâmetro --advertise-addr eth0
para especificar a interface de rede eth0
que o nó Swarm usará para se comunicar com outros nós do cluster:”

4. Após a execução do comando docker swarm init
, observe que foi gerado um comando circulado em vermelho. Iremos executá-lo nos outros nós (Node 2 e Node 3).”
Explicação:
docker swarm join
: Usado para ingressar em um cluster existente.--token SWMTKN-1-06kexgia6mrek4q9ifufnhjmjk20d2oaqub9m0sir1abghrey0-5nl6mq0e65a7osyb1opp5gyf5
: Token de ingresso necessário para que os nodes ingressem ao cluster.192.168.0.8:2377
: Endereço IP e porta do nó gerenciador (manager) do cluster.
5. Acessaremos via SSH o nó 2 e, em seguida, o nó 3, executando respectivamente o comando para que possamos ingressá-los no cluster. É importante receber a mensagem ‘this node joined a swarm as a worker‘ para confirmar o ingresso com sucesso.


6. Agora, para sabermos quantos nós temos em nosso cluster, será necessário executarmos em nosso nó 1, o gerenciador:
$ docker node ls

Observe que agora temos três nós no cluster com STATUS Ready, porém o nó 1 é o único que possui seu MANAGER STATUS como Leader.
7. Ainda no nó 1, o gerenciador, criaremos um serviço distribuído no Swarm chamado ‘nginx1’, baseado na imagem do Nginx 1.12, com duas réplicas. O Swarm distribuirá automaticamente essas réplicas pelos nós disponíveis no cluster, proporcionando alta disponibilidade e escalabilidade para o serviço Nginx:
$ docker service create --detach=true --name nginx1 --publish 80:80 --mount source=/etc/hostname,target=/usr/share/nginx/html/index.html,type=bind,ro --replicas 2 nginx:1.12

Os resultados indicam que há duas réplicas do serviço nginx1 em execução nos nós 2 e 3. Isso confirma que o Docker Swarm distribuiu as réplicas conforme esperado pelos nós do seu cluster.
8. Teste o serviço! Se você acessar via SSH qualquer nó do cluster e executar o comando:
$ curl localhost:80

A malha de roteamento do Docker Swarm redirecionará automaticamente essa solicitação para um dos nós que está executando o contêiner NGINX. Portanto, mesmo que executemos o comando em um nó específico, a malha de roteamento garantirá que a solicitação seja direcionada corretamente para o serviço NGINX no cluster.
Essa capacidade de balanceamento de carga integrada no Swarm simplifica o processo de gerenciamento e elimina a necessidade de configurar um balanceador de carga externo para distribuir as solicitações entre os nós do cluster.

Desenvolvedor full-stack, formado em Ciência da Computação e Redes de Computadores, com certificações internacionais da AWS e IBM. Atuou em projetos de inovação tecnológica no governo de Portugal. Atualmente, trabalha com processamento de dados IoT na telemetria de grandes frotas de veículos em todo o continente europeu, visando otimizar processos, reduzir custos e minimizar impactos ambientais.