Docker Compose
Aula 3 de 7
O que é Docker Compose?
Compose define aplicações multi-container em YAML. Um único comando sobe toda a stack.
# compose.yaml
services:
web:
image: nginx:alpine
ports:
- "8080:80"
depends_on:
- api
api:
build: ./api
environment:
- DB_HOST=db
- DB_NAME=appdb
depends_on:
db:
condition: service_healthy
db:
image: postgres:16-alpine
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_DB: appdb
POSTGRES_PASSWORD: secret
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
interval: 5s
volumes:
pgdata:
Comandos Essenciais
docker compose up -d # sobe tudo
docker compose up -d --build # reconstrói e sobe
docker compose down # para e remove
docker compose down -v # remove volumes também
docker compose ps # status
docker compose logs -f # logs de todos
docker compose logs -f api # logs do serviço api
docker compose exec api bash # executa comando
docker compose restart web
docker compose pull # baixa imagens atualizadas
docker compose build # só build sem subir
docker compose config # valida compose
Variáveis de Ambiente
# compose.yaml
services:
app:
image: app:${TAG:-latest}
environment:
- NODE_ENV=${NODE_ENV:-production}
- DATABASE_URL=postgres://user:${DB_PASS}@db:5432/app
env_file:
- .env
- .env.${NODE_ENV} # .env.production
# .env (lido automaticamente pelo compose)
TAG=v1.2.0
NODE_ENV=production
DB_PASS=supersecret
Profiles — Serviços Opcionais
services:
web:
image: nginx:alpine
adminer:
image: adminer
profiles:
- tools
ports:
- "8081:8080"
mailhog:
image: mailhog/mailhog
profiles:
- tools
- dev
ports:
- "8025:8025"
docker compose up -d # só web
docker compose --profile tools up -d # web + adminer
docker compose --profile dev up -d # web + mailhog
Redes no Compose
services:
api:
networks:
- frontend
- backend
depends_on:
- db
db:
networks:
- backend
# Sem exposição externa
web:
networks:
- frontend
ports:
- "80:80"
networks:
frontend:
driver: bridge
backend:
internal: true # sem acesso externo
Lab: Stack Completa
services:
app:
build: .
ports:
- "3000:3000"
environment:
- REDIS_URL=redis://cache:6379
- DB_URL=postgres://postgres:secret@db:5432/app
depends_on:
cache:
condition: service_started
db:
condition: service_healthy
develop:
watch:
- path: ./src
action: sync
- path: package.json
action: rebuild
cache:
image: redis:7-alpine
volumes:
- redis-data:/data
db:
image: postgres:16-alpine
volumes:
- pg-data:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: secret
healthcheck:
test: pg_isready
interval: 10s
volumes:
redis-data:
pg-data:
docker compose up -d --watch # hot reload ao alterar ./src
Compose é a ferramenta ideal para desenvolvimento local e ambientes de teste. profiles permitem controlar serviços extras (adminer, mailhog). develop.watch = hot reload nativo.