# Backend Dockerfile Guide ## Overview Multi-stage Dockerfile for the Recipe Manager backend API. ## Build ```bash docker build -t recipe-manager-backend:latest . ``` ## Run ```bash # Simple run docker run -p 3000:3000 -v $(pwd)/data:/app/data recipe-manager-backend:latest # With environment variables docker run \ -p 3000:3000 \ -v $(pwd)/data:/app/data \ -e NODE_ENV=production \ -e DATABASE_PATH=/app/data/recipes.db \ recipe-manager-backend:latest ``` ## Volume Mounts **Required:** - `/app/data` — SQLite database storage (persistent) ## Ports - `3000` — API server ## Environment Variables | Variable | Default | Description | |----------|---------|-------------| | `NODE_ENV` | `production` | Node environment | | `DATABASE_PATH` | `/app/data/recipes.db` | SQLite database path | ## Image Details **Base:** `node:22-alpine` **Size:** ~200MB (optimized with multi-stage build) **Architecture:** x86_64, arm64 (via Node.js official images) ### Build Process 1. **Builder stage:** Installs all dependencies, builds TypeScript 2. **Production stage:** Copies only built files, production dependencies 3. **Startup:** Runs migrations, then starts Express server ### What's Included - Built JavaScript (`dist/`) - Production npm dependencies - Database schema (`src/backend/db/schema.sql`) - Migration script ### What's Excluded (via .dockerignore) - Source TypeScript files - Tests - Frontend code - Documentation - Development dependencies ## Health Check ```bash curl http://localhost:3000/ # Expected: {"success":true,"message":"Recipe Manager API is running","version":"0.1.0"} ``` ## Debugging ```bash # View logs docker logs # Access shell docker exec -it sh # Check database docker exec -it ls -lh /app/data/ ``` ## Next Steps Use with `docker-compose.yml` for complete stack (backend + frontend + proxy).