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
1. 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
2. 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
3. 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
4. Configuration Files
- •
.dockerignore: Excludes unnecessary files (node_modules, .git, logs) - •
nginx.conf: Production-ready Nginx configuration with compression, caching, security headers
5. 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
1. What environment?
- •Development →
Dockerfile.development(hot reload, all dependencies) - •Production →
Dockerfile.production(minimal, secure, optimized) - •Static Export →
Dockerfile.nginx(smallest footprint)
2. Single or Multi-container?
- •Single → Generate Dockerfile only
- •Multi → Generate
docker-compose.yml(app + database, microservices)
3. 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
4. Deployment platform?
- •Kubernetes → See
references/container-orchestration.mdK8s section - •ECS → See ECS task definition examples
- •Cloud Run → See deployment commands
- •Docker Compose → Use provided compose file
5. 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.productionto project root asDockerfile - •Copy
assets/.dockerignoreto 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.developmentandassets/docker-compose.ymlto 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.mdKubernetes 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.mdECS 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