Como configurar o Docker Swarm

DockerBeginner
Pratique Agora

Introdução

Docker Swarm é uma poderosa solução de gerenciamento e orquestração de clusters que permite implantar e gerenciar contêineres Docker em escala. Neste tutorial, você aprenderá como configurar um Docker Swarm, gerenciar e escalar seus serviços Swarm e aproveitar todo o potencial dos recursos de orquestração de contêineres do Docker.

Compreendendo o Docker Swarm

O que é o Docker Swarm?

Docker Swarm é uma ferramenta nativa de agrupamento e orquestração para contêineres Docker. Permite gerenciar um grupo de motores Docker, chamado enxame (swarm), e implantar serviços nesse enxame. Em um Docker Swarm, os motores Docker trabalham juntos como um único host Docker virtual.

Conceitos-chave no Docker Swarm

  1. Nós (Nodes): Os nós são os motores Docker individuais que participam do enxame. Existem dois tipos de nós: gerentes e trabalhadores.

    • Gerentes (Managers): Os gerentes são responsáveis por gerenciar o enxame, incluindo a programação de tarefas, a manutenção do estado desejado do enxame e a provisão de um ponto de entrada para o enxame.
    • Trabalhadores (Workers): Os trabalhadores são responsáveis por executar os contêineres reais no enxame.
  2. Serviços (Services): Os serviços definem o estado desejado da sua aplicação. Um serviço pode ser um único contêiner ou um grupo de contêineres que trabalham juntos.

  3. Tarefas (Tasks): As tarefas são as unidades atômicas de programação em um enxame. Cada serviço é dividido em tarefas, que são então programadas para serem executadas nos nós disponíveis.

  4. Balanceamento de Carga (Load Balancing): O Docker Swarm fornece balanceamento de carga embutido para serviços. Os nós gerentes distribuem automaticamente as tarefas pelos nós trabalhadores, garantindo alta disponibilidade e escalabilidade.

Vantagens do Docker Swarm

  1. Orquestração Nativa (Native Orchestration): O Docker Swarm é uma ferramenta de orquestração nativa, o que significa que está embutido no motor Docker e não requer nenhum software adicional.

  2. Simplicidade (Simplicity): O Docker Swarm é relativamente simples de configurar e gerenciar, tornando-o uma boa escolha para implantações de pequeno a médio porte.

  3. Alta Disponibilidade (High Availability): O Docker Swarm fornece recursos de alta disponibilidade embutidos, como programação automática de tarefas e balanceamento de carga.

  4. Escalabilidade (Scalability): O Docker Swarm pode facilmente escalar para cima ou para baixo o número de nós e contêineres conforme necessário.

  5. Segurança (Security): O Docker Swarm utiliza os mesmos recursos de segurança do motor Docker, incluindo controle de acesso baseado em roles e comunicação criptografada.

Agora que você tem uma compreensão básica do Docker Swarm, vamos para a próxima seção: Inicializando um Docker Swarm.

Inicializando um Docker Swarm

Preparando os Nós

Antes de inicializar um Docker Swarm, você precisa ter um conjunto de hosts Docker (nós) prontos. Você pode usar máquinas físicas ou virtuais, desde que estejam executando a mesma versão do Docker.

Inicializando o Enxame (Swarm)

Para inicializar o Docker Swarm, você precisará designar um dos nós como gerente. Você pode fazer isso executando o seguinte comando no nó desejado:

docker swarm init --advertise-addr <MANAGER-IP>

Substitua <MANAGER-IP> pelo endereço IP do nó gerente.

Após executar este comando, você receberá um token que pode usar para adicionar outros nós ao enxame como trabalhadores. Você pode adicionar um nó como trabalhador executando o seguinte comando no nó desejado:

docker swarm join --token <TOKEN> <MANAGER-IP>:2377

Substitua <TOKEN> pelo token recebido do comando docker swarm init e <MANAGER-IP> pelo endereço IP do nó gerente.

Verificando o Enxame (Swarm)

Você pode verificar o status do enxame executando o seguinte comando no nó gerente:

docker node ls

Isso exibirá uma lista de todos os nós no enxame, juntamente com seus papéis (gerente ou trabalhador) e status.

Segurança do Enxame (Swarm)

Por padrão, a comunicação entre os nós no enxame é criptografada usando o protocolo Raft. No entanto, você pode aumentar a segurança do seu enxame habilitando a autenticação mútua Transport Layer Security (mTLS).

Para habilitar o mTLS, você precisará gerar e distribuir os certificados necessários. Você pode fazer isso usando o comando docker swarm ca no nó gerente.

docker swarm ca --rotate

Este comando gerará novos certificados raiz e intermediários e os distribuirá para todos os nós no enxame.

Agora que você inicializou seu Docker Swarm, vamos para a próxima seção: Gerenciando e Escalando Serviços do Swarm.

Gerenciando e Escalando Serviços do Swarm

Implantando um Serviço

Para implantar um serviço no Docker Swarm, você pode usar o comando docker service create. Por exemplo, para implantar um servidor web Nginx, você pode executar o seguinte comando:

docker service create --name nginx -p 80:80 nginx:latest

Isso criará um novo serviço chamado "nginx" e o implantará no swarm. O serviço exporia a porta 80 no host e a encaminhará para a porta 80 no contêiner.

Escalando um Serviço

Você pode escalar o número de réplicas (tarefas) de um serviço usando o comando docker service scale. Por exemplo, para escalar o serviço "nginx" para 5 réplicas, você pode executar:

docker service scale nginx=5

Isso criará 4 tarefas adicionais para o serviço "nginx", e o nó gerente as agendará automaticamente nos nós trabalhadores disponíveis.

Atualizando um Serviço

Você pode atualizar a configuração de um serviço usando o comando docker service update. Por exemplo, para atualizar o serviço "nginx" para usar uma versão de imagem diferente, você pode executar:

docker service update --image nginx:1.19 nginx

Isso atualizará o serviço "nginx" para usar a imagem "nginx:1.19".

Monitorando Serviços do Swarm

Você pode monitorar o status dos seus serviços do swarm usando os comandos docker service ls e docker service ps. O comando docker service ls mostrará uma lista de todos os serviços em execução no swarm, enquanto o comando docker service ps mostrará o status de cada tarefa dentro de um serviço.

## Listar todos os serviços
docker service ls

## Listar tarefas para um serviço específico
docker service ps nginx

Desativando Nós

Se você precisar realizar manutenção em um nó, pode "desativá-lo", o que fará com que o gerente agende novamente quaisquer tarefas em execução naquele nó para outros nós disponíveis. Você pode fazer isso usando o comando docker node update:

docker node update --availability drain <NODE-ID>

Substitua <NODE-ID> pelo ID do nó que você deseja desativar.

Isso cobre os fundamentos de gerenciamento e escalonamento de serviços do Docker Swarm. Com este conhecimento, você deve ser capaz de implantar, escalar e manter suas aplicações em execução em um Docker Swarm.

Resumo

Ao final deste tutorial, você terá um conhecimento sólido do Docker Swarm e como configurá-lo, gerenciar seus serviços Swarm e escalar suas aplicações containerizadas com facilidade. Aproveite o poder do Docker Swarm para otimizar seus processos de implantação e gerenciamento de contêineres, garantindo que suas aplicações sejam altamente disponíveis e escaláveis.