Marketplace

dockerfile-basics

Learn Dockerfile fundamentals and best practices for building production-ready container images

$ Installieren

git clone https://github.com/pluginagentmarketplace/custom-plugin-docker /tmp/custom-plugin-docker && cp -r /tmp/custom-plugin-docker/skills/dockerfile-basics ~/.claude/skills/custom-plugin-docker

// tip: Run this command in your terminal to install the skill


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

ParameterTypeRequiredDefaultDescription
base_imagestringNo-Base image to use
languagestringNo-Programming language (node/python/go/java)
optimizebooleanNotrueApply optimization recommendations

Core Instructions

Instruction Reference

InstructionPurposeExample
FROMBase imageFROM node:20-alpine
WORKDIRSet working directoryWORKDIR /app
COPYCopy filesCOPY package*.json ./
RUNExecute commandRUN npm ci
ENVSet environmentENV NODE_ENV=production
EXPOSEDocument portEXPOSE 3000
USERSet userUSER appuser
CMDDefault commandCMD ["node", "app.js"]
ENTRYPOINTFixed commandENTRYPOINT ["./start.sh"]
HEALTHCHECKHealth checkHEALTHCHECK 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

ErrorCauseSolution
COPY failed: file not foundFile outside contextCheck .dockerignore
returned non-zero code: 127Command not foundInstall package first
permission deniedRunning as non-rootUse 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

Troubleshooting

Debug Checklist

  • .dockerignore excludes unnecessary files?
  • Base image tag is specific (not :latest)?
  • Dependencies copied before source code?
  • Non-root user configured?
  • HEALTHCHECK defined?

Common Issues

SymptomCauseFix
Large image sizeNo multi-stageAdd build stage
Slow buildsPoor layer orderMove COPY after dependencies
Security warningsRoot userAdd USER instruction

Usage

Skill("dockerfile-basics")

Related Skills

  • docker-multi-stage
  • docker-optimization
  • docker-security