Ask the user:
- "What language and framework? (e.g. Python/FastAPI, Node/Next.js, Go)"
- "What platform are you deploying to? (Fly.io, Railway, Cloud Run, self-hosted)"
- "Any environment variables the app needs at runtime?"
Then produce:
Dockerfile
# [explanation of each stage]
What this Dockerfile does:
- Base image choice and why
- Multi-stage build explanation (if used)
- How dependencies are cached for fast rebuilds
- Non-root user setup (security)
- Health check configuration
Platform config (if applicable)
fly.toml (for Fly.io):
# minimal fly.toml
Commands to deploy:
# step-by-step deployment commands
.dockerignore
node_modules/
.env
.env.local
*.log
.git
Security checklist:
- App runs as non-root user
- No secrets in the image layers
- Only production dependencies installed
- Health check defined
- Image size under [target — e.g. 200MB for Node, 100MB for Python Alpine]
Flag any environment variable that looks like a secret — confirm it's being passed at runtime, not baked into the image.