MCP HubMCP Hub
Volver a habilidades

create-dockerfile

pjt222
Actualizado Yesterday
4 vistas
17
2
17
Ver en GitHub
Metageneral

Acerca de

Esta Skill de Claude crea Dockerfiles listos para producción para proyectos de Node.js, Python, Go, Rust y Java. Maneja la selección de imagen base, instalación de dependencias, permisos de usuario y configuración de patrones COPY, ENTRYPOINT/CMD y .dockerignore. Úsala al containerizar una aplicación por primera vez, al prepararla para despliegue en la nube, o si tu proyecto carece de un Dockerfile.

Instalación rápida

Claude Code

Recomendado
Principal
npx skills add pjt222/agent-almanac -a claude-code
Comando PluginAlternativo
/plugin add https://github.com/pjt222/agent-almanac
Git CloneAlternativo
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/create-dockerfile

Copia y pega este comando en Claude Code para instalar esta habilidad

Documentación


name: create-dockerfile description: > Node.js、Python、Go、Rust、Javaプロジェクト用の汎用Dockerfileを作成する。ベースイメージの選択、 依存関係のインストール、ユーザー権限、COPYパターン、ENTRYPOINT vs CMD、および.dockerignoreを カバーする。アプリケーションを初めてコンテナ化する場合、一貫したビルド/ランタイム環境の構築、 クラウドデプロイやDocker Compose向けアプリの準備、またはプロジェクトにDockerfileが存在しない 場合に使用する。 license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: containerization complexity: basic language: Docker tags: docker, dockerfile, node, python, go, rust, java, container locale: ja source_locale: en source_commit: 6f65f316 translator: claude-sonnet-4-6 translation_date: 2026-03-16

Dockerfileの作成

汎用アプリケーションプロジェクト用の本番対応Dockerfileを作成する。

使用タイミング

  • Node.js、Python、Go、Rust、またはJavaアプリケーションのコンテナ化
  • 一貫したビルド/ランタイム環境の構築
  • クラウドデプロイまたはDocker Compose向けアプリケーションの準備
  • プロジェクトにDockerfileが存在しない場合

入力

  • 必須: プロジェクト言語とエントリポイント(例: npm startpython app.py
  • 必須: 依存関係マニフェスト(package.json、requirements.txt、go.mod、Cargo.toml、pom.xml)
  • 任意: 対象環境(開発または本番)
  • 任意: 公開ポート

手順

ステップ1: ベースイメージの選択

言語開発イメージ本番イメージサイズ
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

期待結果: 本番イメージにはslim/distrolessバリアントを選択する。

ステップ2: 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 .がエラーなく完了する。

失敗時: ベースイメージの利用可能性と依存関係インストールコマンドを確認する。

ステップ3: ENTRYPOINT vs CMD

ディレクティブ用途オーバーライド
ENTRYPOINT固定の実行ファイル--entrypointでオーバーライド
CMDデフォルト引数末尾の引数でオーバーライド
両方ENTRYPOINT + CMDによるデフォルト引数引数はCMDのみオーバーライド

単一目的のコンパイル済みバイナリにはENTRYPOINTを使用する。docker run myapp bashの可能性があるインタープリタ言語にはCMDを使用する。

ステップ4: .dockerignoreの作成

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

期待結果: ビルドコンテキストが開発成果物を除外する。

ステップ5: 非rootユーザーの追加

本番環境では常に非rootで実行する:

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

distrolessイメージの場合、組み込みのnonrootユーザーを使用する:

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

ステップ6: ビルドと検証

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

期待結果: コンテナが起動し、期待されるポートで応答し、非rootとして実行される。

失敗時: docker logsでログを確認する。WORKDIR、COPYパス、公開ポートを確認する。

バリデーション

  • docker buildがエラーなく完了する
  • コンテナが起動しアプリケーションが応答する
  • .dockerignoreが不要なファイルを除外している
  • アプリケーションが非rootユーザーとして実行される
  • 依存関係がソースコードの前にコピーされている(キャッシュ効率)
  • シークレットや.envファイルがイメージに焼き込まれていない

よくある落とし穴

  • 依存関係インストール前のCOPY: コード変更のたびに依存関係キャッシュが無効化される。常にマニフェストファイルを先にコピーする
  • rootでの実行: デフォルトのDockerユーザーはroot。本番環境では常に非rootユーザーを追加する
  • .dockerignoreの不足: node_modules.gitをビルドコンテキストに送ると時間とディスクを浪費する
  • ベースイメージにlatestタグを使用: 再現性のため特定バージョン(例: node:22.11.0)に固定する
  • --no-cache-dirの忘れ: Pythonのpipはデフォルトでパッケージをキャッシュし、イメージを肥大化させる
  • ADD vs COPY: URLダウンロードやtar展開が不要な限りCOPYを使用する(ADDは自動展開する)

関連スキル

  • create-r-dockerfile - rockerイメージを使用するR固有のDockerfile
  • create-multistage-dockerfile - 最小限の本番イメージ用マルチステージパターン
  • optimize-docker-build-cache - 高度なキャッシュ戦略
  • setup-compose-stack - コンテナ化されたアプリを他のサービスとオーケストレーション

Repositorio GitHub

pjt222/agent-almanac
Ruta: i18n/ja/skills/create-dockerfile
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

Habilidades relacionadas

content-collections

Meta

Esta 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.

Ver habilidad

polymarket

Meta

Esta 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.

Ver habilidad

creating-opencode-plugins

Meta

Esta 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.

Ver habilidad

sglang

Meta

SGLang 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.

Ver habilidad