Docker para Rodar Aplicações Python

Se você já desenvolveu projetos Python, sabe que configuração de ambiente e dependências podem ser um desafio. Diferentes versões de Python, bibliotecas conflitantes e sistemas operacionais variados podem causar problemas.

Docker resolve isso criando ambientes isolados e replicáveis, chamados de containers, que garantem que seu projeto rode da mesma forma em qualquer máquina.

Neste artigo, vamos abordar:

  • O que é Docker e como funciona.

  • Por que usar Docker para projetos Python.

  • Como criar, configurar e rodar uma aplicação Python com Docker.

  • Boas práticas e exemplos detalhados.


🔹 1. O que é Docker?

Docker é uma plataforma de virtualização leve que usa containers, que são ambientes isolados que contêm:

  • Sistema operacional mínimo (baseado em imagens).

  • Código da aplicação.

  • Bibliotecas e dependências.

Diferente de máquinas virtuais, os containers compartilham o kernel do host, tornando-os mais rápidos e leves.


🔹 2. Por que usar Docker em Python?

Vantagens:

  • Isolamento completo: cada projeto pode ter sua própria versão de Python e pacotes.

  • Consistência: roda exatamente igual em qualquer computador ou servidor.

  • Fácil deploy: integra facilmente com nuvem, CI/CD e orquestradores como Kubernetes.

  • Reprodutibilidade: evita o clássico problema “na minha máquina funciona”.


🔹 3. Preparando o projeto Python

Suponha que temos uma aplicação simples app.py:

# app.py
from flask import Flask

app = Flask(__name__)

@app.route("/")
def home():
    return "Olá, Docker com Python!"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

E um arquivo requirements.txt contendo dependências:

Flask==2.3.2

🔹 4. Criando o Dockerfile

Dockerfile é o roteiro que define como a imagem do seu container será construída.

Exemplo de Dockerfile para nossa aplicação:

# Escolher imagem base com Python
FROM python:3.12-slim

# Definir diretório de trabalho dentro do container
WORKDIR /app

# Copiar arquivos de dependência
COPY requirements.txt .

# Instalar dependências
RUN pip install --no-cache-dir -r requirements.txt

# Copiar todo o código para o container
COPY . .

# Expor porta do container
EXPOSE 5000

# Comando para rodar a aplicação
CMD ["python", "app.py"]

🔹 5. Construindo a imagem Docker

No terminal, dentro da pasta do projeto:

docker build -t minha-aplicacao-python .
  • -t → nome da imagem (minha-aplicacao-python).

  • . → contexto do Docker (pasta atual).

Após a construção, você pode ver a imagem com:

docker images

🔹 6. Rodando o container

Para rodar a aplicação em um container:

docker run -d -p 5000:5000 minha-aplicacao-python

Explicando:

  • -d → rodar em segundo plano (detached).

  • -p 5000:5000 → mapeia porta do container para a porta local.

Agora, abra http://localhost:5000 no navegador e verá a mensagem:

Olá, Docker com Python!

🔹 7. Atualizando o projeto

Sempre que houver mudanças no código:

  1. Reconstrua a imagem:

docker build -t minha-aplicacao-python .
  1. Pare o container antigo:

docker ps  # lista containers ativos
docker stop <id_container>
  1. Rode a nova versão:

docker run -d -p 5000:5000 minha-aplicacao-python

🔹 8. Boas práticas com Docker

  1. Usar imagens leves (python:3.12-slim) para reduzir tamanho.

  2. Separar dependências do código (COPY requirements.txt antes do código) → aproveita cache.

  3. Versionar imagem com tags: minha-aplicacao-python:1.0.

  4. Ignorar arquivos desnecessários com .dockerignore (similar ao .gitignore):

__pycache__/
*.pyc
venv/
  1. Variáveis de ambiente: use ENV ou arquivos .env para configuração do container.


🔹 9. Docker Compose (opcional, mas poderoso)

Se sua aplicação depende de múltiplos serviços (ex: banco de dados), o Docker Compose ajuda a orquestrar.

Exemplo docker-compose.yml:

version: '3'
services:
  web:
    build: .
    ports:
      - "5000:5000"
  db:
    image: postgres:16
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: senha

Com isso, basta rodar:

docker-compose up -d

E todos os serviços são iniciados de forma integrada.


🔹 10. Conclusão

Docker é uma ferramenta indispensável para projetos Python modernos. Ele permite:

  • Isolamento de ambiente e dependências.

  • Facilitar o deploy e a colaboração.

  • Garantir consistência entre desenvolvimento, teste e produção.

Com um Dockerfile bem configurado, você pode rodar qualquer aplicação Python em qualquer lugar, sem se preocupar com o sistema operacional ou conflitos de pacotes.

Comentários

Postagens mais visitadas deste blog

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Python para Computação Quântica: Introdução com Qiskit

Manipulação de Arquivos no C#: Como Ler, Escrever e Trabalhar com Arquivos de Forma Simples