Introdução
Muitas vezes o pessoal começa no Docker achando que é só copiar um arquivo de qualquer jeito e rodar. Mas no mundo real, se você não souber como as camadas (layers) funcionam, vai acabar com uma imagem gigante e um build que demora uma eternidade toda vez que você mudar uma linha de código.
Hoje eu vou te mostrar como "dockerizar" uma aplicação Flask simples, mas do jeito certo, focando em performance e naquela organização que a gente gosta de ver em produção.
A Aplicação
Imagine que temos um app.py básico e um requirements.txt com o Flask. O objetivo aqui não é o código Python em si, mas como vamos empacotar isso para que rode igual em qualquer lugar.
O Arquivo de Build Comentado
Aqui está a "receita do bolo". Repare na ordem dos fatores, porque aqui ela altera (e muito) o produto:
Arquivo de configuração Docker:
# 1. Imagem base: sempre use versões slim para produção.
# É menos superfície de ataque e menos lixo no disco.
FROM python:3.11-slim
# 2. Onde o jogo acontece dentro do container
WORKDIR /app
# 3. DICA DE OURO: Copiamos o requirements primeiro.
# Se você não mudar as dependências, o Docker pula o 'pip install' no próximo build.
COPY requirements.txt .
# 4. Instalamos as bibliotecas sem guardar lixo de cache
RUN pip install --no-cache-dir -r requirements.txt
# 5. Só agora copiamos o código.
# Como o código muda muito, ele fica por último para não invalidar o cache acima.
COPY . .
# 6. Documentação da porta (importante para quem gerencia a rede)
EXPOSE 5000
# 7. O comando que dá o start
CMD ["python", "app.py"]Por que essa ordem? (O pulo do gato)
O Docker trabalha com cache por instrução. Se eu copiar todo o meu código (COPY . .) antes de rodar o pip install, toda vez que eu mudar um comentário no Python, o Docker vai achar que mudou tudo e vai baixar todas as bibliotecas de novo. Fazendo do jeito que mostrei acima, o build vira um raio.
Colocando para rodar
Para subir o ambiente, o processo no terminal é direto:
Comandos no terminal:
# Criando a imagem com uma tag (nome) fácil de achar
docker build -t meu-primeiro-python .
# Rodando e mapeando a porta da sua máquina (5000) para a do container (5000)
docker run -p 5000:5000 meu-primeiro-python💡 Não esqueça: Use um arquivo .dockerignore. Já vi muito nego subindo pasta venv e .git para dentro do container sem querer. Isso deixa a imagem pesada e pode até vazar segredo de configuração.
Conclusão
Criar um arquivo de build Docker é fácil, o desafio é manter ele eficiente. Começando com imagens slim e respeitando a ordem das camadas, você já está na frente de muita gente. Testa aí e me diz: quanto tempo diminuiu no seu build?
Dúvidas? Me chama no LinkedIn ou deixa um comentário.