This Claude skill provides comprehensive guidance on mastering Dockerfile fundamentals and 2024-2025 best practices. It empowers developers to build secure, optimized, and production-ready container images by focusing on instruction ordering, layer optimization, multi-stage builds, and essential security configurations.
Use Cases
Scenario 1: Optimizing container image size and build speed by implementing multi-stage builds and efficient layer caching strategies.
Scenario 2: Strengthening application security by configuring non-root users and utilizing specific, versioned base image tags instead of 'latest'.
Scenario 3: Troubleshooting complex Docker build errors such as permission denials, missing files in the build context, or incorrect instruction syntax.
Scenario 4: Standardizing containerization workflows for various programming environments including Node.js, Python, Go, and Java using industry-standard templates.
name
dockerfile-basics
description
Learn Dockerfile fundamentals and best practices for building production-ready container images
sasmp_version
"1.3.0"
bonded_agent
01-docker-fundamentals
bond_type
PRIMARY_BOND
Dockerfile Basics Skill
Master Dockerfile fundamentals and 2024-2025 best practices for building secure, optimized container images.
Purpose
Provide comprehensive guidance on Dockerfile syntax, instruction ordering, layer optimization, and security best practices.
Parameters
Parameter
Type
Required
Default
Description
base_image
string
No
-
Base image to use
language
string
No
-
Programming language (node/python/go/java)
optimize
boolean
No
true
Apply optimization recommendations
Core Instructions
Instruction Reference
Instruction
Purpose
Example
FROM
Base image
FROM node:20-alpine
WORKDIR
Set working directory
WORKDIR /app
COPY
Copy files
COPY package*.json ./
RUN
Execute command
RUN npm ci
ENV
Set environment
ENV NODE_ENV=production
EXPOSE
Document port
EXPOSE 3000
USER
Set user
USER appuser
CMD
Default command
CMD ["node", "app.js"]
ENTRYPOINT
Fixed command
ENTRYPOINT ["./start.sh"]
HEALTHCHECK
Health check
HEALTHCHECK CMD curl -f http://localhost/
Layer Optimization Order
# 1. Base image (most stable)
FROM node:20-alpine
# 2. System dependencies
RUN apk add --no-cache curl
# 3. Create user (security)
RUN addgroup -g 1001 app && adduser -u 1001 -G app -D app
# 4. Set working directory
WORKDIR /app
# 5. Copy dependency files (cache layer)
COPY package*.json ./
# 6. Install dependencies
RUN npm ci --only=production
# 7. Copy application code (most volatile)
COPY --chown=app:app . .
# 8. Switch to non-root user
USER app
# 9. Health check
HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:3000/health || exit 1
# 10. Default command
CMD ["node", "server.js"]
Best Practices (2024-2025)
Security Essentials
# Always use specific version tags
FROM node:20.10-alpine # Good
# FROM node:latest # Bad
# Run as non-root user
USER nonroot
# Use multi-stage builds
FROM node:20 AS builder
# ... build steps ...
FROM node:20-alpine AS runtime
COPY --from=builder /app/dist ./
Optimization Techniques
# Combine RUN commands
RUN apt-get update && \
apt-get install -y --no-install-recommends curl && \
rm -rf /var/lib/apt/lists/*
# Use .dockerignore
# node_modules, .git, *.md, etc.
# Leverage BuildKit cache mounts
RUN --mount=type=cache,target=/root/.npm npm ci
Error Handling
Common Errors
Error
Cause
Solution
COPY failed: file not found
File outside context
Check .dockerignore
returned non-zero code: 127
Command not found
Install package first
permission denied
Running as non-root
Use COPY --chown
Validation Commands
# Lint Dockerfile
hadolint Dockerfile
# Build with no cache
docker build --no-cache -t app:test .
# Inspect layers
docker history app:test