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
- 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:
bash
./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:
bash
./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):
bash
./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:
bash
./docker-cleanup.sh --all --dry-run # Preview cleanup
./docker-cleanup.sh --containers --images # Clean specific resources
4. Configuration Files
- : Excludes unnecessary files (node_modules, .git, logs)
- : 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 → (hot reload, all dependencies)
- Production → (minimal, secure, optimized)
- Static Export → (smallest footprint)
2. Single or Multi-container?
- Single → Generate Dockerfile only
- Multi → Generate (app + database, microservices)
3. Which registry?
- Docker Hub →
- AWS ECR →
123456789012.dkr.ecr.region.amazonaws.com/image
- Google GCR →
- Azure ACR →
registry.azurecr.io/image
4. 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
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.production
to project root as
- Copy 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:
- 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
)
✅ 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
bash
# 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
yaml
- 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
yaml
build:
script:
- chmod +x docker-build.sh
- ./docker-build.sh -e prod -t $CI_COMMIT_SHA
Resources
Scripts ()
Production-ready bash scripts with comprehensive features:
- - Build images (400+ lines, colorized output)
- - Run containers (400+ lines, auto conflict resolution)
- - Push to registries (multi-registry support)
- - Clean resources (dry-run mode, selective cleanup)
References ()
Detailed documentation loaded as needed:
- - Comprehensive Docker best practices (~500 lines)
container-orchestration.md
- Deployment guides for 6+ platforms (~600 lines)
Assets ()
Ready-to-use templates:
- - Multi-stage production Dockerfile
- - Development Dockerfile
- - Static export with Nginx
- - Multi-container orchestration
- - Optimized exclusion rules
- - Production Nginx configuration