configure-dockerfile について
プロジェクト基準に沿って Dockerfile を確認・設定するスキルです。最小限のイメージ、非 root ユーザー、マルチステージビルドを重視し、チェックと修正に対応します。
主な機能
- 01プロジェクト種別と Dockerfile の検出
- 02イメージ・セキュリティ・ビルド基準の確認
- 03準拠状況のレポート
- 04チェックのみと自動修正に対応
- 05テンプレートから Dockerfile を作成
活用シーン
- 01Dockerfile の基準準拠を確認
- 02プロジェクト用 Dockerfile の作成
- 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 を検出する
- プロジェクトのルートで Dockerfile を検索します
- コンテキスト(package.json、pyproject.toml、go.mod、Cargo.toml)からプロジェクトの種類を検出します
- Dockerfile を解析し、現在の設定を分析します
- 指定されている場合は
--typeで上書きします
ステップ 2:最新のベースイメージのバージョンを確認する
古いベースイメージを指摘する前に、WebSearch または WebFetch を使って最新バージョンを確認します:
- Node.js Alpine:Docker Hub で最新の LTS Alpine タグを確認します
- Python slim:Docker Hub で最新の slim タグを確認します
- nginx Alpine:Docker Hub で最新の Alpine タグを確認します
- Go Alpine:Docker Hub で最新の Alpine タグを確認します
- 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.licenses | SPDX ライセンス識別子 | ない場合は WARN |
org.opencontainers.image.version | セマンティックバージョン(ARG 経由) | ない場合は INFO |
org.opencontainers.image.revision | Git コミット 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 フラグが設定されているか、ユーザーが確認した場合:
- Dockerfile がない場合:標準テンプレートから作成します(以下の標準テンプレートを参照)
- HEALTHCHECK がない場合:標準のヘルスチェックを追加します
- マルチステージビルドでない場合:構成の変更を提案します(手動での修正が必要です)
- ベースイメージが古い場合:FROM 行を更新します
- 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スキル - コンテナのベストプラクティス
コメント
Markdown 対応