docker-development について
Dockerfile と docker-compose の設定を分析し、セキュリティ、最適化、構成上の問題を確認するスキルです。コンテナのビルドやサービス設定を審査する開発者やチーム向けで、個別の解析ツールと CI 向け JSON 出力を備えています。
主な機能
- 01Dockerfile の安全性とベストプラクティス確認
- 02レイヤー、キャッシュ、ビルド段階の分析
- 03Compose のスキーマと依存関係の検証
- 04ポート、ボリューム、ネットワークの確認
- 05CI 向け JSON 出力
活用シーン
- 01本番投入前の Dockerfile 審査
- 02秘密情報の露出や root 実行リスクの検出
- 03Compose の依存関係とポートの検証
- 04CI でのコンテナチェック
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ borghei/ claude-skills --skill docker-developmentインストール後、Claude Code で/docker-developmentを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
examples/docker-compose.sample.ymlDockerfile.samplereferences/docker-best-practices.mdscripts/compose_validator.pydockerfile_analyzer.py詳細
Docker 開発
カテゴリ: エンジニアリング ドメイン: コンテナー開発と最適化
概要
Docker 開発スキルは、Dockerfile と docker-compose の設定を自動分析します。レイヤー最適化の機会、セキュリティ上の問題、ベストプラクティスへの違反、Compose サービスの設定ミスを特定します。このスキルを使ってチーム全体でコンテナーの標準を徹底し、問題が本番環境に到達する前に検出できます。
最初に確認すること
分析を実行する前に、以下の情報を確認してください。不明または曖昧な項目があれば、推測せずに質問してください。
- 対象ファイル — 分析する Dockerfile または docker-compose.yml(
--fileと実行するツールを指定します) - 分析対象 — 全項目の分析かセキュリティのみか、ポートの競合も確認するか(
--security-only/--check-portsを指定します) - 出力形式 — 人が読める形式か、CI 用の JSON か(
--format jsonと、検出結果でパイプラインをゲートするかを指定します)
停止ルール:出力に最も大きな影響を与える 2~3 項目だけを質問してください。ユーザーが「とりあえず作成して」と言った場合は、そのまま進め、成果物の冒頭に前提を列挙してください。
クイックスタート
# Analyze a Dockerfile for best practices
python scripts/dockerfile_analyzer.py --file Dockerfile
# Analyze with JSON output
python scripts/dockerfile_analyzer.py --file Dockerfile --format json
# Validate a docker-compose file
python scripts/compose_validator.py --file docker-compose.yml
# Check for port conflicts across compose files
python scripts/compose_validator.py --file docker-compose.yml --check-ports
ツールの概要
dockerfile_analyzer.py
Dockerfile を分析し、ベストプラクティス、セキュリティ上の問題、最適化の機会を特定します。
| 機能 | 説明 |
|---|---|
| レイヤーの最適化 | 不要なレイヤーを検出し、RUN 文をまとめることを推奨します |
| マルチステージ分析 | マルチステージビルドのパターンと最終イメージのサイズを検証します |
| セキュリティスキャン | root での実行、latest タグの使用、シークレットの露出に警告を出します |
| ベースイメージの確認 | より小さいベースイメージ(alpine、distroless、slim)を推奨します |
| キャッシュの最適化 | Docker キャッシュを無効にする、適切でないレイヤーの順序を特定します |
# Full analysis
python scripts/dockerfile_analyzer.py --file Dockerfile
# Security-focused scan
python scripts/dockerfile_analyzer.py --file Dockerfile --security-only
# JSON output for CI integration
python scripts/dockerfile_analyzer.py --file Dockerfile --format json
compose_validator.py
docker-compose ファイルの正確性、依存関係の問題、ポートの競合を検証します。
| 機能 | 説明 |
|---|---|
| スキーマ検証 | Compose ファイルの構造と構文を確認します |
| 依存関係グラフ | depends_on のチェーンに循環依存がないか検証します |
| ポート競合の検出 | 重複するホストポートのバインドを特定します |
| ボリュームマウントの確認 | ボリュームパスとマウント設定を検証します |
| ネットワーク分析 | ネットワーク定義とサービスの接続性を確認します |
# Full validation
python scripts/compose_validator.py --file docker-compose.yml
# Check port conflicts only
python scripts/compose_validator.py --file docker-compose.yml --check-ports
# JSON output
python scripts/compose_validator.py --file docker-compose.yml --format json
ワークフロー
Dockerfile レビューのワークフロー
- 分析 - 対象の Dockerfile に対して dockerfile_analyzer.py を実行します
- 検出結果の確認 - まず重大なセキュリティ上の問題(root ユーザー、シークレット)に対処します
- レイヤーの最適化 - RUN 文をまとめ、キャッシュ効率が高くなるように順序を変更します
- ベースイメージの検証 - 可能な場合は最小限のベースイメージに切り替えます
- 再分析 - 改善を確認し、リグレッションがないことを検証します
Compose 検証のワークフロー
- 構造の検証 - compose_validator.py を実行して構文とスキーマを確認します
- 依存関係の確認 - サービスの依存関係グラフを確認し、循環参照がないか調べます
- ポートの監査 - サービス間でホストポートが競合していないことを確認します
- ボリュームの確認 - ボリュームマウントが正しく、必要であることを確認します
- ネットワークの確認 - サービスの分離と接続性を検証します
CI 統合のワークフロー
# Example GitHub Actions step
- name: Docker Lint
run: |
python scripts/dockerfile_analyzer.py --file Dockerfile --format json > results.json
python scripts/compose_validator.py --file docker-compose.yml --format json >> results.json
参考ドキュメント
- Docker のベストプラクティス - Dockerfile と Compose のパターンに関する包括的なガイド
よく使うパターンのクイックリファレンス
| パターン | 良い例 | 悪い例 |
|---|---|---|
| ベースイメージ | FROM python:3.12-slim | FROM python:latest |
| ユーザー | USER appuser | root として実行する |
| レイヤーの結合 | RUN apt-get update && apt-get install -y pkg | update と install を別々の RUN で実行する |
| COPY の順序 | まず要件ファイルをコピーし、その後にコードをコピーする | すべてを一度にコピーする |
| マルチステージ | ビルダーステージと最小限のランタイムを使用する | ビルドツールを含む単一ステージを使用する |
| シークレット | ビルドシークレットまたは実行時の環境変数を使用する | COPY .env . または ENV SECRET=value |
| ヘルスチェック | HEALTHCHECK CMD curl -f http://localhost/ | ヘルスチェックが定義されていない |
| .dockerignore | node_modules、.git などを含める | .dockerignore ファイルがない |
Compose のパターン
| パターン | 良い例 | 悪い例 |
|---|---|---|
| 再起動ポリシー | restart: unless-stopped | 再起動ポリシーがない |
| リソース制限 | deploy.resources.limits を設定する | リソースが無制限 |
| 名前付きボリューム | volumes: [db-data:/var/lib/postgresql] | 匿名ボリューム |
| ネットワーク | ネットワークを明示的に定義する | デフォルトのブリッジのみ |
| 環境変数 | env_file: .env | compose ファイルにシークレットを直接記述する |
コメント
Markdown 対応