🐙 Cap 14: Docker Compose: Orquestração Local de Ambientes Multi-Serviço e Healthchecks
🗺️ A Orquestração de uma Stack Completa com Docker Compose
flowchart TD
COMPOSE["docker compose up -d (Lê compose.yaml)"]
COMPOSE --> NET["Rede Bridge Automática ('app-network')"]
NET --> API["Serviço 'api'\n(FastAPI / Node.js)"]
NET --> DB["Serviço 'postgres'\n(Healthcheck: pg_isready)"]
NET --> CACHE["Serviço 'redis'\n(In-Memory Cache)"]
NET --> QUEUE["Serviço 'rabbitmq'\n(Mensageria AMQP)"]
API --> |"depends_on (condition: service_healthy)"| DB
API --> CACHE
API --> QUEUE
style COMPOSE fill:#ede7f6,stroke:#512da8,stroke-width:2px
style NET fill:#fff3e0,stroke:#ff9800,stroke-width:1.5px
style API fill:#00897b,stroke:#004d40,stroke-width:2px,color:#ffffff
style DB fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
style CACHE fill:#e8f5e9,stroke:#4caf50,stroke-width:1.5px
style QUEUE fill:#fff9c4,stroke:#fbc02d,stroke-width:1.5px
📖 Fundamentos e Aplicação
Em arquiteturas modernas, uma aplicação raramente roda isolada: ela depende de banco de dados, filas assíncronas, caches e proxies. O Docker Compose permite declarar toda essa topologia em um único arquivo compose.yaml (ou docker-compose.yml) e inicializá-la com um único comando.
1. Boas Práticas no Compose Moderno:
- Resolução de Nomes por DNS Embutido: Containers conversam entre si usando o próprio nome do serviço (ex:
postgres://db_user:pass@postgres:5432/meudb), dispensando IPs fixos. - Ordem de Inicialização Inteligente com
healthcheck: Usedepends_oncomcondition: service_healthypara garantir que a API só inicie quando o PostgreSQL estiver realmente pronto para aceitar conexões SQL. - Isolamento de Variáveis de Ambiente: Utilize arquivos
.envlocais mantidos fora do controle de versão (.gitignore) e forneça um.env.examplecom placeholders seguros.
2. Comandos do Compose V2 (Nativo no Docker CLI):
docker compose up -d: Sobe todos os serviços em background.docker compose down -v: Para os serviços e remove os volumes de dados.docker compose logs -f api: Acompanha os logs em tempo real do serviço especificado.
🧭 Navegação Rápida
| 📖 Teoria | 📊 Slides | 🧠 Quiz | 💻 Exemplos | 🧩 Exercícios | | :— | :— | :— | :— | :— | | Ler Tópico | Ver Slides | Fazer Quiz | Ver Código | Praticar |
🧭 Navegação do Capítulo: ⬅️ Capítulo Anterior · 📚 Sumário do Módulo · ➡️ Próximo Capítulo