Seu primeiro docker-compose.yml
1 min de leitura
fonte
Um docker-compose.yml é só um arquivo YAML que descreve a stack.
Quase tudo dentro dele é chave: valor ou listas. O nome do arquivo
precisa ser docker-compose.yml (ou .yaml) e ficar na raiz do
projeto - o docker compose procura por ele no diretório atual.
Exemplo mínimo: API + banco
# Sintaxe mínima: services é o único bloco obrigatório.
services:
api:
build: .
ports:
- "3000:3000"
environment:
DATABASE_URL: postgres://postgres:secret@db:5432/app
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: secret
Suba com docker compose up -d (de dentro da pasta do projeto). Pra
derrubar e remover tudo: docker compose down.
O que cada chave faz
build: .- diz "construa a imagem deste service a partir de umDockerfilena pasta atual". Oimage: ...na frente é alternativa (puxa imagem pronta do registry).ports: ["3000:3000"]- mesmo-p 3000:3000dodocker run. Lista de strings"host:container". Pode ser um único número ("3000", que é3000:3000implícito).environment:- variáveis de ambiente. Pode ser mapa (CHAVE: valor) ou lista (- CHAVE=valor).depends_on: [db]- garante quedbsobe antes deapi. Mas atenção:depends_onespera o container iniciar, não o serviço ficar pronto. Se o Postgres demora 5s pra aceitar conexão, sua API pode subir antes e falhar no primeiro request. Soluções (healthchecks) ficam pra outro nó.
Comandos do dia a dia
docker compose up -d # sobe tudo em background
docker compose down # para e remove containers, redes
docker compose down -v # também remove volumes (cuidado: apaga dados)
docker compose ps # lista os services da stack
docker compose logs # logs de todos os services (com -f pra seguir)
docker compose logs api # logs de um service só
docker compose exec api sh # entra no container (tipo docker exec)
docker compose restart api # reinicia um service
docker compose build # reconstrói imagens (sem subir)
Três conceitos que você acabou de aprender:
docker-compose.ymlé a "fonte da verdade" da sua stack - o arquivo vai pro Git, e qualquer pessoa sobe o ambiente com um comando.depends_oncontrola a ordem de inicialização, não a ordem de prontidão. Pra esperar o serviço ficar saudável de verdade, usehealthcheck(próximo nó).docker compose downé destrutivo: sem-vele mantém volumes nomeados, mas com-vapaga. Use-vsó quando quiser resetar.
Dica: o
docker composetem auto-complete bom.docker compose(com espaço) eTabmostra tudo. Adicione em desenvolvimento pra evitar digitar errado.
No próximo nó, vamos lidar com variáveis de ambiente sem hardcode no YAML - porque senha fixa no Git é problema sério.
// recursos
// avaliação da trilha
—
ainda sem avaliações