promovaweb-devops-docker-swarm
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSkill de Docker Swarm
Docker Swarm技能
Domine o Docker Swarm para orquestração de containers, gerenciamento de cluster e implantações (deployments) em produção.
掌握Docker Swarm以进行容器编排、集群管理和生产环境部署(deployments)。
Propósito
用途
Configurar e gerenciar clusters Docker Swarm para alta disponibilidade, escalonamento de serviços e orquestração em produção.
配置和管理Docker Swarm集群,实现高可用性、服务扩缩容和生产环境编排。
Parâmetros
参数
| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
| managers | number | Não | 3 | Número de nós (nodes) managers |
| workers | number | Não | - | Número de nós (nodes) workers |
| encrypted | boolean | No | true | Criptografar redes overlay |
| 参数 | 类型 | 必填 | 默认值 | 描述 |
|---|---|---|---|---|
| managers | number | 否 | 3 | manager节点数量 |
| workers | number | 否 | - | worker节点数量 |
| encrypted | boolean | 否 | true | 加密overlay网络 |
Configuração do Cluster
集群配置
Inicializar Swarm
初始化Swarm
bash
undefinedbash
undefinedInicializar no primeiro manager
Inicializar no primeiro manager
docker swarm init --advertise-addr <MANAGER_IP>
docker swarm init --advertise-addr <MANAGER_IP>
Obter tokens de adesão
Obter tokens de adesão
docker swarm join-token worker
docker swarm join-token manager
docker swarm join-token worker
docker swarm join-token manager
Entrar como worker
Entrar como worker
docker swarm join --token <WORKER_TOKEN> <MANAGER_IP>:2377
docker swarm join --token <WORKER_TOKEN> <MANAGER_IP>:2377
Entrar como manager
Entrar como manager
docker swarm join --token <MANAGER_TOKEN> <MANAGER_IP>:2377
undefineddocker swarm join --token <MANAGER_TOKEN> <MANAGER_IP>:2377
undefinedAlta Disponibilidade (3 ou 5 managers)
高可用性(3或5个manager节点)
bash
undefinedbash
undefinedQuorum do Manager: N/2 + 1
Quorum do Manager: N/2 + 1
3 managers = tolera 1 falha
3 managers = tolera 1 falha
5 managers = tolera 2 falhas
5 managers = tolera 2 falhas
undefinedundefinedImplantação de Serviço (Service Deployment)
服务部署(Service Deployment)
Serviço Básico
基础服务
bash
undefinedbash
undefinedCriar serviço
Criar serviço
docker service create
--name webapp
--replicas 3
--publish 80:80
nginx:alpine
--name webapp
--replicas 3
--publish 80:80
nginx:alpine
docker service create
--name webapp
--replicas 3
--publish 80:80
nginx:alpine
--name webapp
--replicas 3
--publish 80:80
nginx:alpine
Escalar
Escalar
docker service scale webapp=5
docker service scale webapp=5
Atualizar imagem
Atualizar imagem
docker service update --image nginx:1.25-alpine webapp
docker service update --image nginx:1.25-alpine webapp
Rollback
Rollback
docker service rollback webapp
undefineddocker service rollback webapp
undefinedConfiguração Completa de Serviço
完整服务配置
bash
docker service create \
--name api \
--replicas 3 \
--network backend \
--publish 8080:3000 \
--mount type=volume,source=data,target=/data \
--secret db_password \
--env NODE_ENV=production \
--limit-cpu 0.5 \
--limit-memory 512M \
--update-delay 10s \
--update-parallelism 1 \
--update-failure-action rollback \
--health-cmd "curl -f http://localhost:3000/health" \
--health-interval 30s \
myapp:latestbash
docker service create \
--name api \
--replicas 3 \
--network backend \
--publish 8080:3000 \
--mount type=volume,source=data,target=/data \
--secret db_password \
--env NODE_ENV=production \
--limit-cpu 0.5 \
--limit-memory 512M \
--update-delay 10s \
--update-parallelism 1 \
--update-failure-action rollback \
--health-cmd "curl -f http://localhost:3000/health" \
--health-interval 30s \
myapp:latestImplantação de Stack (Stack Deployment)
Stack部署(Stack Deployment)
Stack de Produção
生产环境Stack
yaml
undefinedyaml
undefinedstack.yaml
stack.yaml
services:
frontend:
image: frontend:${VERSION:-latest}
deploy:
replicas: 3
placement:
constraints:
- node.role == worker
update_config:
parallelism: 1
delay: 10s
failure_action: rollback
resources:
limits:
cpus: '0.5'
memory: 256M
ports:
- "80:80"
networks:
- frontend
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
backend:
image: backend:${VERSION:-latest}
deploy:
replicas: 3
secrets:
- db_password
networks:
- frontend
- backend
networks:
frontend:
driver: overlay
backend:
driver: overlay
internal: true
secrets:
db_password:
external: true
```bashservices:
frontend:
image: frontend:${VERSION:-latest}
deploy:
replicas: 3
placement:
constraints:
- node.role == worker
update_config:
parallelism: 1
delay: 10s
failure_action: rollback
resources:
limits:
cpus: '0.5'
memory: 256M
ports:
- "80:80"
networks:
- frontend
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
backend:
image: backend:${VERSION:-latest}
deploy:
replicas: 3
secrets:
- db_password
networks:
- frontend
- backend
networks:
frontend:
driver: overlay
backend:
driver: overlay
internal: true
secrets:
db_password:
external: true
```bashImplantar stack
Implantar stack
docker stack deploy -c stack.yaml myapp
docker stack deploy -c stack.yaml myapp
Listar serviços
Listar serviços
docker stack services myapp
docker stack services myapp
Remover stack
Remover stack
docker stack rm myapp
undefineddocker stack rm myapp
undefinedSecrets & Configs
密钥与配置(Secrets & Configs)
Secrets
Secrets
bash
undefinedbash
undefinedCriar secret
Criar secret
echo "password" | docker secret create db_password -
echo "password" | docker secret create db_password -
Usar no serviço
Usar no serviço
docker service update --secret-add db_password myservice
docker service update --secret-add db_password myservice
Rotacionar secret
Rotacionar secret
echo "newpassword" | docker secret create db_password_v2 -
docker service update
--secret-rm db_password
--secret-add source=db_password_v2,target=db_password
myservice
--secret-rm db_password
--secret-add source=db_password_v2,target=db_password
myservice
undefinedecho "newpassword" | docker secret create db_password_v2 -
docker service update
--secret-rm db_password
--secret-add source=db_password_v2,target=db_password
myservice
--secret-rm db_password
--secret-add source=db_password_v2,target=db_password
myservice
undefinedConfigs
Configs
bash
undefinedbash
undefinedCriar config
Criar config
docker config create nginx_config ./nginx.conf
docker config create nginx_config ./nginx.conf
Usar no serviço
Usar no serviço
docker service create
--config source=nginx_config,target=/etc/nginx/nginx.conf
nginx
--config source=nginx_config,target=/etc/nginx/nginx.conf
nginx
undefineddocker service create
--config source=nginx_config,target=/etc/nginx/nginx.conf
nginx
--config source=nginx_config,target=/etc/nginx/nginx.conf
nginx
undefinedGerenciamento de Nós (Node Management)
节点管理(Node Management)
bash
undefinedbash
undefinedListar nós
Listar nós
docker node ls
docker node ls
Drenar nó (manutenção)
Drenar nó (manutenção)
docker node update --availability drain <node>
docker node update --availability drain <node>
Ativar nó
Ativar nó
docker node update --availability active <node>
docker node update --availability active <node>
Adicionar label
Adicionar label
docker node update --label-add role=database <node>
docker node update --label-add role=database <node>
Promover a manager
Promover a manager
docker node promote <node>
docker node promote <node>
Rebaixar de manager
Rebaixar de manager
docker node demote <node>
undefineddocker node demote <node>
undefinedTratamento de Erros
错误处理
Erros Comuns
常见错误
| Erro | Causa | Solução |
|---|---|---|
| Restrições não atendidas | Relaxe ou adicione nós |
| Falha no health check | Verifique os logs do serviço |
| Quorum perdido | Restaure os managers |
| 错误 | 原因 | 解决方案 |
|---|---|---|
| 未满足约束条件 | 放宽约束或添加节点 |
| 健康检查失败 | 查看服务日志 |
| 丢失法定人数 | 恢复manager节点 |
Recuperação de Manager
Manager恢复
bash
undefinedbash
undefinedSe o quorum for perdido, force um novo cluster
Se o quorum for perdido, force um novo cluster
docker swarm init --force-new-cluster --advertise-addr <IP>
undefineddocker swarm init --force-new-cluster --advertise-addr <IP>
undefinedSolução de Problemas (Troubleshooting)
问题排查(Troubleshooting)
Checklist de Depuração
调试检查清单
- Swarm ativo?
docker info | grep Swarm - Nós saudáveis?
docker node ls - Serviço rodando?
docker service ls - Tasks alocadas?
docker service ps <svc>
- Swarm是否运行?
docker info | grep Swarm - 节点是否健康?
docker node ls - 服务是否运行?
docker service ls - 任务是否已分配?
docker service ps <svc>
Diagnósticos
诊断
bash
undefinedbash
undefinedStatus do serviço
Status do serviço
docker service ls
docker service ls
Status da task
Status da task
docker service ps <service> --no-trunc
docker service ps <service> --no-trunc
Logs do serviço
Logs do serviço
docker service logs -f <service>
docker service logs -f <service>
Problemas no nó
Problemas no nó
docker node inspect <node> --pretty
undefineddocker node inspect <node> --pretty
undefined