スキル一覧に戻る

create-dockerfile

pjt222
更新日 2 days ago
6 閲覧
17
2
17
GitHubで表示
メタaidesign

について

このClaudeスキルは、Node.js、Python、Go、Rust、Javaアプリケーション向けの本番環境対応のDockerfileを生成します。ベースイメージ、依存関係、権限設定、デプロイのためのベストプラクティスを自動的に処理します。既存のDockerfileがない状態で新規プロジェクトをコンテナ化する場合や、クラウドデプロイ用にアプリケーションを準備する際にご利用ください。

クイックインストール

Claude Code

推奨
メイン
npx skills add pjt222/agent-almanac -a claude-code
プラグインコマンド代替
/plugin add https://github.com/pjt222/agent-almanac
Git クローン代替
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/create-dockerfile

このコマンドをClaude Codeにコピー&ペーストしてスキルをインストールします

ドキュメント

Create Dockerfile

Write production-ready Dockerfile for general-purpose application projects.

When Use

  • Containerizing Node.js, Python, Go, Rust, or Java app
  • Making consistent build/runtime environment
  • Preparing app for cloud deploy or Docker Compose
  • No existing Dockerfile in project

Inputs

  • Required: Project language and entry point (e.g., npm start, python app.py)
  • Required: Dependency manifest (package.json, requirements.txt, go.mod, Cargo.toml, pom.xml)
  • Optional: Target environment (development or production)
  • Optional: Exposed ports

Steps

Step 1: Choose Base Image

LanguageDev ImageProd ImageSize
Node.jsnode:22-bookwormnode:22-bookworm-slim~200MB
Pythonpython:3.12-bookwormpython:3.12-slim-bookworm~150MB
Gogolang:1.23-bookwormgcr.io/distroless/static~2MB
Rustrust:1.82-bookwormdebian:bookworm-slim~80MB
Javaeclipse-temurin:21-jdkeclipse-temurin:21-jre~200MB

Got: Pick slim/distroless variant for production images.

Step 2: Write Dockerfile (by language)

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 . finishes without errors.

If fail: Check base image availability and dependency install commands.

Step 3: ENTRYPOINT vs CMD

DirectivePurposeOverride
ENTRYPOINTFixed executableOverride with --entrypoint
CMDDefault argumentsOverride with trailing args
BothENTRYPOINT + default args via CMDArgs override CMD only

Use ENTRYPOINT for compiled binaries with single purpose. Use CMD for interpreted languages where might want docker run myapp bash.

Step 4: Create .dockerignore

.git
.gitignore
node_modules
__pycache__
*.pyc
target/
.env
.env.*
*.md
!README.md
.vscode
.idea
Dockerfile
docker-compose*.yml

Got: Build context drops dev artifacts.

Step 5: Add Non-Root User

Always run as non-root in production:

RUN groupadd -r appuser && useradd -r -g appuser -m appuser
USER appuser

For distroless images, use built-in nonroot user:

FROM gcr.io/distroless/static:nonroot
USER nonroot

Step 6: Build and Verify

docker build -t myapp:latest .
docker run --rm myapp:latest
docker image inspect myapp:latest --format '{{.Size}}'

Got: Container starts, responds on expected port, runs as non-root.

If fail: Check logs with docker logs. Verify WORKDIR, COPY paths, exposed ports.

Checks

  • docker build finishes without errors
  • Container starts and app responds
  • .dockerignore drops unneeded files
  • App runs as non-root user
  • Dependencies copied before source code (cache efficiency)
  • No secrets or .env files baked into image

Pitfalls

  • COPY before dependency install: Invalidates dependency cache on every code change. Always copy manifest file first.
  • Running as root: Default Docker user is root. Always add non-root user for production.
  • Missing .dockerignore: Sending node_modules or .git into build context wastes time and disk.
  • Using latest tag for base images: Pin to specific versions (e.g., node:22.11.0) for reproducibility.
  • Forgetting --no-cache-dir: Python pip caches packages by default, bloating image.
  • ADD vs COPY: Use COPY unless need URL download or tar extraction (ADD auto-extracts).

See Also

  • create-r-dockerfile - R-specific Dockerfile using rocker images
  • create-multistage-dockerfile - multi-stage patterns for minimal production images
  • optimize-docker-build-cache - advanced caching strategies
  • setup-compose-stack - orchestrate containerized app with other services

GitHub リポジトリ

pjt222/agent-almanac
パス: i18n/caveman/skills/create-dockerfile
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

関連スキル

content-collections

メタ

このスキルは、Content Collections(Markdown/MDXファイルを型安全なデータコレクションに変換するTypeScriptファーストのツール)の本番環境でテストされた設定を提供します。Zodバリデーションによる型安全性を実現し、ブログ、ドキュメントサイト、コンテンツ重視のVite + Reactアプリケーション構築時にご利用ください。Viteプラグインの設定、MDXコンパイルから、デプロイ最適化、スキーマバリデーションまで、すべてを網羅しています。

スキルを見る

polymarket

メタ

このスキルは、開発者がPolymarket予測市場プラットフォームを活用したアプリケーション構築を可能にします。API統合による取引や市場データの取得に加え、WebSocketを介したリアルタイムデータストリーミングにより、ライブ取引や市場活動を監視できます。取引戦略の実装や、ライブ市場更新を処理するツールの作成にご利用ください。

スキルを見る

creating-opencode-plugins

メタ

このスキルは、開発者がコマンド、ファイル、LSP操作など25種類以上のイベントタイプにフックするOpenCodeプラグインを作成することを支援します。JavaScript/TypeScriptモジュール向けに、プラグイン構造、イベントAPI仕様、および実装パターンを提供します。カスタムイベント駆動ロジックでOpenCode AIアシスタントのライフサイクルをインターセプト、監視、または拡張する必要がある場合にご利用ください。

スキルを見る

sglang

メタ

SGLangは、高性能なLLMサービングフレームワークであり、RadixAttentionプレフィックスキャッシュを活用したJSON、正規表現、エージェントワークフロー向けの高速で構造化された生成を特長とします。特にプレフィックスが繰り返されるタスクにおいて、大幅に高速な推論を実現し、複雑な構造化出力やマルチターン対話に最適です。制約付きデコードが必要な場合や、広範なプレフィックス共有を伴うアプリケーションを構築する場合は、vLLMなどの代替案ではなくSGLangを選択してください。

スキルを見る