Docker: Docker Swarm

Última atualização: 2026-08-26

Uma única instância Docker está com dificuldade para lidar com o tráfego? O Swarm permite escalar de 1 para 3 instâncias e implantar novas versões com zero downtime.

1. O Que Você Vai Aprender



2. Uma História de Operações de E-commerce

(1) Ponto de Dor: Um único servidor não consegue lidar com o tráfego

O tráfego do negócio de e-commerce de Charlie disparou, e uma única instância Docker não conseguia lidar — durante os horários de pico, o uso da CPU atingia 100%, as respostas da API expiravam e as reclamações dos usuários chegavam em massa. Ele precisava escalar para vários servidores, mas iniciar contêineres manualmente em três servidores separados era complicado demais.

(2) Soluções com Clusters Docker Swarm

Charlie inicializou um cluster Swarm de 3 nós, escalou a API para 5 réplicas e implantou a nova versão usando rolling updates com zero downtime.

BASH
# Inicializar cluster Swarm
docker swarm init --advertise-addr 10.0.0.1

# Implantar serviço com 5 réplicas
docker service create --replicas 5 --name api -p 8080:80 myapp:v2

# Rolling update para v3
docker service update --image myapp:v3 api

(3) Benefícios: De uma única máquina a um cluster — feito em 5 minutos

Três servidores foram combinados em um cluster, com a API automaticamente distribuída em cinco réplicas e rolling updates realizados com zero downtime. A transição de um único servidor para um cluster levou apenas cinco minutos.



3. Arquitetura do Swarm

(1) Funções dos Nós

100%
graph TB
    MGR1["Nó Manager 1<br/>Líder"] --- MGR2["Nó Manager 2<br/>Reserva"]
    MGR1 --- MGR3["Nó Manager 3<br/>Reserva"]
    MGR1 --> WRK1["Nó Worker 1"]
    MGR2 --> WRK2["Nó Worker 2"]
    MGR3 --> WRK3["Nó Worker 3"]
Função Responsabilidades Quantidade Executa Contêineres
Manager Gerenciamento do cluster, agendamento, API Número ímpar (3/5/7) ✅ Opcional
Worker Executa tarefas, executa contêineres Qualquer ✅ Obrigatório

(1) Serviço vs Contêiner

Dimensão Contêiner Serviço
Método de Criação docker run docker service create
Número de Réplicas 1 Réplicas configuráveis
Auto-cura Requer política de restart ✅ Mantém automaticamente o número de réplicas
Balanceamento de Carga Nenhum ✅ Routing Mesh
Rolling Updates Manual ✅ Integrado
Casos de Uso Desenvolvimento em máquina única Produção em cluster


4. Inicialização do Swarm

▶ Exemplo: Inicializando com swarm init (Dificuldade: ⭐⭐)

BASH
# No nó Manager: inicializar o swarm
docker swarm init --advertise-addr 10.0.0.1

# A saída inclui o token de ingresso para workers
# docker swarm join --token SWMTKN-xxx 10.0.0.1:2377
BASH
# Nos nós Worker: ingressar no swarm
docker swarm join --token SWMTKN-xxx 10.0.0.1:2377

# Listar todos os nós
docker node ls
💻 Saída:

TEXT 📖 Somente leitura
ID            HOSTNAME   STATUS   AVAILABILITY   MANAGER STATUS
abc123 *      manager1   Ready    Active         Leader
def456        worker1    Ready    Active
ghi789        worker2    Ready    Active


5. Gerenciamento de Serviços

▶ Exemplo: Implantação com service create (Dificuldade: ⭐⭐)

BASH
# Criar um serviço com 3 réplicas
docker service create \
  --name web \
  --replicas 3 \
  --publish 80:80 \
  nginx:1.25-alpine

# Listar serviços
docker service ls

# Verificar tarefas do serviço (contêineres)
docker service ps web

▶ Exemplo: Escalonamento com Service Scale (Dificuldade: ⭐⭐)

BASH
# Escalar para 5 réplicas
docker service scale web=5

# Verificar
docker service ps web

▶ Exemplo: service update — rolling update (Dificuldade: ⭐⭐⭐)

BASH
# Rolling update: atualizar 2 contêineres por vez com atraso de 30s
docker service update \
  --image nginx:1.26-alpine \
  --update-parallelism 2 \
  --update-delay 30s \
  --update-failure-action rollback \
  web

# Verificar status da atualização
docker service inspect web --format='{{.UpdateStatus.State}}'

(1) Estratégia de Rolling Update

Parâmetro Valor Padrão Descrição
--update-parallelism 1 Quantas masmorras são adicionadas a cada atualização?
--update-delay 0s Tempo de espera entre lotes
--update-failure-action pause Ação em caso de falha (pause/rollback/continue)
--update-monitor 5s Tempo de monitoramento após a atualização

▶ Exemplo: Rollback de Serviço (Dificuldade: ⭐⭐)

BASH
# Reverter para a versão anterior
docker service rollback web


6. Secrets e Gerenciamento de Configuração

▶ Exemplo: Criando e Usando Docker Secrets (Dificuldade: ⭐⭐⭐)

BASH
# Criar um secret a partir de um arquivo
echo "my_super_secret_password" | docker secret create db_password -

# Usar o secret em um serviço
docker service create \
  --name api \
  --secret db_password \
  -e DB_PASSWORD_FILE=/run/secrets/db_password \
  myapp:1.0
🔒 Segurança: Secrets são armazenados no log Raft no nó Manager (criptografados) e são enviados apenas para o Worker que executa o serviço. Eles são acessados dentro do contêiner via o arquivo /run/secrets/<name> e não são expostos em variáveis de ambiente.



7. Routing Mesh

(1) Mecanismos de Roteamento de Rede

O Routing Mesh do Swarm permite que qualquer porta em qualquer nó seja roteada para qualquer réplica de um serviço — mesmo que essa réplica não esteja no nó atual.

100%
graph LR
    A["Nó 1<br/>:80"] -->|"requisição"| B["Routing Mesh"]
    C["Nó 2<br/>:80"] --> B
    B -->|"round-robin"| D["Réplica 1<br/>Nó 1"]
    B --> E["Réplica 2<br/>Nó 2"]
    B --> F["Réplica 3<br/>Nó 3"]
Padrão Sintaxe Descrição
VIP (Padrão) --publish 80:80 IP Virtual + Balanceamento de Carga
DNSRR --endpoint-mode dnsrr DNS round-robin, sem VIP


8. Comparação entre Swarm e Compose

Dimensão Docker Compose Docker Swarm
Número de Nós Nó Único Cluster Multi-Nó
Alta Disponibilidade ✅ Redundância de Manager
Auto-cura de Serviço Política de Restart ✅ Mantém Número de Réplicas
Rolling Updates Manual ✅ Integrado
Balanceamento de Carga Nginx/DNS Round-Robin ✅ Routing Mesh
Secrets Variáveis de Ambiente ✅ Armazenamento Criptografado
Método de implantação docker compose up docker stack deploy

▶ Exemplo: Implantando um arquivo Compose no Swarm usando stack deploy (Dificuldade: ⭐⭐⭐)

BASH
# Implantar um arquivo compose como uma stack
docker stack deploy -c docker-compose.yml mystack

# Listar stacks
docker stack ls

# Listar serviços em uma stack
docker stack services mystack

# Remover uma stack
docker stack rm mystack


9. Exemplo Completo: Implantando um Cluster de Três Nós

BASH
# ============================================
# Passo a passo completo: Cluster Swarm de 3 nós
# Abrange: init, join, service, scale, update
# ============================================

# --- No Manager (10.0.0.1) ---
# 1. Inicializar Swarm
docker swarm init --advertise-addr 10.0.0.1

# 2. Obter token de ingresso para worker
docker swarm join-token worker

# --- Nos Workers (10.0.0.2, 10.0.0.3) ---
# 3. Ingressar no swarm (cole o token da etapa 2)
docker swarm join --token SWMTKN-xxx 10.0.0.1:2377

# --- No Manager ---
# 4. Verificar cluster
docker node ls

# 5. Implantar serviço web com 5 réplicas
docker service create \
  --name web \
  --replicas 5 \
  --publish 80:80 \
  --restart-condition on-failure \
  nginx:1.25-alpine

# 6. Verificar distribuição entre nós
docker service ps web

# 7. Rolling update para v1.26
docker service update \
  --image nginx:1.26-alpine \
  --update-parallelism 2 \
  --update-delay 30s \
  web

# 8. Simular falha de nó
docker node update --availability drain worker1
docker service ps web  # Réplicas reagendadas

# 9. Restaurar nó
docker node update --availability active worker1

# 10. Reduzir escala
docker service scale web=2

# 11. Limpar
docker service rm web
docker swarm leave --force  # No manager

❓ Perguntas Frequentes

P: Qual é o número mínimo de servidores necessários para o Swarm? R: Pode ser executado em apenas um servidor (para desenvolvimento/teste). Para produção, recomendamos 3 ou mais Managers (número ímpar, pois o consenso Raft requer maioria) mais N Workers. Pelo menos um Manager é necessário, mas o cluster se torna inadministrável se um único Manager falhar.

P: Onde os dados do Swarm são armazenados? R: Nos logs Raft nos nós Manager (/var/lib/docker/swarm/). Esses logs contêm o estado do cluster, definições de serviço, Secrets e mais. Se um nó Manager falhar, os outros nós Manager elegem um novo Líder usando o protocolo Raft. Recomenda-se fazer backup dos logs Raft regularmente.

P: Como o Routing Mesh realiza balanceamento de carga? R: Modo VIP (IP Virtual) do Swarm: Cada serviço recebe um IP virtual. Quando uma requisição chega ao VIP, o balanceador de carga IPVS do kernel a distribui entre as várias réplicas. Todos os nós escutam na porta publicada, então as requisições podem ser roteadas para uma réplica em qualquer nó.

P: Como configuro TLS para o Swarm? R: O Swarm possui mTLS (TLS mútuo) integrado, que criptografa automaticamente a comunicação entre os nós. Os certificados são gerados automaticamente durante a inicialização, sem necessidade de configuração manual. A comunicação entre Managers e entre Managers e Workers é criptografada.

P: Quais mudanças são necessárias para migrar do Compose para o Swarm? R: A maioria dos arquivos docker-compose.yml pode ser usada como está com docker stack deploy. Notas importantes: ① Substitua build por image (Swarm não oferece suporte a build); ② volumes só oferece suporte a volumes nomeados e NFS; ③ depends_on só oferece suporte a started — não oferece suporte a service_healthy; ④ Adicione um bloco deploy para configurar as estratégias de replicas e update.


📖 Resumo


📝 Exercícios

  1. Exercício Básico (Dificuldade: ⭐): Inicialize o Swarm em uma única máquina, crie um serviço Nginx com 3 réplicas e verifique se docker service ps exibe a distribuição das réplicas.
  2. Exercício Avançado (Dificuldade: ⭐⭐): Realize um rolling update (nginx: 1.25 → 1.26) e observe o processo de atualização em docker service ps.
  3. Desafio (Dificuldade: ⭐⭐⭐): Configure um cluster Swarm em três máquinas virtuais, implante um serviço API com cinco réplicas, simule a falha de um nó worker e verifique se as réplicas migram automaticamente para outros nós.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%