Introdução
Docker Compose é uma ferramenta essencial para desenvolvedores que buscam otimizar a gestão de contêineres e o deploy de aplicações. Este tutorial abrangente explora os fundamentos do Docker Compose, fornecendo insights práticos sobre a configuração, implantação e gestão de ambientes multi-contêiner complexos de forma eficiente e sistemática.
Conceitos Básicos do Docker Compose
Introdução ao Docker Compose
Docker Compose é uma ferramenta poderosa para definir e executar aplicações Docker multi-contêiner. Permite aos desenvolvedores usar um arquivo YAML para configurar serviços, redes e volumes da aplicação, simplificando o processo de orquestração e gestão de contêineres.
Conceitos e Arquitetura Core
graph TD
A[Docker Compose] --> B[Configuração de Serviços]
A --> C[Gerenciamento Multi-Contêiner]
A --> D[Infraestrutura Declarativa]
| Conceito-chave | Descrição |
|---|---|
| docker-compose.yml | Arquivo de configuração que define serviços, redes e volumes |
| Serviços | Contêineres individuais que compõem uma aplicação |
| Volumes | Armazenamento de dados persistentes para contêineres |
| Redes | Configurações de rede personalizadas para comunicação entre contêineres |
Exemplo Prático: Configuração de Aplicação Web
Aqui está um exemplo abrangente que demonstra a configuração do Docker Compose para uma aplicação web típica:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./website:/usr/share/nginx/html
database:
image: postgres:13
environment:
POSTGRES_PASSWORD: mysecretpassword
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
Análise do Código
version: '3.8'especifica o formato do arquivo Docker Compose- A seção
servicesdefine dois contêineres: servidor web e banco de dados - O serviço
nginxmapeia a porta 80 do host para a porta 80 do contêiner - O serviço
postgresconfigura um banco de dados com armazenamento de volume persistente
Instalação e Comandos Básicos
Para instalar o Docker Compose no Ubuntu 22.04:
sudo apt update
sudo apt install docker-compose-plugin
docker compose version
Comandos-chave do Docker Compose:
docker compose up: Iniciar todos os serviçosdocker compose down: Parar e remover contêineresdocker compose ps: Listar serviços em execuçãodocker compose logs: Visualizar logs de serviços
Configuração e Implantação
Estrutura do Arquivo Docker Compose
A configuração do Docker Compose baseia-se em um arquivo YAML que define toda a infraestrutura da aplicação. O arquivo padrão é nomeado docker-compose.yml e contém definições abrangentes de serviços.
graph TD
A[docker-compose.yml] --> B[Serviços]
A --> C[Redes]
A --> D[Volumes]
A --> E[Variáveis de Ambiente]
Exemplo Detalhado de Configuração de Serviços
version: "3.8"
services:
backend:
image: python:3.9
build:
context: ./backend
dockerfile: Dockerfile
ports:
- "5000:5000"
environment:
- DATABASE_URL=postgresql://user:password@database:5432/appdb
depends_on:
- database
database:
image: postgres:13
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: secretpassword
volumes:
postgres_data:
Parâmetros de Configuração
| Parâmetro | Descrição | Exemplo |
|---|---|---|
image |
Imagem base do contêiner | nginx:latest |
build |
Configuração de build personalizada | context: ./app |
ports |
Mapeamento de portas | "8080:80" |
volumes |
Armazenamento de dados persistentes | - ./data:/app/data |
environment |
Variáveis de ambiente do contêiner | DATABASE_HOST=localhost |
Estratégias de Implantação
graph LR
A[Desenvolvimento Local] --> B[Ambiente de Teste]
B --> C[Implantação de Produção]
C --> D[Escalonamento de Serviços]
Comandos de Implantação
Fluxo de trabalho típico de implantação no Ubuntu 22.04:
## Validar o arquivo compose
docker compose config
## Construir serviços
docker compose build
## Iniciar serviços
docker compose up -d
## Verificar serviços em execução
docker compose ps
## Visualizar logs
docker compose logs backend
## Parar serviços
docker compose down
Técnicas de Configuração Avançada
services:
webserver:
restart: always
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
Estratégias Avançadas de Compose
Configuração Multi-Ambiente
O Docker Compose suporta gerenciamento sofisticado de ambientes por meio de múltiplos arquivos de configuração e mecanismos de substituição.
graph LR
A[Configuração Base] --> B[Substituição de Desenvolvimento]
A --> C[Substituição de Produção]
A --> D[Substituição de Teste]
Configuração Específica do Ambiente
version: "3.8"
services:
application:
image: myapp:latest
environment:
- APP_ENV=${DEPLOY_ENV:-development}
- DATABASE_URL=${DATABASE_CONNECTION}
Escalonamento Dinâmico de Serviços
## Escalar o serviço web para 3 instâncias
docker compose up -d --scale web=3
Configurações Avançadas de Rede
| Modo de Rede | Descrição | Caso de Uso |
|---|---|---|
| bridge | Rede padrão | Comunicação isolada entre contêineres |
| host | Rede de host direta | Cenários de alto desempenho |
| custom | Redes definidas pelo usuário | Arquiteturas complexas de microserviços |
Exemplo de Compose Pronto para Produção
version: '3.8'
services:
webserver:
image: nginx:alpine
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
backend:
image: myapp:${VERSION}
secrets:
- db_password
configs:
- source: app_config
target: /app/config.json
secrets:
db_password:
external: true
configs:
app_config:
file: ./config.json
Estratégias de Versão de Contêineres
## Marcar e enviar imagens com versão
docker build -t myapp:v1.0 .
docker compose push
Fluxo de Trabalho de Implantação
graph TD
A[Construir Imagens] --> B[Executar Testes]
B --> C[Enviar para o Registro]
C --> D[Implantar Contêineres]
D --> E[Monitorar Desempenho]
Comandos de Segurança e Conformidade
## Examinar serviços de compose em busca de vulnerabilidades
docker compose config --resolve-env-vars
docker scan docker-compose.yml
Resumo
Dominando o Docker Compose, os desenvolvedores podem simplificar a orquestração de contêineres, definir a infraestrutura como código e criar ambientes de aplicação escaláveis e reproduzíveis. O tutorial abrange conceitos centrais, estratégias de configuração e técnicas de implementação práticas que permitem o desenvolvimento e implantação sem problemas de aplicações multi-contêiner em diferentes cenários de infraestrutura.



