mcpField
C
configure-dockerfile

configure-dockerfile

github.com/laurigatesクラウド・DevOps5963 回インストール1 日前に更新
リポジトリ

configure-dockerfile について

プロジェクト基準に沿って Dockerfile を確認・設定するスキルです。最小限のイメージ、非 root ユーザー、マルチステージビルドを重視し、チェックと修正に対応します。

主な機能

  1. 01プロジェクト種別と Dockerfile の検出
  2. 02イメージ・セキュリティ・ビルド基準の確認
  3. 03準拠状況のレポート
  4. 04チェックのみと自動修正に対応
  5. 05テンプレートから Dockerfile を作成

活用シーン

  1. 01Dockerfile の基準準拠を確認
  2. 02プロジェクト用 Dockerfile の作成
  3. 03マルチステージビルドと非 root ユーザーの確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/laurigates/claude-plugins --skill configure-dockerfile

インストール後、Claude Code で/configure-dockerfileを入力して読み込まれたか確認します。

詳細

/configure:dockerfile

Dockerfile をプロジェクトの標準に照らして確認・設定します。特に最小限のイメージ、非 root ユーザー、マルチステージビルドを重視します。

このスキルを使う場面

次の場合にこのスキルを使います…次の場合は別の方法を使います…
Dockerfile が標準に準拠しているか確認するDockerfile を見るだけの場合(Read ツールを使います)
テンプレートから Dockerfile を作成するDockerfile がすでにすべての標準に準拠している
イメージサイズ、セキュリティ、マルチステージビルドを検証するコンテナーの実行時設定が必要な場合(/configure:container を使います)
最小限の Alpine/slim ベースのイメージを設定するプロジェクトで特殊なベースイメージを使っている(独自の要件がある)
非 root ユーザーの設定を確認するコンテナーの問題をデバッグする場合(ログを確認し、実行時の状態を調査します)

コンテキスト

  • Dockerfile:!find . -maxdepth 1 \( -name 'Dockerfile' -o -name 'Dockerfile.*' -o -name '*.Dockerfile' \)
  • Dockerignore:!find . -maxdepth 1 -name \'.dockerignore\'
  • プロジェクトの種類:!find . -maxdepth 1 \( -name 'package.json' -o -name 'pyproject.toml' -o -name 'Cargo.toml' -o -name 'go.mod' \) -print -quit
  • ベースイメージ:!find . -maxdepth 1 \( -name 'Dockerfile' -o -name 'Dockerfile.*' -o -name '*.Dockerfile' \) -exec grep -hm5 '^FROM' {} +

パラメーター

コマンド引数から解析します:

  • --check-only:変更を加えずに準拠状況を報告します
  • --fix:確認を求めずに修正を自動適用します
  • --type <type>:プロジェクトの種類の検出結果を上書きします(frontend、python、go、rust)

実行

この Dockerfile 準拠チェックを実行します:

ステップ 1:プロジェクトの種類と Dockerfile を検出する
  1. プロジェクトのルートで Dockerfile を検索します
  2. コンテキスト(package.json、pyproject.toml、go.mod、Cargo.toml)からプロジェクトの種類を検出します
  3. Dockerfile を解析し、現在の設定を分析します
  4. 指定されている場合は --type で上書きします
ステップ 2:最新のベースイメージのバージョンを確認する

古いベースイメージを指摘する前に、WebSearch または WebFetch を使って最新バージョンを確認します:

  1. Node.js Alpine:Docker Hub で最新の LTS Alpine タグを確認します
  2. Python slim:Docker Hub で最新の slim タグを確認します
  3. nginx Alpine:Docker Hub で最新の Alpine タグを確認します
  4. Go Alpine:Docker Hub で最新の Alpine タグを確認します
  5. Rust Alpine:Docker Hub で最新の Alpine タグを確認します
ステップ 3:準拠状況を分析する

次の標準に照らして Dockerfile を確認します:

フロントエンド(Node.js)の標準:

確認項目標準重大度
ビルド用ベースイメージnode:24-alpine(LTS)それ以外の場合は WARN
実行用ベースイメージnginx:1.30-alpineそれ以外の場合は WARN
マルチステージ必須ない場合は FAIL
HEALTHCHECK必須ない場合は FAIL
非 root ユーザー必須ない場合は FAIL
ビルドキャッシュ--mount=type=cache を推奨INFO
OCI ラベルGHCR との統合に必須ない場合は WARN

Python サービスの標準:

確認項目標準重大度
ベースイメージpython:3.14-slimそれ以外の場合は WARN
マルチステージ本番環境では必須ない場合は FAIL
HEALTHCHECK必須ない場合は FAIL
非 root ユーザー必須ない場合は FAIL
OCI ラベルGHCR との統合に必須ない場合は WARN

OCI コンテナーラベル:

ラベル用途重大度
org.opencontainers.image.sourceリポジトリへのリンクない場合は WARN
org.opencontainers.image.descriptionパッケージの説明ない場合は WARN
org.opencontainers.image.licensesSPDX ライセンス識別子ない場合は WARN
org.opencontainers.image.versionセマンティックバージョン(ARG 経由)ない場合は INFO
org.opencontainers.image.revisionGit コミット SHA(ARG 経由)ない場合は INFO
ステップ 4:結果を報告する

準拠レポートを出力します:

Dockerfile Compliance Report
================================
Project Type: <type> (detected)
Dockerfile: ./Dockerfile (found)

Configuration Checks:
  Build base      <image>           [PASS|WARN]
  Runtime base    <image>           [PASS|WARN]
  Multi-stage     <N> stages        [PASS|FAIL]
  HEALTHCHECK     <present|missing> [PASS|FAIL]
  Non-root user   <present|missing> [PASS|FAIL]
  Build caching   <enabled|missing> [PASS|INFO]

OCI Labels Checks:
  image.source       <present|missing> [PASS|WARN]
  image.description  <present|missing> [PASS|WARN]
  image.licenses     <present|missing> [PASS|WARN]

Recommendations:
  <list specific fixes needed>

--check-only が指定されている場合は、ここで終了します。

ステップ 5:修正を適用する(要求された場合)

--fix フラグが設定されているか、ユーザーが確認した場合:

  1. Dockerfile がない場合:標準テンプレートから作成します(以下の標準テンプレートを参照)
  2. HEALTHCHECK がない場合:標準のヘルスチェックを追加します
  3. マルチステージビルドでない場合:構成の変更を提案します(手動での修正が必要です)
  4. ベースイメージが古い場合:FROM 行を更新します
  5. OCI ラベルがない場合:LABEL 命令を追加します
ステップ 6:標準の追跡を更新する

.project-standards.yaml を更新します:

components:
  dockerfile: "2025.1"

標準テンプレート

フロントエンド(Node/Vite/nginx)
FROM node:24-alpine AS build

ARG SENTRY_AUTH_TOKEN
ARG VITE_SENTRY_DSN

WORKDIR /app

COPY package*.json ./
RUN --mount=type=cache,target=/root/.npm npm ci

COPY . .
RUN --mount=type=cache,target=/root/.npm \
    --mount=type=cache,target=/app/node_modules/.vite \
    npm run build

FROM nginx:1.30-alpine

# OCI labels for GHCR integration
LABEL org.opencontainers.image.source="https://github.com/OWNER/REPO" \
      org.opencontainers.image.description="Production frontend application" \
      org.opencontainers.image.licenses="MIT" \
      org.opencontainers.image.vendor="Your Organization"

# Dynamic labels via build args
ARG VERSION=dev
ARG BUILD_DATE
ARG VCS_REF
LABEL org.opencontainers.image.version="${VERSION}" \
      org.opencontainers.image.created="${BUILD_DATE}" \
      org.opencontainers.image.revision="${VCS_REF}"

COPY --from=build /app/dist /usr/share/nginx/html
COPY nginx/default.conf.template /etc/nginx/templates/

EXPOSE 80

HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD wget --no-verbose --tries=1 --spider http://localhost/health || exit 1
Python サービス
FROM python:3.14-slim AS builder

WORKDIR /app
COPY pyproject.toml uv.lock ./
RUN pip install uv && uv sync --frozen --no-dev

FROM python:3.14-slim

# OCI labels for GHCR integration
LABEL org.opencontainers.image.source="https://github.com/OWNER/REPO" \
      org.opencontainers.image.description="Production Python API server" \
      org.opencontainers.image.licenses="MIT" \
      org.opencontainers.image.vendor="Your Organization"

ARG VERSION=dev
ARG BUILD_DATE
ARG VCS_REF
LABEL org.opencontainers.image.version="${VERSION}" \
      org.opencontainers.image.created="${BUILD_DATE}" \
      org.opencontainers.image.revision="${VCS_REF}"

RUN useradd --create-home appuser
USER appuser
WORKDIR /app

COPY --from=builder /app/.venv /app/.venv
COPY --chown=appuser:appuser . .

ENV PATH="/app/.venv/bin:$PATH"
EXPOSE 8000

HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
  CMD curl -f http://localhost:8000/health || exit 1

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

エージェント向けの最適化

コンテキストコマンド
Dockerfile が存在するか確認するfind . -maxdepth 1 \( -name 'Dockerfile' -o -name 'Dockerfile.*' \) 2>/dev/null
マルチステージビルドを検証するgrep -c '^FROM' Dockerfile 2>/dev/null
非 root ユーザーか確認するgrep -E '^USER [^root]' Dockerfile 2>/dev/null
ベースイメージを確認するgrep '^FROM' Dockerfile | head -1
コンプライアンスをすばやく確認する/configure:dockerfile --check-only
問題を自動修正する/configure:dockerfile --fix

フラグ

フラグ説明
--check-only修正を提示せずにステータスを報告します
--fix修正を自動的に適用します
--type <type>プロジェクトの種類を上書きします(frontend、python)

注意事項

  • Node 24 は現在の Active LTS です(Node 22 はメンテナンス中です)
  • debian バリアントより nginx:1.30-alpine を推奨します
  • Kubernetes の liveness probe には HEALTHCHECK が不可欠です
  • ビルドキャッシュにより CI/CD の速度が大幅に向上します
  • 本番環境のコンテナでは非 root ユーザーが必須です

関連項目

  • /configure:container - コンテナインフラストラクチャ全般
  • /configure:skaffold - Kubernetes 開発設定
  • /configure:all - すべてのコンプライアンスチェックを実行します
  • container-development スキル - コンテナのベストプラクティス

コメント