Docker Compose simplifica aplicações com múltiplos containers. Defina toda sua stack (app, database, cache) em um arquivo YAML e suba tudo com um comando.
Conceitos Principais
docker-compose.yml
Arquivo de configuração YAML que define services, networks e volumes. Cada service é um container. Compose cria network privada automática.
Services
Containers da aplicação. Define imagem ou build, portas, volumes, env vars. Services se comunicam pelo nome (ex: postgres:5432).
Networks
Isolamento entre stacks. Compose cria network padrão. Services na mesma network se descobrem por DNS. Pode criar networks customizadas.
Volumes
Persistência de dados. Named volumes para databases. Bind mounts para hot reload em dev. Volumes sobrevivem a docker-compose down.
Passo a Passo
- Crie docker-compose.yml: Na raiz: version "3.8", services com app (build: .), db (image: postgres:15), redis (image: redis:7). Defina portas e volumes.
- Configure Services: App: build do Dockerfile, ports 3000:3000, depends_on db e redis. DB: env POSTGRES_PASSWORD, volume pgdata. Redis: volume redisdata.
- Suba Stack:
docker-compose up -dbuilda e inicia todos services em background. Logs:docker-compose logs -f. Status:docker-compose ps. - Conecte Services: No código Node, use host "db" e "redis" ao invés de localhost. Compose resolve DNS interno. Ex: postgresql://user:pass@db:5432/mydb.
- Gerencie Stack: Pare:
docker-compose stop. Destrua:docker-compose down. Rebuild:docker-compose up --build. Escale:docker-compose up --scale app=3.
Boas Praticas
Recomendacoes
• Use .env file para secrets e configs
• Defina healthchecks para depends_on correto
• Named volumes para dados importantes
• docker-compose.override.yml para dev local
Erros Comuns
Evite estes erros
• Não versionar docker-compose.yml
• Hardcodar senhas no YAML (use .env)
• Esquecer depends_on (app sobe antes do DB)
Checklist
- docker-compose.yml criado
- Services conectados corretamente
- Volumes para persistência
- .env configurado
- Stack rodando com um comando