administering-linux
Manage Linux systems covering systemd services, process management, filesystems, networking, performance tuning, and…
Writing optimized, secure, multi-stage Dockerfiles with language-specific patterns (Python, Node.js, Go, Rust), BuildKit features, and distroless images. Use when containerizing applications, optimizing existing Dockerfiles, or reducing image sizes.
Claude Code
$ npx -y skills add ancoleman/ai-design-components --skill writing-dockerfiles --agent claude-code
Codex
$ npx skills add ancoleman/ai-design-components --skill writing-dockerfiles -a codex -y
Cursor
$ npx skills add ancoleman/ai-design-components --skill writing-dockerfiles -a cursor -y
Gemini CLI
$ npx skills add ancoleman/ai-design-components --skill writing-dockerfiles -a gemini-cli -y
GitHub Copilot
$ npx skills add ancoleman/ai-design-components --skill writing-dockerfiles -a github-copilot -y
OpenCode
$ npx skills add ancoleman/ai-design-components --skill writing-dockerfiles -a opencode -y
Windsurf
$ npx skills add ancoleman/ai-design-components --skill writing-dockerfiles -a windsurf -y
name: writing-dockerfiles description: Writing optimized, secure, multi-stage Dockerfiles with language-specific patterns (Python, Node.js, Go, Rust), BuildKit features, and distroless images. Use when containerizing applications, optimizing existing Dockerfiles, or reducing image sizes.
Create production-grade Dockerfiles with multi-stage builds, security hardening, and language-specific optimizations.
Invoke when:
Ask three questions to determine the approach:
**1. What language?**
**2. Is security critical?**
**3. Is image size critical?**
Separate build environment from runtime environment to minimize final image size.
**Pattern:**
# Stage 1: Build FROM build-image AS builder RUN compile application # Stage 2: Runtime FROM minimal-runtime-image COPY --from=builder /app/binary /app/ CMD ["/app/binary"]
**Benefits:**
**Decision matrix:**
| Language | Build Stage | Runtime Stage | Final Size | |----------|-------------|---------------|------------| | Go (static) | `golang:1.22-alpine` | `gcr.io/distroless/static-debian12` | 10-30MB | | Rust (static) | `rust:1.75-alpine` | `scratch` | 5-15MB | | Python | `python:3.12-slim` | `python:3.12-slim` | 200-400MB | | Node.js | `node:20-alpine` | `node:20-alpine` | 150-300MB | | Java | `maven:3.9-eclipse-temurin-21` | `eclipse-temurin:21-jre-alpine` | 200-350MB |
**Distroless images** (Google-maintained):
See `references/base-image-selection.md` for complete comparison.
Enable BuildKit for advanced caching and security:
export DOCKER_BUILDKIT=1 docker build . # OR docker buildx build .
**Key features:**
See `references/buildkit-features.md` for detailed patterns.
Order Dockerfile instructions from least to most frequently changing:
# 1. Base image (rarely changes) FROM python:3.12-slim # 2. System packages (rarely changes) RUN apt-get update && apt-get install -y build-essential # 3. Dependencies manifest (changes occasionally) COPY requirements.txt . RUN pip install -r requirements.txt # 4. Application code (changes frequently) COPY . . # 5. Runtime configuration (rarely changes) CMD ["python", "app.py"]
**BuildKit cache mounts:**
RUN --mount=type=cache,target=/root/.cache/pip \
pip install -r requirements.txtCache persists across builds, eliminating redundant downloads.
**Essential security practices:**
**1. Non-root users**
# Debian/Ubuntu RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app USER appuser # Alpine RUN adduser -D -u 1000 appuser && chown -R appuser:appuser /app USER appuser # Distroless (built-in) USER nonroot:nonroot
**2. Secret management**
# ❌ NEVER: Secret in layer history
RUN git clone https://${GITHUB_TOKEN}@github.com/private/repo.git
# ✅ ALWAYS: BuildKit secret mount
RUN --mount=type=secret,id=github_token \
TOKEN=$(cat /run/secrets/github_token) && \
git clone https://${TOKEN}@github.com/private/repo.gitBuild with:
docker buildx build --secret id=github_token,src=./token.txt .
**3. Vulnerability scanning**
# Trivy (recommended) trivy image myimage:latest # Docker Scout docker scout cves myimage:latest
**4. Health checks**
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:8080/health || exit 1
See `references/security-hardening.md` for comprehensive hardening patterns.
Create `.dockerignore` to exclude unnecessary files:
# Version control .git .gitignore # CI/CD .github .gitlab-ci.yml # IDE .vscode .idea # Testing tests/ coverage/ **/*_test.go **/*.test.js # Build artifacts node_modules/ dist/ build/ target/ __pycache__/ # Environment .env .env.local *.log
Reduces build context size and prevents leaking secrets.
**Three approaches:**
1. **pip (simple)** → Single-stage, requirements.txt 2. **poetry (production)** → Multi-stage, virtual environment 3. **uv (fastest)** → 10-100x faster than pip
**Example: Poetry multi-stage**
FROM python:3.12-slim AS builder
RUN --mount=type=cache,target=/root/.cache/pip \
pip install poetry==1.7.1
COPY pyproject.toml poetry.lock ./
RUN poetry export -f requirements.txt --output requirementComprehensive UI/UX and Backend component design skills for AI-assisted development with Claude
Manage Linux systems covering systemd services, process management, filesystems, networking, performance tuning, and…
Data pipelines, feature stores, and embedding generation for AI/ML systems. Use when building RAG pipelines, ML feature serving,…
Strategic guidance for designing modern data platforms, covering storage paradigms (data lake, warehouse, lakehouse), modeling…
Design cloud network architectures with VPC patterns, subnet strategies, zero trust principles, and hybrid connectivity. Use when…
Design comprehensive security architectures using defense-in-depth, zero trust principles, threat modeling (STRIDE, PASTA), and…
Assembles component outputs from AI Design Components skills into unified, production-ready component systems with validated…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.