Skip to content

Repository files navigation

buildkit-example (FastAPI + Multi-stage Docker)

Exemplo simples de API FastAPI com Docker multi-stage para produção e desenvolvimento.

📁 Estrutura

.
├─ app/
│  └─ main.py
├─ requirements.txt
├─ requirements-dev.txt
├─ Dockerfile
├─ compose.yaml          # dev
├─ compose.prod.yaml     # prod
└─ .dockerignore

⚙️ Pré-requisitos

  • Docker
  • Docker Compose

🚀 Executar em Desenvolvimento

Hot-reload com Uvicorn. Usa o estágio dev do Dockerfile e volume do código.

# subir
docker compose up --build -d

# acessar
curl http://localhost:8008/

🧱 Executar em Produção

Imagem enxuta com Gunicorn + UvicornWorker. Usa o estágio final.

# subir
docker compose -f compose.prod.yaml up --build -d

# acessar
curl http://localhost:8000/

🔧 Variáveis de Ambiente

  • APP_ENV
    • dev: development
    • prod: production
  • GUNICORN_WORKERS (prod) – padrão 4
  • GUNICORN_BIND (prod) – padrão 0.0.0.0:8000
  • GUNICORN_TIMEOUT (prod) – padrão 60

🐳 Stages do Dockerfile (resumo)

  • base: Python 3.11-slim + ajustes básicos
  • builder: instala requirements.txt em /opt/venv
  • final: imagem de produção minimal, copia apenas o venv e a app
  • dev: herda do builder os pacotes e instala apenas extras do requirements-dev.txt

📏 Análises rápidas

# listar tamanhos
docker image ls --format 'table {{.Repository}}\t{{.Tag}}\t{{.Size}}' | grep buildkit-example

# camadas e tamanho em bytes
docker image inspect buildkit-example:dev  --format 'dev  -> Size={{.Size}} Layers={{len .RootFS.Layers}}'
docker image inspect buildkit-example:prod --format 'prod -> Size={{.Size}} Layers={{len .RootFS.Layers}}'

# histórico de camadas
docker history buildkit-example:prod

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages