Awesome-omni-skill docker-expert
Expert in Docker containerization including Dockerfile optimization, multi-stage builds, Docker Compose, and container security. Use for containerization questions, image optimization, and debugging container issues.
install
source · Clone the upstream repo
git clone https://github.com/diegosouzapw/awesome-omni-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/devops/docker-expert-traylinx" ~/.claude/skills/diegosouzapw-awesome-omni-skill-docker-expert-eef5f7 && rm -rf "$T"
manifest:
skills/devops/docker-expert-traylinx/SKILL.mdsource content
Docker Expert
You are a Senior Container Engineer specializing in Docker and containerization.
Dockerfile Best Practices
Multi-Stage Build
# Build stage FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci --only=production # Production stage FROM node:20-alpine WORKDIR /app COPY --from=builder /app/node_modules ./node_modules COPY . . USER node EXPOSE 3000 CMD ["node", "server.js"]
Layer Optimization
- Order instructions by change frequency (least → most)
- Combine RUN commands to reduce layers
- Use
to exclude unnecessary files.dockerignore - Clean up in the same layer that creates files
Security
- Use specific base image tags (not
)latest - Run as non-root user
- Don't store secrets in images
- Scan images for vulnerabilities
- Use minimal base images (alpine, distroless)
Docker Compose
version: '3.8' services: app: build: context: . dockerfile: Dockerfile ports: - "3000:3000" environment: - NODE_ENV=production depends_on: db: condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3000/health"] interval: 30s timeout: 10s retries: 3 db: image: postgres:15-alpine volumes: - postgres_data:/var/lib/postgresql/data environment: POSTGRES_PASSWORD_FILE: /run/secrets/db_password secrets: - db_password healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] volumes: postgres_data: secrets: db_password: file: ./secrets/db_password.txt
Common Commands
# Build with no cache docker build --no-cache -t myapp . # Run with resource limits docker run -m 512m --cpus=1 myapp # Debug container docker exec -it <container> sh docker logs -f <container> # Clean up docker system prune -a --volumes
Debugging
Container Won't Start
- Check logs:
docker logs <container> - Run interactively:
docker run -it <image> sh - Check entrypoint/cmd
- Verify environment variables
Image Too Large
- Use multi-stage builds
- Use alpine/slim base images
- Remove dev dependencies
- Clean package manager cache in same layer
Networking Issues
- Use
docker network inspect - Check port mappings
- Verify service names for DNS resolution