1. O Que E Docker Compose
Docker Compose e uma ferramenta oficial do Docker para definir e executar aplicacoes multi-container. Em vez de iniciar cada container individualmente com comandos docker run, voce descreve toda a stack em um arquivo YAML e sobe tudo com docker compose up.
E amplamente usado para ambientes de desenvolvimento local, testes de integracao e deploys simples. A versao 3.x do formato Compose e compativel com Docker Swarm para orquestracao em producao.
2. Estrutura do Arquivo YAML
Um arquivo docker-compose.yml minimo tem a seguinte estrutura:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
As chaves principais sao services (obrigatoria), volumes (para volumes nomeados), networks (para redes personalizadas) e configs (para configuracoes em Swarm).
3. Configurando Servicos
Cada servico representa um container. As opcoes mais usadas sao:
- image: a imagem Docker a ser usada (ex: postgres:15)
- build: caminho para um Dockerfile local, quando voce precisa buildar a imagem
- ports: mapeamento de portas no formato host:container
- environment: variaveis de ambiente como lista ou mapa
- depends_on: lista de servicos que devem estar rodando antes deste
- restart: politica de reinicializacao automatica
- command: sobrescreve o CMD padrao da imagem
4. Volumes e Persistencia de Dados
Por padrao, dados dentro de containers sao perdidos ao remover o container. Para persistir dados, use volumes:
- Bind mounts: montam diretorios do host diretamente no container — ex:
./data:/var/lib/mysql - Volumes nomeados: gerenciados pelo Docker, mais portateis — declarados na chave top-level
volumes
Prefer volumes nomeados para dados de banco de dados em producao, pois sao mais seguros e faceis de fazer backup.
"Nossa ferramenta gera o YAML com indentacao correta e aspas onde necessario — pronto para usar com docker compose up sem ajustes manuais."
5. Boas Praticas para Producao
- Use versoes fixas de imagens (ex:
postgres:15.4) em vez delatestpara builds reproduziveis. - Nunca coloque senhas diretamente no YAML — use um arquivo
.enve referencie com${VAR}. - Defina limites de memoria e CPU com
deploy.resourcespara evitar que um container consuma todos os recursos. - Use
healthcheckpara que o Compose saiba quando um servico esta realmente pronto. - Adicione o arquivo
.envao.gitignorepara nao commitar credenciais.
6. Perguntas Frequentes
Qual a diferenca entre docker-compose e docker compose?
docker-compose (com hifen) e o binario v1, escrito em Python, que esta sendo descontinuado. docker compose (sem hifen) e o plugin v2, escrito em Go e integrado ao Docker CLI. O formato do arquivo YAML e o mesmo. Recomendamos usar a versao v2.
depends_on garante que o servico esta pronto?
Nao completamente. depends_on apenas espera o container iniciar, nao que o servico dentro dele esteja pronto para receber conexoes. Para aguardar o banco de dados estar realmente disponivel, use healthcheck com condition: service_healthy.
Como usar variaveis de ambiente com Compose?
Crie um arquivo .env na mesma pasta do docker-compose.yml com as variaveis no formato KEY=value. O Compose carrega automaticamente essas variaveis e voce pode referencia-las com ${KEY} no YAML.