# MANUAL TÉCNICO - DOCKER SWARM: INICIALIZAÇÃO E GERENCIAMENTO **Código:** ITGENG 0014/26 | **Classificação:** RESTRITO **Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}} ## 1. HISTÓRICO DE REVISÃO > ⚠️ **REGRA DE OURO:** > 1. **Autor:** João Pedro Toledo Gonçalves. > 2. **Descrição:** Criação do documento. | Data | Versão | Descrição | Autor | | :--- | :--- | :--- | :--- | | {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves | ## 2. OBJETIVO Habilitar o o modo Swarm (Orquestração Nativa) para garantir alta disponibilidade, balanceamento de carga e escalabilidade horizontal de containers. ## 3. PRÉ-REQUISITOS - [ ] Mínimo de 3 máquinas com Docker instalado (Recomendado para HA). - [ ] Portas liberadas entre os nós: * **TCP/2377** (Cluster Management) * **TCP/UDP 7946** (Communication) * **UDP 4789** (Overlay Network) ## 4. PASSO A PASSO (EXECUÇÃO) **Etapa 1: Inicializando o Manager (Nó Principal)** 1. No servidor escolhido como líder, execute: ```bash docker swarm init --advertise-addr {{IP_DO_MANAGER}} ``` 2. O comando retornará um token. Copie-o. Exemplo: `docker swarm join --token SWMTKN-1-xx... {{IP_DO_MANAGER}}:2377` **Etapa 2: Adicionando Workers** 1. Nos outros servidores, cole o comando copiado na etapa anterior. 2. Confirme a entrada no cluster: ```bash docker node ls ``` > O status deve ser **Ready** e **Active**. **Etapa 3: Deploy de Serviços (Services vs Containers)** > ℹ️ **NOTA:** No Swarm, não damos deploy em "Containers", mas sim em "Services". O Swarm decide onde o container vai rodar. 1. Crie um serviço replicado (3 réplicas do Nginx). ```bash docker service create --name meu-site-ha --replicas 3 -p 80:80 nginx ``` 2. Liste os serviços e verifique a distribuição. ```bash docker service ls docker service ps meu-site-ha ``` **Etapa 4: Escala e Atualização (Rolling Update)** 1. Aumente a capacidade para 5 containers. ```bash docker service scale meu-site-ha=5 ``` 2. Atualize a imagem sem downtime (Rolling Update). ```bash docker service update --image nginx:alpine meu-site-ha ``` ## 5. SOLUÇÃO DE PROBLEMAS (TROUBLESHOOTING) **Problema 1: Nós não conseguem se comunicar (Status Down)** * **Causa:** Firewall bloqueando porta 7946 ou 4789. * **Solução:** Verifique `telnet IP 2377` e libere as portas no Security Group/Firewall. **Problema 2: Split Brain (Líderes perdidos)** * **Causa:** Mais de 50% dos Managers caíram. * **Solução:** 1. No manager sobrevivente: `docker swarm init --force-new-cluster`. ## 6. DADOS TÉCNICOS | Campo | Valor | Descrição | | :--- | :--- | :--- | | **Driver Rede** | `overlay` | Rede criptografada multi-host | | **Routing Mesh** | `Ingress` | Balanceador de carga interno (L4) | ## 7. VALIDAÇÃO FINAL - [ ] `docker node ls` mostra todos os nós online? - [ ] Ao desligar um nó worker, os containers migram para outro? - [ ] Acessar o IP de QUALQUER nó na porta 80 carrega o site (Routing Mesh)?