- Data Hackers Newsletter
- Posts
- Docker Compose: Guia completo para iniciantes
Docker Compose: Guia completo para iniciantes
Aprenda a utilizar essa ferramenta que se tornou fundamental para desenvolvedores que trabalham com aplicações multi-container
O Docker Compose é uma ferramenta essencial para desenvolvedores que trabalham com aplicações multi-container. Se você já experimentou executar múltiplos contêineres Docker manualmente, sabe o quanto isso pode se tornar complexo rapidamente. Neste guia completo, vamos explorar o que é o Docker Compose, como utilizá-lo e por que ele se tornou indispensável no desenvolvimento moderno.
O que é Docker Compose?
Docker Compose é uma ferramenta que permite definir e executar aplicações Docker multi-container. Com ele, você utiliza um arquivo YAML para configurar todos os serviços da sua aplicação. Em seguida, com um único comando, você cria e inicia todos os serviços definidos na sua configuração.
A grande vantagem? Simplicidade e reprodutibilidade. Ao invés de executar múltiplos comandos docker run com dezenas de flags e parâmetros, você define tudo uma vez no arquivo de configuração e compartilha com sua equipe.
Dockerfile vs Compose file: qual a diferença?
É comum confundir esses dois conceitos no início, mas a distinção é importante:
Dockerfile | Compose file |
|---|---|
Fornece instruções para construir uma imagem de container | Define como seus containers devem executar |
Foco em uma única imagem | Orquestra múltiplos serviços |
Usado com | Usado com |
Frequentemente, um arquivo Compose referencia um Dockerfile para construir a imagem que será utilizada em um serviço específico.
Por que usar Docker Compose?
Seguindo as melhores práticas
Uma das melhores práticas em containers é que cada container deve fazer uma coisa e fazê-la bem. Isso significa que, para uma aplicação completa, você provavelmente precisará de:
Um container para a aplicação
Um container para o banco de dados
Um container para cache (Redis, por exemplo)
Um container para filas de mensagens
E assim por diante
Gerenciar tudo isso manualmente rapidamente se torna um pesadelo de complexidade.
Abordagem declarativa
O Docker Compose é uma ferramenta declarativa - você simplesmente define o que quer e executa. Não é necessário recriar tudo do zero a cada mudança. Quando você altera algo no arquivo de configuração e executa docker compose up novamente, o Compose identifica as alterações e as aplica de forma inteligente.
Versionamento e colaboração
Incluindo o arquivo compose.yaml no seu repositório de código, qualquer pessoa que clonar o projeto pode colocar toda a aplicação em funcionamento com um único comando. Isso facilita enormemente a integração de novos membros na equipe e garante que todos estejam trabalhando com a mesma configuração.
Colocando a mão na massa: aplicação to-do list
Vamos construir uma aplicação to-do list utilizando Node.js e MySQL para entender na prática como o Docker Compose funciona.
Pré-requisitos
Docker Desktop instalado em seu sistema
Git para clonar o repositório de exemplo
Iniciando a aplicação
Clone o repositório de exemplo:
git clone https://github.com/dockersamples/todo-list-app
cd todo-list-app
Explore o arquivo compose.yaml:
Dentro do diretório, você encontrará o arquivo compose.yaml. Este é o coração da configuração, onde toda a mágica acontece. O arquivo define:
Serviços que compõem a aplicação
Imagens Docker utilizadas
Portas expostas
Volumes para persistência de dados
Redes para comunicação entre containers
Outras configurações necessárias
Inicie a aplicação:
docker compose up -d --build
O output será similar a este:
[+] Running 5/5
✔ app 3 layers [⣿⣿⣿] 0B/0B Pulled 7.1s
✔ e6f4e57cc59e Download complete 0.9s
✔ df998480d81d Download complete 1.0s
✔ 31e174fedd23 Download complete 2.5s
✔ 43c47a581c29 Download complete 2.0s
[+] Running 4/4
⠸ Network todo-list-app_default Created 0.3s
⠸ Volume "todo-list-app_todo-mysql-data" Created 0.3s
✔ Container todo-list-app-app-1 Started 0.3s
✔ Container todo-list-app-mysql-1 Started 0.3s
O que aconteceu nos bastidores?
Com esse único comando, o Docker Compose realizou várias operações:
Download de imagens: As imagens Node.js e MySQL foram baixadas do Docker Hub
Criação de rede: Uma rede foi criada para permitir a comunicação entre os containers
Criação de volume: Um volume foi criado para persistir os dados do banco de dados entre reinicializações
Inicialização de containers: Dois containers foram iniciados com todas as configurações necessárias
Acesse a aplicação:
Abra seu navegador e acesse http://localhost:3000. A aplicação pode levar de 10 a 15 segundos para inicializar completamente. Experimente adicionar itens à lista, marcá-los como concluídos e removê-los.
Gerenciando a aplicação
Visualizando no Docker Desktop
Através da interface gráfica do Docker Desktop, você pode:
Visualizar todos os containers em execução
Acessar logs de cada serviço
Inspecionar configurações detalhadas
Monitorar uso de recursos
Finalizando a aplicação
Quando terminar de trabalhar, é simples desligar tudo:
docker compose down
Output esperado:
[+] Running 3/3
✔ Container todo-list-app-mysql-1 Removed 2.9s
✔ Container todo-list-app-app-1 Removed 0.1s
✔ Network todo-list-app_default Removed 0.1s
Persistência de volumes
Por padrão, os volumes não são removidos automaticamente quando você derruba um stack do Compose. Isso é intencional - você pode querer preservar os dados caso reinicie a aplicação.
Para remover também os volumes, adicione a flag --volumes:
docker compose down --volumes
Comandos essenciais do Docker Compose
Comando | Descrição |
|---|---|
| Cria e inicia os containers |
| Inicia em modo detached (background) |
| Para e remove containers, redes |
| Lista containers em execução |
| Visualiza logs dos serviços |
| Executa comando em um container em execução |
| Constrói ou reconstrói serviços |
Estrutura básica de um arquivo compose.yaml
Embora cada aplicação tenha necessidades específicas, a estrutura básica de um arquivo Compose segue este padrão:
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
environment:
- NODE_ENV=development
depends_on:
- db
db:
image: mysql:8.0
volumes:
- db-data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=secret
volumes:
db-data:
Melhores práticas com Docker Compose
1. Use variáveis de ambiente
Evite hardcoding de credenciais e configurações sensíveis. Utilize arquivos .env:
environment:
- DB_PASSWORD=${DB_PASSWORD}
2. Defina health checks
Garanta que seus serviços estejam realmente prontos antes de iniciar dependências:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000"]
interval: 30s
timeout: 3s
retries: 3
3. Use named volumes
Volumes nomeados são mais fáceis de gerenciar e entender:
volumes:
postgres-data:
redis-data:
4. Limite recursos
Evite que um container consuma todos os recursos do sistema:
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
FAQ sobre Docker Compose
O Docker Compose substitui o Kubernetes?
Não. Docker Compose é ideal para desenvolvimento local e aplicações menores. Kubernetes é mais adequado para ambientes de produção em larga escala com requisitos complexos de orquestração.
Posso usar Docker Compose em produção?
Embora possível, não é recomendado para ambientes de produção críticos. Para produção, considere ferramentas como Kubernetes, Docker Swarm ou serviços de orquestração em nuvem.
Como depurar problemas no Docker Compose?
Use docker compose logs [service-name] para visualizar logs específicos, ou docker compose logs -f para acompanhar em tempo real.
É possível usar múltiplos arquivos Compose?
Sim! Você pode usar a flag -f para especificar múltiplos arquivos, útil para diferentes ambientes:
docker compose -f docker-compose.yml -f docker-compose.prod.yml up
Próximos passos
Agora que você compreende os fundamentos do Docker Compose, aqui estão algumas sugestões para aprofundar seus conhecimentos:
Explore a documentação oficial sobre como o Compose funciona internamente
Pratique criando seus próprios arquivos Compose para projetos pessoais
Aprenda sobre Docker networks para entender melhor a comunicação entre containers
Estude patterns de configuração para diferentes tipos de aplicações (microserviços, monolitos, etc.)
Experimente com diferentes stacks (LAMP, MEAN, JAMstack) usando Compose
Conclusão
Docker Compose é uma ferramenta poderosa que simplifica drasticamente o desenvolvimento de aplicações multi-container. Ao definir toda a infraestrutura da sua aplicação em um único arquivo YAML, você ganha em produtividade, reprodutibilidade e colaboração.
A curva de aprendizado inicial pode parecer íngreme, mas os benefícios a longo prazo são imensos. Com a prática, você descobrirá que o Docker Compose se torna uma extensão natural do seu fluxo de trabalho de desenvolvimento.
Comece pequeno, experimente com aplicações simples e gradualmente incorpore configurações mais avançadas conforme sua confiança e necessidades crescem. O ecossistema Docker é vasto e está em constante evolução, tornando este um momento excelente para aprofundar seus conhecimentos em containers e orquestração.