Docker Containerization Skill
Overview
Generate production-ready Docker configurations for modern web applications, particularly Next.js and Node.js projects. This skill provides Dockerfiles, docker-compose setups, bash scripts for container management, and comprehensive deployment guides for various orchestration platforms.
Core Capabilities
- Dockerfile Generation
Create optimized Dockerfiles for different environments:
Production (assets/Dockerfile.production ):
-
Multi-stage build reducing image size by 85%
-
Alpine Linux base (~180MB final image)
-
Non-root user execution for security
-
Health checks and resource limits
Development (assets/Dockerfile.development ):
-
Hot reload support
-
All dev dependencies included
-
Volume mounts for live code updates
Nginx Static (assets/Dockerfile.nginx ):
-
Static export optimization
-
Nginx reverse proxy included
-
Smallest possible footprint
- Docker Compose Configuration
Multi-container orchestration with assets/docker-compose.yml :
-
Development and production services
-
Network and volume management
-
Health checks and logging
-
Restart policies
- Bash Scripts for Container Management
docker-build.sh - Build images with comprehensive options:
./docker-build.sh -e prod -t v1.0.0 ./docker-build.sh -n my-app --no-cache --platform linux/amd64
docker-run.sh - Run containers with full configuration:
./docker-run.sh -i my-app -t v1.0.0 -d ./docker-run.sh -p 8080:3000 --env-file .env.production
docker-push.sh - Push to registries (Docker Hub, ECR, GCR, ACR):
./docker-push.sh -n my-app -t v1.0.0 --repo username/my-app ./docker-push.sh -r gcr.io/project --repo my-app --also-tag stable
docker-cleanup.sh - Free disk space:
./docker-cleanup.sh --all --dry-run # Preview cleanup ./docker-cleanup.sh --containers --images # Clean specific resources
- Configuration Files
-
.dockerignore : Excludes unnecessary files (node_modules, .git, logs)
-
nginx.conf : Production-ready Nginx configuration with compression, caching, security headers
- Reference Documentation
docker-best-practices.md covers:
-
Multi-stage builds explained
-
Image optimization techniques (50-85% size reduction)
-
Security best practices (non-root users, vulnerability scanning)
-
Performance optimization
-
Health checks and logging
-
Troubleshooting guide
container-orchestration.md covers deployment to:
-
Docker Compose (local development)
-
Kubernetes (enterprise scale with auto-scaling)
-
Amazon ECS (AWS-native orchestration)
-
Google Cloud Run (serverless containers)
-
Azure Container Instances
-
Digital Ocean App Platform
Includes configuration examples, commands, auto-scaling setup, and monitoring.
Workflow Decision Tree
- What environment?
-
Development → Dockerfile.development (hot reload, all dependencies)
-
Production → Dockerfile.production (minimal, secure, optimized)
-
Static Export → Dockerfile.nginx (smallest footprint)
- Single or Multi-container?
-
Single → Generate Dockerfile only
-
Multi → Generate docker-compose.yml (app + database, microservices)
- Which registry?
-
Docker Hub → docker.io/username/image
-
AWS ECR → 123456789012.dkr.ecr.region.amazonaws.com/image
-
Google GCR → gcr.io/project-id/image
-
Azure ACR → registry.azurecr.io/image
- Deployment platform?
-
Kubernetes → See references/container-orchestration.md K8s section
-
ECS → See ECS task definition examples
-
Cloud Run → See deployment commands
-
Docker Compose → Use provided compose file
- Optimizations needed?
-
Image size → Multi-stage builds, Alpine base
-
Build speed → Layer caching, BuildKit
-
Security → Non-root user, vulnerability scanning
-
Performance → Resource limits, health checks
Usage Examples
Example 1: Containerize Next.js App for Production
User: "Containerize my Next.js app for production"
Steps:
-
Copy assets/Dockerfile.production to project root as Dockerfile
-
Copy assets/.dockerignore to project root
-
Build: ./docker-build.sh -e prod -n my-app -t v1.0.0
-
Test: ./docker-run.sh -i my-app -t v1.0.0 -p 3000:3000 -d
-
Push: ./docker-push.sh -n my-app -t v1.0.0 --repo username/my-app
Example 2: Development with Docker Compose
User: "Set up Docker Compose for local development"
Steps:
-
Copy assets/Dockerfile.development and assets/docker-compose.yml to project
-
Customize services in docker-compose.yml
-
Start: docker-compose up -d
-
Logs: docker-compose logs -f app-dev
Example 3: Deploy to Kubernetes
User: "Deploy my containerized app to Kubernetes"
Steps:
-
Build and push image to registry
-
Review references/container-orchestration.md Kubernetes section
-
Create K8s manifests (deployment, service, ingress)
-
Apply: kubectl apply -f deployment.yaml
-
Verify: kubectl get pods && kubectl logs -f deployment/app
Example 4: Deploy to AWS ECS
User: "Deploy to AWS ECS Fargate"
Steps:
-
Build and push to ECR
-
Review references/container-orchestration.md ECS section
-
Create task definition JSON
-
Register: aws ecs register-task-definition --cli-input-json file://task-def.json
-
Create service: aws ecs create-service --cluster my-cluster --service-name app --desired-count 3
Best Practices
Security
✅ Use multi-stage builds for production ✅ Run as non-root user ✅ Use specific image tags (not latest ) ✅ Scan for vulnerabilities ✅ Never hardcode secrets ✅ Implement health checks
Performance
✅ Optimize layer caching order ✅ Use Alpine images (~85% smaller) ✅ Enable BuildKit for parallel builds ✅ Set resource limits ✅ Use compression
Maintainability
✅ Add comments for complex steps ✅ Use build arguments for flexibility ✅ Keep Dockerfiles DRY ✅ Version control all configs ✅ Document environment variables
Troubleshooting
Image too large (>500MB) → Use multi-stage builds, Alpine base, comprehensive .dockerignore
Build is slow → Optimize layer caching, use BuildKit, review dependencies
Container exits immediately → Check logs: docker logs container-name
→ Verify CMD/ENTRYPOINT, check port conflicts
Changes not reflecting → Rebuild without cache, check .dockerignore, verify volume mounts
Quick Reference
Build
./docker-build.sh -e prod -t latest
Run
./docker-run.sh -i app -t latest -d
Logs
docker logs -f app
Execute
docker exec -it app sh
Cleanup
./docker-cleanup.sh --all --dry-run # Preview ./docker-cleanup.sh --all # Execute
Integration with CI/CD
GitHub Actions
- run: | chmod +x docker-build.sh docker-push.sh ./docker-build.sh -e prod -t ${{ github.sha }} ./docker-push.sh -n app -t ${{ github.sha }} --repo username/app
GitLab CI
build: script: - chmod +x docker-build.sh - ./docker-build.sh -e prod -t $CI_COMMIT_SHA
Resources
Scripts (scripts/ )
Production-ready bash scripts with comprehensive features:
-
docker-build.sh
-
Build images (400+ lines, colorized output)
-
docker-run.sh
-
Run containers (400+ lines, auto conflict resolution)
-
docker-push.sh
-
Push to registries (multi-registry support)
-
docker-cleanup.sh
-
Clean resources (dry-run mode, selective cleanup)
References (references/ )
Detailed documentation loaded as needed:
-
docker-best-practices.md
-
Comprehensive Docker best practices (~500 lines)
-
container-orchestration.md
-
Deployment guides for 6+ platforms (~600 lines)
Assets (assets/ )
Ready-to-use templates:
-
Dockerfile.production
-
Multi-stage production Dockerfile
-
Dockerfile.development
-
Development Dockerfile
-
Dockerfile.nginx
-
Static export with Nginx
-
docker-compose.yml
-
Multi-container orchestration
-
.dockerignore
-
Optimized exclusion rules
-
nginx.conf
-
Production Nginx configuration