deploy.mode no Docker Swarm | Swarm | Docker
- deploy.mode no Docker Swarm | Swarm | Docker
Visão geral
A propriedade deploy.mode define como um serviço será executado e distribuído no cluster Docker Swarm.
Ela controla:
- Quantidade de containers
- Distribuição entre nodes
- Estratégia de escalabilidade
Sintaxe
deploy:
mode: replicated
Valores disponíveis
O deploy.mode possui dois valores:
replicatedglobal
mode: replicated
deploy:
mode: replicated
replicas: 3
Comportamento
- Executa uma quantidade fixa de containers
- O Swarm decide onde colocar cada instância
- Pode haver múltiplos containers no mesmo node
Exemplo prático
Cluster com 3 nodes:
node1
node2
node3
Configuração:
replicas: 3
Possível distribuição:
node1 → 2 containers
node2 → 1 container
node3 → 0 containers
Características
- Controle explícito de escala
- Distribuição não garantida
- Pode causar concentração de carga em um node
Quando usar
- Quando precisa de número fixo de instâncias
- Quando quer escalar baseado em carga
- Quando múltiplas instâncias por node são aceitáveis
Riscos
- Conflito de porta (com
mode: host) - Distribuição desigual
- Maior necessidade de controle manual
mode: global
deploy:
mode: global
Comportamento
- Executa 1 container por node elegível
- Não utiliza
replicas - Distribuição automática e previsível
Exemplo prático
Cluster com 3 nodes:
node1
node2
node3
Resultado:
node1 → 1 container
node2 → 1 container
node3 → 1 container
Escalabilidade automática
Adicionando um node:
node4
Resultado:
node4 → 1 container automaticamente
Características
- Distribuição uniforme
- Sem duplicação por node
- Escala baseada em quantidade de nodes
Quando usar
- APIs stateless
- Serviços expostos com
mode: host - Sidecars por node
- Integração com API Gateway externo
Vantagem crítica
Evita conflito de porta:
ports:
- published: 5000
mode: host
Com global:
1 container por node → sem conflito
Comparação direta
| Característica | replicated | global |
|---|---|---|
| Controle de quantidade | manual | automático |
| Containers por node | 0..N | 1 |
| Distribuição previsível | não | sim |
| Escala com novos nodes | não | sim |
| Risco de conflito de porta | alto | baixo |
Integração com placement
Ambos suportam constraints:
deploy:
mode: global
placement:
constraints:
- node.labels.role == api
ou
deploy:
mode: replicated
replicas: 3
placement:
constraints:
- node.labels.role == api
Interação com portas
Com replicated + host
replicas: 3
published: 5000
mode: host
Risco:
node1:
- container A → 5000
- container B → 5000
Resultado:
- erro de bind
Com global + host
mode: global
published: 5000
mode: host
Resultado:
1 container por node
Sem conflito.
Exemplo completo (replicated)
version: "3.9"
services:
api:
image: minha-api
ports:
- target: 8080
published: 5000
mode: ingress
deploy:
mode: replicated
replicas: 3
Exemplo completo (global)
version: "3.9"
services:
api:
image: minha-api
ports:
- target: 8080
published: 5000
mode: host
deploy:
mode: global
placement:
constraints:
- node.labels.role == api
Fluxo conceitual
replicated
N containers distribuídos dinamicamente
↓
Swarm decide localização
↓
menos previsibilidade
global
1 container por node
↓
distribuição fixa
↓
alta previsibilidade
Implicações técnicas
-
replicated→ controle fino de escala -
global→ controle de distribuição -
escolha impacta diretamente:
- rede
- portas
- balanceamento
- consumo de recursos