create-dockerfile
Acerca de
Esta Skill de Claude crea 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 el archivo .dockerignore. Úsela al containerizar un proyecto por primera vez o al preparar una aplicación para un despliegue consistente en entornos de nube o Docker Compose.
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
建 Dockerfile
為通用應用建可產之 Dockerfile。
用時
- 將 Node.js、Python、Go、Rust、Java 應用入容器
- 建一致之建/運境
- 備應用為雲布或 Docker Compose
- 項目無現 Dockerfile
入
- 必要:項目語與入點(如
npm start、python app.py) - 必要:依清單(package.json、requirements.txt、go.mod、Cargo.toml、pom.xml)
- 可選:目標境(開發或生產)
- 可選:暴露之埠
法
第一步:擇基像
| 語 | 開發像 | 產像 | 尺 |
|---|---|---|---|
| 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 |
得: 為產像擇 slim/distroless 變。
第二步:書 Dockerfile(按語)
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"]
得: docker build -t myapp . 無訛而畢。
敗則: 察基像之可得與依裝命令。
第三步:ENTRYPOINT 對 CMD
| 指令 | 用 | 覆蓋 |
|---|---|---|
ENTRYPOINT | 定執 | 以 --entrypoint 覆 |
CMD | 默參 | 以尾參覆 |
| 二者 | ENTRYPOINT + CMD 之默參 | 參唯覆 CMD |
ENTRYPOINT 用於有單一志之編譯二進。CMD 用於解釋語,或欲 docker run myapp bash 者。
第四步:建 .dockerignore
.git
.gitignore
node_modules
__pycache__
*.pyc
target/
.env
.env.*
*.md
!README.md
.vscode
.idea
Dockerfile
docker-compose*.yml
得: 建脈排開發之物。
第五步:增非根用者
產境宜以非根運:
RUN groupadd -r appuser && useradd -r -g appuser -m appuser
USER appuser
distroless 像用內置之 nonroot:
FROM gcr.io/distroless/static:nonroot
USER nonroot
第六步:建而驗
docker build -t myapp:latest .
docker run --rm myapp:latest
docker image inspect myapp:latest --format '{{.Size}}'
得: 容器起,於期埠應,以非根運。
敗則: 以 docker logs 察誌。驗 WORKDIR、COPY 路、暴露之埠。
驗
-
docker build無訛而畢 - 容器起而應用應
-
.dockerignore排無謂之文件 - 應用以非根運
- 依先於源碼複(緩存有效)
- 無密或
.env烤入像
陷
- 依裝前 COPY:每改碼則廢依緩。宜先複清單文件。
- 以根運:Docker 默為根。產境宜增非根用者。
- 缺 .dockerignore:將
node_modules或.git送入建脈費時費盤。 - 基像用
latest:宜釘特版(如node:22.11.0)以重現。 - 忘
--no-cache-dir:Pythonpip默緩存包,脹像。 - ADD 對 COPY:除非需 URL 下載或 tar 解壓(
ADD自解),宜用COPY。
參
create-r-dockerfile— R 專用 Dockerfile,用 rocker 像create-multistage-dockerfile— 多階段之法以最小產像optimize-docker-build-cache— 進階緩之策setup-compose-stack— 以他服協已容器化之應
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.
