Docker Compose – Organizando Múltiplos Serviços Facilmente

Aprenda como usar Docker Compose para gerenciar vários containers com facilidade. Exemplo prático com Flask, PostgreSQL e Adminer

Compartilhe

Docker Compose - como orquestrar múltiplos containers com um só comando
Essa é a parte 6 de 6 na série Docker do Zero ao Profissional

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

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.

Navegação<< Entendendo volumes, redes e persistência de dados no Docker

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.