Introdução
Docker Compose é uma ferramenta essencial para desenvolvedores e profissionais de DevOps que buscam otimizar a gestão de contêineres e o lançamento de aplicações. Este tutorial abrangente fornece um guia passo a passo para compreender e implementar o Docker Compose, cobrindo tudo, desde a configuração básica até técnicas avançadas de implantação em diversos ambientes.
Fundamentos do Docker Compose
Introdução ao Docker Compose
Docker Compose é uma ferramenta poderosa para definir e executar aplicações Docker multi-contêiner. Permite que os desenvolvedores utilizem um ficheiro YAML para configurar serviços de aplicação, redes e volumes, simplificando o processo de orquestração de contêineres.
Conceitos Principais
graph TD
A[Docker Compose] --> B[Definição de Serviço]
A --> C[Gestão Multi-Contêiner]
A --> D[Configuração de Ambiente]
| Conceito-chave | Descrição |
|---|---|
| Serviço | Contêineres individuais na aplicação |
| docker-compose.yml | Ficheiro de configuração que define os serviços |
| Volumes | Armazenamento de dados persistentes para contêineres |
| Redes | Comunicação entre contêineres |
Exemplo de Configuração Docker Compose
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./website:/usr/share/nginx/html
database:
image: postgres:13
environment:
POSTGRES_PASSWORD: mysecretpassword
Exemplo Prático no Ubuntu 22.04
Instalar o Docker Compose:
sudo apt update
sudo apt install docker-compose-plugin
docker compose version
Executar uma aplicação multi-contêiner:
docker compose up -d
docker compose ps
docker compose down
Casos de Utilização
Docker Compose é ideal para:
- Ambientes de desenvolvimento locais
- Configurações de testes automatizados
- Implantação de aplicações em um único host
- Arquitetura de microserviços
Configuração e Implantação
Estrutura do Ficheiro Docker Compose
graph TD
A[docker-compose.yml] --> B[Versão]
A --> C[Serviços]
A --> D[Redes]
A --> E[Volumes]
Exemplo de Configuração Abrangente
version: "3.8"
services:
web:
image: python:3.9
build:
context: ./app
dockerfile: Dockerfile
ports:
- "5000:5000"
volumes:
- ./app:/app
environment:
- DEBUG=true
depends_on:
- database
database:
image: postgres:13
environment:
POSTGRES_DB: myapp
POSTGRES_PASSWORD: secretpassword
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
default:
driver: bridge
volumes:
postgres_data:
Gestão de Configuração de Ambiente
| Tipo de Configuração | Descrição | Utilização |
|---|---|---|
| Variáveis de Ambiente | Configuração em tempo de execução | Dados sensíveis, cadeias de ligação |
| Ficheiros .env | Configuração externa de ambiente | Separar a configuração do código |
| Segredos Docker | Informação sensível segura | Senhas, tokens |
Comandos de Implantação no Ubuntu 22.04
Validar a configuração:
docker compose config
Iniciar os serviços:
docker compose up -d
Escalar os serviços:
docker compose up -d --scale web=3
Monitorizar os serviços:
docker compose ps
docker compose logs
Estratégias de Rede de Contêineres
graph LR
A[Rede de Contêineres] --> B[Rede Bridge]
A --> C[Rede Host]
A --> D[Rede Overlay]
Técnicas de Gestão de Volumes
## Criar volumes nomeados
docker volume create myvolume
## Listar volumes
docker volume ls
## Inspecionar detalhes do volume
docker volume inspect myvolume
Técnicas Avançadas de Compose
Escalonamento de Serviços e Equilíbrio de Carga
graph TD
A[Load Balancer] --> B[Replica de Serviço 1]
A --> C[Replica de Serviço 2]
A --> D[Replica de Serviço 3]
Configuração de Escalonamento
version: "3.8"
services:
web:
image: nginx:latest
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
ports:
- "80:80"
Gestão Dinâmica de Serviços
| Técnica | Comando | Descrição |
|---|---|---|
| Escalar Serviços | docker compose up --scale web=5 |
Ajustar dinamicamente a contagem de contêineres |
| Atualizações Progressivas | docker compose up --force-recreate |
Atualizar serviços com tempo de inatividade mínimo |
| Implantação Seletiva | docker compose up service1 service2 |
Implantar serviços específicos |
Estratégias de Implantação para Produção
## Validar a configuração
docker compose config
## Simulação de implantação
docker compose up --dry-run
## Implantação de produção
docker compose up -d --remove-orphans
Verificações de Saúde de Contêineres
services:
web:
image: myapp:latest
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
Redes Avançadas
graph LR
A[Rede Personalizada] --> B[Comunicação Interna]
A --> C[Acesso Externo]
A --> D[Descoberta de Serviços]
Monitorização e Registos
## Registos de serviço em tempo real
docker compose logs -f
## Monitorização de recursos
docker compose top
## Métricas de desempenho
docker stats
Configuração Multi-Ambiente
version: "3.8"
services:
web:
image: myapp:${ENV:-development}
environment:
- DATABASE_URL=${DATABASE_URL}
Gestão de Segredos
## Criar segredos Docker
echo "database_password" | docker secret create db_password -
## Utilizar segredos no ficheiro compose
services:
database:
secrets:
- db_password
Resumo
Dominando o Docker Compose, os desenvolvedores podem simplificar arquiteturas de aplicações complexas, melhorar a consistência da implantação e criar soluções de contentores mais escaláveis e manuteníveis. O tutorial demonstra como tirar partido de configurações YAML, gerir serviços, redes e volumes, e orquestrar eficazmente aplicações multi-contêiner com facilidade e eficiência.



