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

  1. Suba o exemplo compose-postgres.
  2. Entre no banco com psql.
  3. Crie uma tabela simples.
  4. Pare com docker compose down.
  5. Suba de novo.
  6. Confira se a tabela ainda existe.
  7. Remova os volumes com docker compose down -v.

« 05 - Volumes, portas e redesÍndice07 - Boas práticas »