configure-container について
プロジェクト標準に沿ってコンテナ基盤を監査・設定するスキルです。Dockerfile、ビルドワークフロー、スキャン、安全対策を確認し、チェックのみの実行と自動修正に対応します。
主な機能
- 01Dockerfile とビルドワークフローの確認
- 02マルチステージビルドと非 root ユーザーの確認
- 03イメージラベルと .dockerignore の確認
- 04Trivy または Grype スキャンの設定
- 05マルチプラットフォームビルドとキャッシュの確認
- 06チェック実行と自動修正
活用シーン
- 01コンテナ基盤の準拠状況の監査
- 02コンテナビルドパイプラインの確認
- 03CI への脆弱性スキャン追加
- 04コンテナ設定の問題修正
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ laurigates/ claude-plugins --skill configure-containerインストール後、Claude Code で/configure-containerを入力して読み込まれたか確認します。
同梱ファイルREFERENCE.md
詳細
/configure:container
プロジェクトの基準への包括的なコンテナインフラストラクチャの準拠状況を確認し、設定します。最小限のイメージ、非 root ユーザー、セキュリティ強化を重視します。
このスキルを使用する場面
| 次の場合にこのスキルを使用します… | 次の場合は別の方法を使用します… |
|---|---|
| コンテナインフラストラクチャの準拠状況を監査する(Dockerfile、ワークフロー、スキャン) | Dockerfile をゼロから作成する(/configure:dockerfile) |
| マルチステージビルド、非 root ユーザー、セキュリティ強化を確認する | Kubernetes デプロイを設定する(/configure:skaffold) |
| GHCR とマルチプラットフォーム対応を備えたコンテナビルドワークフローを設定する | ビルド済みイメージの脆弱性スキャンを実行する(Trivy CLI を直接使用) |
.dockerignore、OCI ラベル、ベースイメージのバージョンを確認する | VS Code の devcontainer 機能を設定する |
| CI パイプラインに Trivy/Grype スキャンを追加する | コンテナのランタイムの問題をデバッグする(system-debugging エージェント) |
コンテキスト
- Dockerfile: !
find . -maxdepth 2 \( -name 'Dockerfile' -o -name 'Dockerfile.*' -o -name '*.Dockerfile' \) - Docker の ignore ファイル: !
find . -maxdepth 1 -name '.dockerignore' - コンテナのワークフロー: !
find .github/workflows -maxdepth 1 \( -name '*container*' -o -name '*docker*' -o -name '*build*' \) - Devcontainer: !
find .devcontainer -maxdepth 1 -name 'devcontainer.json' - Skaffold: !
find . -maxdepth 1 -name 'skaffold.yaml' - パッケージファイル: !
find . -maxdepth 1 \( -name 'package.json' -o -name 'pyproject.toml' -o -name 'Cargo.toml' -o -name 'go.mod' \) - プロジェクト基準: !
find . -maxdepth 1 -name '.project-standards.yaml'
パラメーター
コマンド引数から解析します。
--check-only: 変更を加えずに準拠状況を報告します(CI/CD モード)--fix: 確認を求めずに修正を自動適用します--component <name>: 指定したコンポーネントのみを確認します(dockerfile、workflow、registry、scanning、devcontainer)
セキュリティの理念
攻撃対象領域を最小化する:イメージが小さいほど、脆弱性が少なくなります。Node.js には Alpine(約 5 MB)、Python には slim(約 50 MB)を使用します。
デフォルトで非 root:すべてのコンテナは、必ず非 root ユーザーとして実行します。
マルチステージ必須:ビルド環境とランタイム環境を分離します。ビルドツールと開発用依存関係を本番イメージに含めてはいけません。
実行
このコンテナインフラストラクチャ準拠チェックを実行します。
Step 1: コンテナ関連ファイルを検出する
Dockerfile、ワークフローファイル、devcontainer 設定、.dockerignore を検索します。パッケージファイルからプロジェクトの種類(frontend、python、go、rust、infrastructure)を検出します。
Step 2: 最新のベースイメージバージョンを調べる
古いイメージを指摘する前に、WebSearch または WebFetch を使用して現在のバージョンを確認します。
- Node.js Alpine イメージ:Docker Hub で最新の LTS Alpine タグを確認します
- Python slim イメージ:Docker Hub で最新の slim タグを確認します
- nginx Alpine:Docker Hub で最新の Alpine タグを確認します
- GitHub Actions:リリースページで最新のアクションバージョンを確認します
- Trivy:aquasecurity/trivy-action のリリースを確認します
ステップ 3:各コンポーネントを分析する
各コンポーネントが基準を満たしているか確認します。
Dockerfile の基準:
| 確認項目 | 基準 | 重大度 |
|---|---|---|
| 存在 | コンテナ化されたプロジェクトでは必須 | 見つからない場合は FAIL |
| マルチステージ | 必須(ビルドステージ+ランタイムステージ) | 見つからない場合は FAIL |
| HEALTHCHECK | K8s のプローブで必須 | 見つからない場合は FAIL |
| root 以外のユーザー | 必須(任意ではありません) | 見つからない場合は FAIL |
| .dockerignore | 必須 | 見つからない場合は WARN |
.dockerignore Dockerfile* | glob を使用して、すべての Dockerfile バリアントをコンテキストから除外する | Dockerfile のみの場合は WARN |
| ベースイメージのバージョン | 最新の安定版(Docker Hub で確認) | 古い場合は WARN |
| 最小限のベースイメージ | Node では Alpine、Python では slim | 肥大化している場合は WARN |
ベースイメージの基準(報告前に最新のものを確認):
| 言語 | ビルドイメージ | ランタイムイメージ | サイズ目標 |
|---|---|---|---|
| Node.js | node:24-alpine(LTS) | nginx:1.27-alpine | < 50MB |
| Python | python:3.13-slim | python:3.13-slim | < 150MB |
| Go | golang:1.23-alpine | scratch または alpine:3.21 | < 20MB |
| Rust | rust:1.84-alpine | alpine:3.21 | < 20MB |
セキュリティ強化の基準:
| 確認項目 | 基準 | 重大度 |
|---|---|---|
| root 以外の USER | 必須(専用ユーザーを作成) | 見つからない場合は FAIL |
| 読み取り専用 FS | --read-only または RO アノテーション | 見つからない場合は INFO |
| 新しい権限を付与しない | --security-opt=no-new-privileges | 見つからない場合は INFO |
| ケイパビリティを削除 | --cap-drop=all +明示的な --cap-add | 見つからない場合は INFO |
| イメージにシークレットを含めない | 機密データを含む ENV がない | 見つかった場合は FAIL |
ビルドワークフローの基準:
| 確認項目 | 基準 | 重大度 |
|---|---|---|
| ワークフローの存在 | container-build.yml など | 見つからない場合は FAIL |
| checkout アクション | v4 以降 | 古い場合は WARN |
| build-push-action | v6 以降 | 古い場合は WARN |
| マルチプラットフォーム | linux/amd64,linux/arm64 | 見つからない場合は WARN |
| ビルドキャッシュ | GHA キャッシュが有効 | 見つからない場合は WARN |
| セキュリティスキャン | ワークフロー内の Trivy/Grype | 見つからない場合は WARN |
id-token: write | provenance/SBOM を設定する場合に必須 | 見つからない場合は WARN |
| キャッシュスコープ | 複数イメージのビルドでは明示的な scope= を指定 | 見つからない場合は WARN |
| スキャナーの固定 | Trivy/Grype アクションを SHA で固定(@master ではない) | 固定されていない場合は WARN |
コンテナラベルの基準(GHCR 統合):
| 確認項目 | 基準 | 重大度 |
|---|---|---|
org.opencontainers.image.source | 必須 — リポジトリへのリンク | 見つからない場合は WARN |
org.opencontainers.image.description | 必須 — パッケージの説明 | 見つからない場合は WARN |
org.opencontainers.image.licenses | 必須 — SPDX ライセンス | 見つからない場合は WARN |
詳細な Dockerfile の確認が必要な場合は、/configure:dockerfile を実行してください。
ステップ 4:コンプライアンスレポートを生成する
書式付きのコンプライアンスレポートを出力します。
Container Infrastructure Compliance Report
==============================================
Project Type: frontend (detected)
Component Status:
Dockerfile PASS
Build Workflow PASS
Registry Config PASS
Container Scanning WARN (missing)
Devcontainer SKIP (not required)
.dockerignore PASS
Dockerfile Checks:
Multi-stage 2 stages PASS
HEALTHCHECK Present PASS
Base images node:22, nginx PASS
Build Workflow Checks:
Workflow container-build.yml PASS
checkout v4 PASS
build-push-action v6 PASS
Multi-platform amd64,arm64 PASS
GHA caching Enabled PASS
Container Labels Checks:
image.source In metadata-action PASS
image.description Custom label set PASS
image.licenses Not configured WARN
Recommendations:
- Add org.opencontainers.image.licenses label to workflow
- Add Trivy or Grype vulnerability scanning to CI
Overall: 2 warnings, 1 info
--check-only が指定されている場合は、ここで終了します。
ステップ 5:修正を適用する(--fix が指定された場合、またはユーザーが確認した場合)
- Dockerfile がない場合:
/configure:dockerfile --fixを実行します - ビルドワークフローがない場合:REFERENCE.md のテンプレートから作成します
- スキャンがない場合:Trivy スキャンジョブを追加します
- .dockerignore がない場合:REFERENCE.md の標準的な .dockerignore を作成します
- 古いアクション:バージョン番号を更新します
ステップ 6:基準の追跡を更新する
.project-standards.yaml を更新します。
components:
container: "2025.1"
dockerfile: "2025.1"
container-workflow: "2025.1"
詳細なテンプレート(Dockerfile、ワークフロー、devcontainer、.dockerignore)については、REFERENCE.md を参照してください。
エージェント向けの最適化
| コンテキスト | コマンド |
|---|---|
| コンプライアンスの簡易チェック | /configure:container --check-only |
| すべての問題を自動修正 | /configure:container --fix |
| Dockerfile のみ | /configure:container --check-only --component dockerfile |
| ワークフローのみ | /configure:container --check-only --component workflow |
| スキャンのみ | /configure:container --fix --component scanning |
| すべての Dockerfile を検索 | find . -maxdepth 2 \( -name 'Dockerfile' -o -name 'Dockerfile.*' \) 2>/dev/null |
フラグ
| フラグ | 説明 |
|---|---|
--check-only | 修正を提案せずにステータスを報告します |
--fix | 修正を自動的に適用します |
--component <name> | 特定のコンポーネントのみをチェックします(dockerfile、workflow、registry、scanning、devcontainer) |
コンポーネントの依存関係
Container Infrastructure
├── Dockerfile (required)
│ └── .dockerignore (recommended)
├── Build Workflow (required for CI/CD)
│ ├── Registry config
│ └── Multi-platform builds
├── Container Scanning (recommended)
│ └── SBOM generation (optional)
└── Devcontainer (optional)
└── VS Code extensions
注意事項
- マルチプラットフォームビルド:M1/M2 Mac の開発者や ARM サーバーに不可欠です
- GHCR:GitHub 上でホストされるプロジェクトでは、GitHub Container Registry が推奨されます
- Trivy:包括的な脆弱性検出に推奨されるスキャナーです
- Alpine と Slim:Node.js/Go/Rust には Alpine を使用してください。Python には slim(Debian)を使用してください(musl との互換性の問題があるため)
- 非 root での実行は必須:本番環境では、コンテナを root として実行しないでください
- バージョンの固定:必ず特定のバージョンタグを使用し、
latestは使用しないでください
関連項目
/configure:dockerfile- Dockerfile 固有の設定/configure:workflows- GitHub Actions ワークフローの設定/configure:skaffold- Kubernetes 開発の設定/configure:security- セキュリティスキャンの設定/configure:all- すべてのコンプライアンスチェックを実行container-developmentスキル - コンテナのベストプラクティスci-workflowsスキル - CI/CD ワークフローのパターン