create-dockerfile
Acerca de
Esta Skill de Claude genera Dockerfiles listos para producción para aplicaciones en Node.js, Python, Go, Rust y Java. Maneja aspectos fundamentales como imágenes base, dependencias, permisos y configuración del punto de entrada. Úsela al iniciar la contenedorización de un proyecto o al preparar una aplicación para despliegue en la nube cuando no exista un Dockerfile.
Instalación rápida
Claude Code
Recomendadonpx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/create-dockerfileCopia y pega este comando en Claude Code para instalar esta habilidad
Documentación
Create Dockerfile
Prod-ready Dockerfile for general-purpose apps.
Use When
- Containerize Node/Python/Go/Rust/Java app
- Consistent build/runtime env
- Cloud deploy / Docker Compose prep
- No existing Dockerfile
In
- Required: Lang + entry (
npm start,python app.py) - Required: Dep manifest (package.json, requirements.txt, go.mod, Cargo.toml, pom.xml)
- Optional: Target env (dev/prod)
- Optional: Exposed ports
Do
Step 1: Base Image
| Lang | Dev Img | Prod Img | Size |
|---|---|---|---|
| Node.js | node:22-bookworm | node:22-bookworm-slim | ~200MB |
| Python | python:3.12-bookworm | python:3.12-slim-bookworm | ~150MB |
| Go | golang:1.23-bookworm | gcr.io/distroless/static | ~2MB |
| Rust | rust:1.82-bookworm | debian:bookworm-slim | ~80MB |
| Java | eclipse-temurin:21-jdk | eclipse-temurin:21-jre | ~200MB |
Got: Slim/distroless for prod.
Step 2: Write Dockerfile (per lang)
Node.js
FROM node:22-bookworm-slim
RUN groupadd -r appuser && useradd -r -g appuser -m appuser
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev
COPY . .
USER appuser
EXPOSE 3000
CMD ["node", "src/index.js"]
Python
FROM python:3.12-slim-bookworm
RUN groupadd -r appuser && useradd -r -g appuser -m appuser
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
USER appuser
EXPOSE 8000
CMD ["python", "app.py"]
Go
FROM golang:1.23-bookworm AS builder
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /app/server ./cmd/server
FROM gcr.io/distroless/static
COPY --from=builder /app/server /server
EXPOSE 8080
ENTRYPOINT ["/server"]
Rust
FROM rust:1.82-bookworm AS builder
WORKDIR /src
COPY Cargo.toml Cargo.lock ./
RUN mkdir src && echo "fn main() {}" > src/main.rs && cargo build --release && rm -rf src
COPY . .
RUN touch src/main.rs && cargo build --release
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
COPY --from=builder /src/target/release/myapp /usr/local/bin/myapp
EXPOSE 8080
ENTRYPOINT ["myapp"]
Java (Maven)
FROM eclipse-temurin:21-jdk AS builder
WORKDIR /src
COPY pom.xml .
RUN mvn dependency:go-offline -B
COPY src ./src
RUN mvn package -DskipTests
FROM eclipse-temurin:21-jre
COPY --from=builder /src/target/*.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
Got: docker build -t myapp . → no err.
If err: Check base img avail + dep install cmds.
Step 3: ENTRYPOINT vs CMD
| Directive | Purpose | Override |
|---|---|---|
ENTRYPOINT | Fixed exec | --entrypoint |
CMD | Default args | Trailing args |
| Both | ENTRYPOINT + def args via CMD | Args override CMD only |
ENTRYPOINT → compiled single-purpose. CMD → interpreted (want docker run myapp bash).
Step 4: .dockerignore
.git
.gitignore
node_modules
__pycache__
*.pyc
target/
.env
.env.*
*.md
!README.md
.vscode
.idea
Dockerfile
docker-compose*.yml
Got: Build ctx no dev artifacts.
Step 5: Non-Root User
Always non-root prod:
RUN groupadd -r appuser && useradd -r -g appuser -m appuser
USER appuser
Distroless:
FROM gcr.io/distroless/static:nonroot
USER nonroot
Step 6: Build + Verify
docker build -t myapp:latest .
docker run --rm myapp:latest
docker image inspect myapp:latest --format '{{.Size}}'
Got: Container starts, port responds, non-root.
If err: docker logs. Check WORKDIR, COPY paths, ports.
Check
-
docker buildno err - Container starts + responds
-
.dockerignoreexcludes junk - App non-root
- Deps copied before src (cache)
- No secrets /
.envin img
Traps
- COPY before dep install: Invalidates cache on code change. Manifest first.
- Root user: Def Docker = root. Add non-root prod.
- No .dockerignore:
node_modules/.gitin ctx → waste. latesttag: Pin ver (node:22.11.0) → repro.- No
--no-cache-dir: pip caches → img bloat. - ADD vs COPY:
COPYunless URL / tar (ADDauto-extracts).
→
create-r-dockerfile— R-specific via rockercreate-multistage-dockerfile— multi-stage min prod imgsoptimize-docker-build-cache— cache strategiessetup-compose-stack— orchestrate w/ other svcs
Repositorio GitHub
Habilidades relacionadas
content-collections
MetaEsta habilidad proporciona una configuración probada en producción para Content Collections, una herramienta centrada en TypeScript que transforma archivos Markdown/MDX en colecciones de datos con tipado seguro mediante validación Zod. Úsala al construir blogs, sitios de documentación o aplicaciones Vite + React con mucho contenido para garantizar seguridad de tipos y validación automática de contenido. Abarca todo, desde la configuración del plugin de Vite y compilación MDX hasta la optimización de despliegue y validación de esquemas.
polymarket
MetaEsta habilidad permite a los desarrolladores crear aplicaciones con la plataforma de mercados de predicción Polymarket, incluyendo la integración de API para operaciones y datos de mercado. También proporciona transmisión de datos en tiempo real a través de WebSocket para monitorear operaciones en vivo y actividad del mercado. Úsela para implementar estrategias de trading o crear herramientas que procesen actualizaciones de mercado en tiempo real.
creating-opencode-plugins
MetaEsta habilidad ayuda a los desarrolladores a crear complementos de OpenCode que se conectan a más de 25 tipos de eventos, como comandos, archivos y operaciones LSP. Proporciona la estructura del complemento, las especificaciones de la API de eventos y los patrones de implementación para módulos en JavaScript/TypeScript. Úsala cuando necesites interceptar, monitorear o extender el ciclo de vida del asistente de IA de OpenCode con lógica personalizada basada en eventos.
sglang
MetaSGLang es un framework de alto rendimiento para el servicio de LLM que se especializa en generación rápida y estructurada para JSON, expresiones regulares y flujos de trabajo de agentes utilizando su caché de prefijos RadixAttention. Ofrece una inferencia significativamente más rápida, especialmente para tareas con prefijos repetidos, lo que lo hace ideal para salidas complejas y estructuradas, y conversaciones multiturno. Elige SGLang sobre alternativas como vLLM cuando necesites decodificación restringida o estés construyendo aplicaciones con uso extensivo de prefijos compartidos.
