- O que é Docker e por que todo dev deveria usar
- Instalando o Docker no Windows, Linux e macOS – Guia completo e fácil
- Primeiros comandos Docker na prática: seu primeiro container em minutos
- Criando sua primeira imagem Docker com Dockerfile
- Entendendo volumes, redes e persistência de dados no Docker
- Docker Compose – Organizando Múltiplos Serviços Facilmente
Trabalhar com um único container é simples. Mas e quando seu projeto tem vários serviços? Um backend em Python, um banco PostgreSQL, talvez um frontend… Aí entra o Docker Compose.
Com o Docker Compose, você cria um arquivo que descreve todos os serviços do seu sistema — e sobe tudo com um único comando.
💻 Contexto do post
Neste guia, vamos montar um ambiente local com:
- Um app em Python com Flask
- Um banco de dados PostgreSQL
- (Opcional) Um visualizador de banco com Adminer
- Tudo rodando via Docker Compose no Windows, com Docker Desktop instalado
🎯 Você vai aprender a:
- O que é Docker Compose
- Criar o arquivo
docker-compose.yml
- Subir múltiplos containers com um comando
- Acessar seu app via navegador
- Inspecionar seu banco com interface gráfica (Adminer)
🧠 O que é Docker Compose?
É uma ferramenta que permite definir e gerenciar múltiplos containers em um só lugar, usando um arquivo .yml
com:
- os serviços (ex: app, banco)
- os volumes (pra persistência)
- e as redes (pra comunicar entre si)
📁 Estrutura do projeto
meu-projeto/
├── app/
│ ├── app.py
│ ├── requirements.txt
│ └── Dockerfile
└── docker-compose.yml
🧾 Conteúdo dos arquivos
📄 app/app.py
from flask import Flask
import psycopg2
app = Flask(__name__)
@app.route("/")
def home():
try:
conn = psycopg2.connect(
host="db",
dbname="exemplo",
user="admin",
password="senha123"
)
conn.close()
return "Conexão com o banco de dados PostgreSQL feita com sucesso!"
except Exception as e:
return f"Erro ao conectar no banco: {e}"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
📄 app/requirements.txt
flask
psycopg2-binary
Usamos
psycopg2-binary
para evitar erro de compilação no Windows/Linux.
📄 app/Dockerfile
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
📄 docker-compose.yml
services:
web:
build: ./app
ports:
- "5000:5000"
volumes:
- ./app:/app
depends_on:
- db
db:
image: postgres
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: senha123
POSTGRES_DB: exemplo
volumes:
- dados-do-banco:/var/lib/postgresql/data
adminer:
image: adminer
ports:
- "8080:8080"
depends_on:
- db
volumes:
dados-do-banco:
networks:
default:
name: flask-network
🐳 Rodando com Docker Compose
Na raiz do projeto, execute:
docker-compose up -d --build
Esse comando:
- Constrói a imagem da app Flask
- Baixa a imagem do PostgreSQL (caso ainda não tenha)
- Sobe todos os serviços com suas redes e volumes
- Cria automaticamente a rede
flask-network
🌍 Acessando os serviços
- App Flask: http://localhost:5000
- Adminer (visualizador de banco): http://localhost:8080
No Adminer, use:
- Servidor:
db
- Usuário:
admin
- Senha:
senha123
- Banco:
exemplo
📌 Dicas úteis
- Parar os serviços:
docker-compose down
- Ver containers ativos:
docker ps
- Ver logs da app:
docker-compose logs -f web
🧠 Conclusão
Com o Docker Compose, você consegue orquestrar vários serviços com um único comando, mantendo tudo isolado, organizado e com acesso direto via navegador ou ferramentas de banco.
Isso é a base pra setups mais avançados com WordPress, Laravel, React, APIs REST, entre outros.