create-multistage-dockerfile
О программе
Этот навык создает оптимизированные многоэтапные Dockerfile, которые разделяют зависимости сборки от производственных образов для получения более компактных и безопасных контейнеров. Он предоставляет языко-специфичные шаблоны для Go, Rust, Java, Node.js и Python, включая компиляцию артефактов, тестирование и финальную упаковку. Используйте его, когда ваши производственные Docker-образы слишком велики или вам необходимо изолировать инструменты сборки от финальной среды выполнения.
Быстрая установка
Claude Code
Рекомендуетсяnpx 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-multistage-dockerfileСкопируйте и вставьте эту команду в Claude Code для установки этого навыка
Документация
name: create-multistage-dockerfile locale: es source_locale: en source_commit: 6f65f316 translator: claude-sonnet-4-6 translation_date: 2026-03-16 description: > Crear Dockerfiles multi-etapa que separan las dependencias de compilación de la imagen de producción para obtener imágenes más pequeñas, seguras y eficientes. Cubrir patrones para Go, Rust, Java, Node.js y Python con compilación de artefactos, prueba, y empaquetado final. license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: containerization complexity: intermediate language: multi tags: docker, multi-stage, build, optimization, security
Crear Dockerfile Multi-Etapa
Crear Dockerfiles multi-etapa para separar compilación de producción y obtener imágenes mínimas.
Cuándo Usar
- Las imágenes Docker de producción son demasiado grandes
- Necesitando separar herramientas de compilación de la imagen final
- Compilando binarios estáticos (Go, Rust) para imágenes minimales
- Ejecutando pruebas en la compilación sin incluirlas en producción
- Reduciendo la superficie de ataque eliminando herramientas innecesarias
Entradas
- Requerido: Código fuente de la aplicación
- Requerido: Proceso de compilación del proyecto
- Opcional: Suite de pruebas para ejecutar durante la compilación
- Opcional: Requisitos de imagen base para producción
Procedimiento
Paso 1: Diseñar las Etapas de Compilación
Identificar las etapas necesarias según el lenguaje.
# Patrón general de 3 etapas
# Etapa 1: Dependencias
# Etapa 2: Compilación
# Etapa 3: Producción (imagen final)
Esperado: Separación clara entre etapas de compilación y producción.
En caso de fallo: Comenzar con 2 etapas (compilación + producción) y agregar más si es necesario.
Paso 2: Implementar para Lenguajes Compilados (Go)
# Etapa de compilación
FROM golang:1.21-alpine AS builder
RUN apk add --no-cache git ca-certificates
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o /server .
# Etapa de producción
FROM scratch
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /server /server
ENTRYPOINT ["/server"]
Para Rust:
FROM rust:1.74-alpine AS builder
WORKDIR /app
COPY Cargo.toml Cargo.lock ./
RUN mkdir src && echo "fn main() {}" > src/main.rs
RUN cargo build --release
COPY src ./src
RUN cargo build --release
FROM alpine:3.18
COPY --from=builder /app/target/release/myapp /usr/local/bin/myapp
CMD ["myapp"]
Esperado: La imagen final contiene solo el binario y dependencias mínimas de runtime.
En caso de fallo: Verificar que el binario es estáticamente enlazado (para scratch), incluir certificados SSL si se necesita HTTPS.
Paso 3: Implementar para Lenguajes Interpretados (Node.js)
# Etapa de dependencias
FROM node:20-alpine AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --production
# Etapa de compilación
FROM node:20-alpine AS builder
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
# Etapa de producción
FROM node:20-alpine
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
COPY package.json .
USER appuser
EXPOSE 3000
CMD ["node", "dist/index.js"]
Esperado: La imagen final no contiene devDependencies, archivos fuente ni herramientas de compilación.
En caso de fallo: Verificar que todos los archivos necesarios se copian desde las etapas correctas, probar la imagen final con todas las funcionalidades.
Paso 4: Agregar Etapa de Pruebas
FROM node:20-alpine AS builder
WORKDIR /app
COPY . .
RUN npm ci
RUN npm run build
# Etapa de pruebas (no produce imagen, pero falla la compilación si las pruebas fallan)
FROM builder AS tester
RUN npm test
# Etapa de producción (solo se alcanza si las pruebas pasan)
FROM node:20-alpine
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/index.js"]
# Compilar hasta la etapa de pruebas
docker build --target tester -t mi-app:test .
# Compilar imagen de producción (ejecuta pruebas automáticamente)
docker build -t mi-app:latest .
Esperado: Las pruebas se ejecutan durante la compilación, la imagen de producción solo se crea si las pruebas pasan.
En caso de fallo: Usar --target para compilar etapas individuales y depurar problemas.
Validación
- La imagen final es significativamente más pequeña que una compilación de una sola etapa
- No se incluyen herramientas de compilación en la imagen de producción
- Las pruebas se ejecutan durante la compilación
- La aplicación funciona correctamente en la imagen final
- Las capas de caché funcionan eficientemente entre etapas
Errores Comunes
- Copiar demasiado en la etapa final: Solo copiar artefactos necesarios con
COPY --from=. - No separar dependencias de compilación: Las devDependencies no deben estar en la imagen final.
- Olvidar certificados SSL: Las imágenes
scratchno tienen certificados; copiarlos explícitamente. - Caché de dependencias ineficiente: Copiar archivos de bloqueo antes del código fuente en cada etapa.
- No nombrar las etapas: Usar
AS nombrepara referencia clara en lugar de índices numéricos.
Habilidades Relacionadas
create-dockerfile- Patrones base de Dockerfileoptimize-docker-build-cache- Estrategias avanzadas de cachécreate-r-dockerfile- Dockerfiles específicos para R
GitHub репозиторий
Frequently asked questions
What is the create-multistage-dockerfile skill?
create-multistage-dockerfile is a Claude Skill by pjt222. Skills package instructions and resources that Claude loads on demand, so Claude can perform create-multistage-dockerfile-related tasks without extra prompting.
How do I install create-multistage-dockerfile?
Use the install commands on this page: add create-multistage-dockerfile to Claude Code as a plugin, or clone its repository into your skills directory, then restart Claude so it picks up the skill.
What category does create-multistage-dockerfile belong to?
create-multistage-dockerfile is in the Meta category, tagged general.
Is create-multistage-dockerfile free to use?
Yes. create-multistage-dockerfile is listed on AIMCP and free to install. It runs inside Claude, so no separate service account is required to use the skill itself.
Похожие навыки
Этот навык предоставляет проверенную в продакшене настройку для Content Collections — TypeScript-ориентированного инструмента, который преобразует файлы Markdown/MDX в типобезопасные коллекции данных с валидацией Zod. Используйте его при создании блогов, сайтов документации или контентных приложений на Vite + React для обеспечения типобезопасности и автоматической проверки содержимого. Он охватывает всё: от настройки плагина Vite и компиляции MDX до оптимизации развертывания и валидации схем.
Этот навык позволяет разработчикам создавать приложения на платформе прогнозных рынков Polymarket, включая интеграцию с API для торговли и получения рыночных данных. Он также обеспечивает потоковую передачу данных в реальном времени через WebSocket для отслеживания текущих сделок и рыночной активности. Используйте его для реализации торговых стратегий или создания инструментов, обрабатывающих обновления рынка в реальном времени.
Этот навык помогает разработчикам создавать плагины OpenCode, которые подключаются к более чем 25 типам событий, таким как команды, файлы и операции LSP. Он предоставляет структуру плагина, спецификации API событий и шаблоны реализации для модулей на JavaScript/TypeScript. Используйте его, когда вам нужно перехватывать, отслеживать или расширять жизненный цикл ассистента OpenCode AI с помощью пользовательской событийно-ориентированной логики.
SGLang — это высокопроизводительный фреймворк для обслуживания больших языковых моделей (LLM), специализирующийся на быстрой структурированной генерации JSON, regex и рабочих процессов агентов с использованием кэширования префиксов RadixAttention. Он обеспечивает значительно более высокую скорость вывода, особенно для задач с повторяющимися префиксами, что делает его идеальным для сложных структурированных результатов и многократных диалогов. Выбирайте SGLang вместо альтернатив, таких как vLLM, когда вам требуется ограниченное декодирование или вы создаете приложения с интенсивным совместным использованием префиксов.
