administering-linux
Manage Linux systems covering systemd services, process management, filesystems, networking, performance tuning, and troubleshooting. Use when deploying…
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.
$ npx -y skills add ancoleman/ai-design-components --skill writing-dockerfiles --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/writing-dockerfilesContext preview
The summary Claude sees to decide when to auto-load this skill.
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.
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
Repo: ancoleman/ai-design-components
Manage Linux systems covering systemd services, process management, filesystems, networking, performance tuning, and troubleshooting. Use when deploying…
Data pipelines, feature stores, and embedding generation for AI/ML systems. Use when building RAG pipelines, ML feature serving, or data transformations.…
Strategic guidance for designing modern data platforms, covering storage paradigms (data lake, warehouse, lakehouse), modeling approaches (dimensional,…
Design cloud network architectures with VPC patterns, subnet strategies, zero trust principles, and hybrid connectivity. Use when planning VPC topology,…
Design comprehensive security architectures using defense-in-depth, zero trust principles, threat modeling (STRIDE, PASTA), and control frameworks (NIST CSF,…
Assembles component outputs from AI Design Components skills into unified, production-ready component systems with validated token integration, proper import…