06 - Docker Compose
June 5, 2026 · View on GitHub
Docker Compose permite descrever vários containers em um único arquivo.
Em vez de rodar comandos longos, você cria um compose.yml e usa:
docker compose up
Se o seu ambiente usa o binário antigo, troque docker compose por docker-compose.
Por que usar Compose?
Imagine uma aplicação com:
- API;
- banco PostgreSQL;
- Redis;
- variáveis de ambiente;
- volumes;
- portas;
- rede interna.
É possível subir tudo com docker run, mas os comandos ficam longos e difíceis de lembrar.
Compose transforma esse ambiente em configuração versionada.
Exemplo básico
Um compose.yml simples:
services:
web:
image: nginx:1.27-alpine
ports:
- "8080:80"
Para subir:
docker compose up
Para subir em segundo plano:
docker compose up -d
Para parar:
docker compose down
Exemplo com PostgreSQL
Entre na pasta:
cd examples/compose-postgres
Suba:
docker compose up -d
Veja os containers:
docker compose ps
Veja logs:
docker compose logs
Entre no banco:
docker compose exec db psql -U postgres -d app
Dentro do psql, rode:
SELECT version();
Saia:
\q
Pare:
docker compose down
Para remover também os volumes:
docker compose down -v
Estrutura comum de um compose.yml
services:
app:
build: .
ports:
- "3000:3000"
environment:
NODE_ENV: development
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_DB: app
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
O que depends_on faz?
depends_on define ordem de inicialização entre serviços.
Ele não garante que o banco esteja pronto para receber conexões. Ele garante apenas que o container do banco foi iniciado antes do container da aplicação.
Em aplicações reais, sua aplicação precisa lidar com tentativas de conexão ou usar healthchecks.
Compose cria rede automaticamente
Quando você usa Compose, os serviços do arquivo entram em uma rede própria.
Isso permite que app acesse o banco usando o nome do serviço:
db
Exemplo de URL:
postgres://postgres:postgres@db:5432/app
Comandos úteis
docker compose up
docker compose up -d
docker compose down
docker compose down -v
docker compose ps
docker compose logs
docker compose logs -f
docker compose exec nome-do-servico sh
docker compose build
Exercício
- Suba o exemplo
compose-postgres. - Entre no banco com
psql. - Crie uma tabela simples.
- Pare com
docker compose down. - Suba de novo.
- Confira se a tabela ainda existe.
- Remova os volumes com
docker compose down -v.