Containerization assistant
Skill ArabelaTso/Skills-4-SE/skills/containerization-assistant
A curated list of 180+ useful Claude Skills for Software Engineering and resources for customizing AI for SE workflows.
npx -y skills add ArabelaTso/Skills-4-SE --skill containerization-assistantAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Generate Dockerfiles, Docker Compose configurations, and Kubernetes manifests for containerizing applications. Use when: (1) Creating Dockerfiles for Node.js, Python, Java, Go, or other applications, (2) Setting up multi-service environments with Docker Compose, (3) Generating Kubernetes deployments, services, and ingress configurations, (4) Optimizing container images for production, (5) Implementing containerization best practices. Provides both ready-to-use templates and custom-generated configurations based on project requirements.
SKILL.md
11.3 KB, ~2.8k tokens by cl100k_base, as published. Nobody here has run it
Containerization Assistant
Generate production-ready Docker and Kubernetes configurations for your applications.
Quick Start
Generate a Dockerfile
For existing templates:
# Node.js application
cp assets/Dockerfile.nodejs ./Dockerfile
# Python application
cp assets/Dockerfile.python ./Dockerfile
# Java application (Spring Boot)
cp assets/Dockerfile.java ./Dockerfile
# Go application
cp assets/Dockerfile.go ./Dockerfile
For custom generation: Describe your application stack and requirements, and a custom Dockerfile will be generated.
Generate Docker Compose
# Multi-service application template
cp assets/docker-compose.yml ./
cp assets/.env.example ./.env
# Edit .env with your configuration
Generate Kubernetes Manifests
Kubernetes configurations are generated based on your deployment requirements. See kubernetes_patterns.md for complete examples.
Available Templates
Dockerfiles
Node.js (assets/Dockerfile.nodejs):
- Multi-stage build for minimal image size
- Alpine-based (~170MB vs ~900MB)
- Non-root user for security
- Production-optimized dependencies
Python (assets/Dockerfile.python):
- Multi-stage build with builder pattern
- Slim base image
- User-space pip installations
- Non-root user
Java (assets/Dockerfile.java):
- Multi-stage build with JDK builder
- JRE-only runtime for smaller image
- Spring Boot optimized
- Non-root user
Go (assets/Dockerfile.go):
- Multi-stage build
- Minimal Alpine runtime
- Static binary compilation
- Non-root user
Docker Compose
Multi-service stack (assets/docker-compose.yml):
- Web application service
- PostgreSQL database
- Redis cache
- Nginx reverse proxy
- Health checks
- Volume management
- Network isolation
Environment Configuration
Environment template (assets/.env.example):
- Database credentials
- Application secrets
- Service configuration
- API keys
Generation Workflow
1. Analyze Project
Identify:
- Programming language and framework
- Dependencies and build tools
- Runtime requirements
- Services needed (database, cache, etc.)
2. Choose Approach
Template-based:
- Use for common stacks (Node.js, Python, Java, Go)
- Copy and customize template
- Fast and reliable
Custom generation:
- Use for unique requirements
- Generate from scratch
- Full customization
3. Customize Configuration
Dockerfile customization:
# Update base image version
FROM node:18-alpine # Change version as needed
# Add build arguments
ARG NODE_ENV=production
# Modify exposed port
EXPOSE 3000 # Change to your port
# Update startup command
CMD ["node", "server.js"] # Change to your entry point
Docker Compose customization:
services:
web:
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000" # Change port mapping
environment:
- DATABASE_URL=${DATABASE_URL} # Add environment variables
4. Build and Test
# Build Docker image
docker build -t myapp:1.0.0 .
# Test locally
docker run -p 3000:3000 myapp:1.0.0
# Test with Docker Compose
docker-compose up -d
# View logs
docker-compose logs -f
# Stop services
docker-compose down
5. Optimize and Deploy
See dockerfile_best_practices.md for:
- Image size optimization
- Security hardening
- Build caching strategies
- Multi-stage build patterns
Common Scenarios
Scenario 1: Containerize Node.js Express API
Requirements: Node.js 18, PostgreSQL database, Redis cache
Steps:
- Use
Dockerfile.nodejstemplate - Use
docker-compose.ymlfor local development - Customize environment variables
- Add health check endpoint
Generated files:
Dockerfile- Multi-stage Node.js builddocker-compose.yml- Web, PostgreSQL, Redis services.env- Configuration variables.dockerignore- Exclude unnecessary files
Scenario 2: Containerize Python Django Application
Requirements: Python 3.11, PostgreSQL, Celery workers
Steps:
- Use
Dockerfile.pythontemplate - Generate custom docker-compose with Celery service
- Add migration init container
- Configure health checks
Generated files:
Dockerfile- Multi-stage Python builddocker-compose.yml- Web, PostgreSQL, Redis, Celerycelery-worker.Dockerfile- Celery worker image.env- Database and Celery configuration
Scenario 3: Deploy to Kubernetes
Requirements: Deploy containerized app to Kubernetes with scaling
Steps:
- Build and push Docker image
- Generate Deployment manifest
- Generate Service (LoadBalancer)
- Generate Ingress with TLS
- Add HorizontalPodAutoscaler
See kubernetes_patterns.md for complete examples.
Scenario 4: Microservices Architecture
Requirements: Multiple services (API, Auth, Workers) with shared database
Steps:
- Generate Dockerfile for each service
- Create docker-compose with all services
- Configure service discovery
- Set up shared networks and volumes
Generated structure:
services/
api/
Dockerfile
auth/
Dockerfile
worker/
Dockerfile
docker-compose.yml
.env
Dockerfile Best Practices
Multi-Stage Builds
Reduce image size by separating build and runtime:
# Build stage
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Production stage
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
CMD ["node", "dist/index.js"]
Security
# Use non-root user
RUN addgroup -g 1001 -S nodejs && \
adduser -S nodejs -u 1001 -G nodejs
USER nodejs
# Use specific versions
FROM node:18.17.0-alpine # Not 'latest'
# Scan for vulnerabilities
# docker scan myapp:latest
Optimization
# Order layers from least to most frequently changing
COPY package*.json ./ # Changes less often
RUN npm ci
COPY . . # Changes more often
# Use .dockerignore
# node_modules
# .git
# *.md
For comprehensive best practices, see dockerfile_best_practices.md.
Kubernetes Deployment
Basic Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
spec:
containers:
- name: myapp
image: myapp:1.0.0
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
Service + Ingress
apiVersion: v1
kind: Service
metadata:
name: myapp-service
spec:
type: ClusterIP
selector:
app: myapp
ports:
- port: 80
targetPort: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ingress
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- myapp.example.com
secretName: myapp-tls
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myapp-service
port:
number: 80
For complete Kubernetes patterns including ConfigMaps, Secrets, StatefulSets, Jobs, and more, see kubernetes_patterns.md.
Configuration Management
Environment Variables
Development (.env):
NODE_ENV=development
DATABASE_URL=postgresql://localhost/myapp_dev
DEBUG=true
Production (Kubernetes Secret):
apiVersion: v1
kind: Secret
metadata:
name: myapp-secrets
type: Opaque
stringData:
database_url: "postgresql://prod-db/myapp"
api_key: "secret-key"
ConfigMaps
apiVersion: v1
kind: ConfigMap
metadata:
name: myapp-config
data:
log_level: "info"
feature_flags: |
{
"new_ui": true,
"beta_features": false
}
Troubleshooting
Docker Build Issues
Problem: Build fails with permission errors
Solution:
RUN chown -R appuser:appuser /app
USER appuser
Problem: Image too large
Solution:
- Use multi-stage builds
- Use Alpine base images
- Add .dockerignore file
- Clean up in same RUN layer
Container Runtime Issues
Problem: Container exits immediately
Solution:
- Check CMD/ENTRYPOINT
- Verify application starts correctly
- Check logs:
docker logs <container>
Problem: Cannot connect to container
Solution:
- Verify port mapping:
-p 3000:3000 - Check application binds to
0.0.0.0, notlocalhost - Verify EXPOSE directive in Dockerfile
Kubernetes Issues
Problem: Pod stuck in Pending state
Solution:
kubectl describe pod <pod-name>
# Check events for resource constraints or image pull issues
Problem: Pod crashes with OOMKilled
Solution:
resources:
limits:
memory: "512Mi" # Increase memory limit
Reference Documentation
Dockerfile Best Practices
See dockerfile_best_practices.md for:
- Multi-stage build patterns
- Layer caching optimization
- Security best practices
- Image size optimization
- Health checks
- Language-specific patterns (Node.js, Python, Java, Go)
- Development vs Production configurations
Kubernetes Patterns
See kubernetes_patterns.md for:
- Deployments and StatefulSets
- Services (ClusterIP, LoadBalancer, NodePort)
- ConfigMaps and Secrets
- Ingress with TLS
- HorizontalPodAutoscaler
- PersistentVolumeClaims
- Jobs and CronJobs
- Health probes (liveness, readiness, startup)
- NetworkPolicies
- Multi-container pods and init containers
Advanced Topics
CI/CD Integration
GitHub Actions:
name: Build and Push Docker Image
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build Docker image
run: docker build -t myapp:${{ github.sha }} .
- name: Push to registry
run: |
echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
docker push myapp:${{ github.sha }}
Image Registry
Push to Docker Hub:
docker tag myapp:1.0.0 username/myapp:1.0.0
docker push username/myapp:1.0.0
Push to AWS ECR:
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789.dkr.ecr.us-east-1.amazonaws.com
docker tag myapp:1.0.0 123456789.dkr.ecr.us-east-1.amazonaws.com/myapp:1.0.0
docker push 123456789.dkr.ecr.us-east-1.amazonaws.com/myapp:1.0.0
Helm Charts
For complex Kubernetes deployments, consider using Helm charts for templated manifests and version management.