Node.js with Bun
Best practices for Dockerfile for Node.js with Bun
🐳 Annotated Dockerfile for Node.js with Bun:
🔍 Why these are best practices:
✅ Multi-stage builds
- Smaller final images: Dependencies and build tools are discarded after use, reducing container size.
- Security: Fewer files and tools mean a smaller attack surface.
✅ Caching Bun modules
- Faster builds: Bun already installs dependencies up to 30x faster than npm, and caching makes it even faster.
- Lower CI/CD overhead: Speeds up continuous integration and deployment workflows.
✅ Separating dependencies and build stages
- Clear separation of concerns: Each stage serves a single purpose, making it easier to debug and optimize.
- Improved cache efficiency: Changes in code don't trigger unnecessary reinstallation of unchanged dependencies.
✅ Minimal runtime image
- Performance and security: Only the essential runtime code is present, limiting potential vulnerabilities.
- Lower resource consumption: Optimized resource usage in production deployments.
🚀 Additional Dockerfile best practices you can adopt:
Use a non-root user
For enhanced security, run your app as a non-root user:
Use HEALTHCHECK directive
Allows Docker to monitor container health automatically.
Use explicit .dockerignore
Prevent copying unnecessary files into your image.
Example .dockerignore
Set resource limits explicitly
When deploying containers, always set CPU and memory limits to avoid resource starvation or instability.
Example in Kubernetes or Docker Compose (outside Dockerfile)
By following these annotations and best practices, your Docker images become faster to build, more secure, smaller, and easier to maintain—ideal for modern production workflows.
Last updated on