6.1 Conceitos Básicos do Docker Swarm
Docker Swarm é o sistema de orquestração de containers embutido fornecido pelo Docker. Ele possibilita criar, gerenciar e escalar um cluster de hosts Docker, transformando-os em um único host lógico onde os containers podem ser executados. O Swarm distribui automaticamente tarefas entre os nós, oferecendo conveniência e resiliência. Nesta aula, vamos dar uma olhada nos componentes chave e nos comandos básicos para gerenciar o Docker Swarm.
Conceitos Básicos do Docker Swarm:
- Cluster (Swarm): grupo de hosts Docker agrupados em um único cluster lógico.
- Managers (Gerentes): nós que gerenciam o cluster e distribuem tarefas entre os nós de trabalho.
- Nós de Trabalho (Workers): nós que executam as tarefas e rodam os containers.
- Serviços (Services): representação lógica dos aplicativos, descrevendo que tarefas precisam ser executadas e quantas instâncias de containers devem ser iniciadas.
- Tarefas (Tasks): containers individuais que são instâncias dos serviços.
Arquitetura do Docker Swarm:
Docker Swarm utiliza uma arquitetura baseada em gerentes e nós de trabalho. Os gerentes gerenciam o estado do cluster, enquanto os nós de trabalho executam as tarefas.
Gerentes:
- Gerenciam o estado do cluster e sua configuração.
- Distribuem tarefas entre os nós de trabalho.
- Garantem resiliência e alta disponibilidade (quando há múltiplos gerentes).
Nós de Trabalho:
- Executam as tarefas designadas pelos gerentes.
- Iniciam os containers conforme as tarefas.
Principais comandos do Docker Swarm:
-
docker swarm init: inicialização de um novo cluster Swarm. -
docker swarm join: inclusão de um nó a um cluster existente. -
docker node ls: visualização da lista de nós no cluster. -
docker service create: criação de um novo serviço. -
docker service ls: visualização dos serviços em execução. -
docker service scale: escalonamento de um serviço para um número específico de instâncias. -
docker service rm: remoção de um serviço do cluster.
Usar o Docker Swarm simplifica o gerenciamento de aplicações em sistemas distribuídos, garantindo resiliência, escalabilidade e conveniência no deploy.
6.2 Criando um cluster Docker Swarm
Criando e gerenciando um cluster Docker Swarm
Passo 1: Inicializando o cluster
No primeiro host (manager), execute o comando:
docker swarm init --advertise-addr <MANAGER_IP>
Este comando inicializa um novo cluster Swarm, define o nó atual como manager e exibe o comando para adicionar os nós workers.
Passo 2: Adicionando os nós workers
Nos outros hosts, execute o comando exibido ao executar docker swarm init para juntá-los ao cluster:
docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377
Onde:
<SWARM_TOKEN>: token para conexão ao cluster (fornecido pelo comandodocker swarm init).<MANAGER_IP>: endereço IP do nó manager.
Passo 3: Visualizando os nós
Para ver todos os nós no cluster, use o comando:
docker node ls
Este comando mostra uma lista de todos os nós, incluindo suas funções, estados e disponibilidade.
Exemplo de saída do comando docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
qwertyuiop12345 manager-node Ready Active Leader
asdfghjkl67890 worker-node1 Ready Active
zxcvbnm09876 worker-node2 Ready Active
Explicação das colunas:
- ID: Identificador único do nó.
- HOSTNAME: Nome do host no qual o nó está rodando.
- STATUS: Status atual do nó (por exemplo, Ready).
- AVAILABILITY: Disponibilidade do nó (por exemplo, Active).
- MANAGER STATUS: Indica se o nó é um manager (por exemplo, Leader, Reachable) ou um nó worker (vazio).
Agora o cluster Docker Swarm está configurado, e você pode criar e escalar aplicações.
6.3 Gerenciamento do Docker Swarm
Gerenciamento de serviços no Docker Swarm
1. Criando um serviço
Crie um serviço que será executado com um número especificado de réplicas:
docker service create --name my_web --replicas 3 -p 8080:80 nginx
Nesse exemplo, é criado o serviço my_web, que executa 3 instâncias do Nginx. Os containers publicam a porta 80 na porta 8080 do host.
2. Visualizando os serviços
Para visualizar todos os serviços em execução no cluster, use o comando:
docker service ls
Exemplo de saída do comando docker service ls
ID NAME MODE REPLICAS IMAGE
ab12345 my_web replicated 3/3 nginx:latest
3. Escalando um serviço
Para alterar o número de instâncias (réplicas) de um serviço, use o comando docker service scale:
docker service scale my_web=5
Agora o serviço my_web terá 5 instâncias.
4. Atualizando um serviço
Para atualizar a imagem de um serviço para uma nova versão, use o comando docker service update:
docker service update --image nginx:latest my_web
Garantindo alta disponibilidade
O Docker Swarm suporta alta disponibilidade por meio de:
- Distribuição de tarefas entre os nós no cluster para recuperação automática de containers em caso de falhas.
- Suporte a múltiplos managers: Recomenda-se um número ímpar de managers (por exemplo, 3 ou 5) para evitar problemas com quórum.
- Uso de réplicas: Configure várias réplicas para cada serviço para aumentar a resiliência a falhas.
O conceito de quórum
O quórum representa a maioria dos nós que devem concordar com uma determinada ação (como gravação de dados ou eleição de líder) para que ela seja considerada válida. Por exemplo, em um cluster com 5 nós, o quórum será 3 nós.
Dica útil! Certifique-se de que os managers estejam posicionados em diferentes servidores físicos ou em nuvens distintas para minimizar o risco de falhas simultâneas.
6.4 Exemplo de configuração Docker Compose para Docker Swarm
Docker Compose pode ser usado com Docker Swarm pra simplificar a gestão de apps multi-container.
Exemplo de arquivo docker-compose.yml
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080-8090:80"
deploy:
replicas: 3
restart_policy:
condition: on-failure
networks:
- my_overlay_network
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: exemplo
deploy:
replicas: 1
restart_policy:
condition: on-failure
networks:
- my_overlay_network
networks:
my_overlay_network:
driver: overlay
Rodando o stack Docker Compose no Swarm
Pra fazer o deploy do stack no Docker Swarm, usa o comando:
docker stack deploy -c docker-compose.yml mystack
Visualizando o stack
Ver os stacks implantados:
docker stack ls
Ver os serviços no stack
docker stack services mystack
GO TO FULL VERSION