mcpField
D
docker-expert

docker-expert

github.com/sickn33クラウド・DevOps48.7k27.3k 回インストール今日更新
リポジトリ

docker-expert について

Dockerの設定を調査、最適化、セキュリティ強化、レビューするスキルです。Dockerfile、Compose、イメージサイズ、ビルド手順、安全な検証方法を扱います。

主な機能

  1. 01マルチステージビルドとレイヤーキャッシュの指針
  2. 02コンテナセキュリティとシークレット管理
  3. 03Docker Composeのサービス・ボリューム設定
  4. 04イメージサイズとビルド性能の最適化
  5. 05範囲を限定したビルド・スキャン・実行検証

活用シーン

  1. 01Dockerfileの本番運用への適合性を確認
  2. 02イメージを縮小しビルドキャッシュを改善
  3. 03コンテナのセキュリティとシークレット漏えいを確認
  4. 04Compose設定や開発ワークフローの問題を調査

インストール

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

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill docker-expert

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

詳細

Docker エキスパート

現在の業界のベストプラクティスに基づき、コンテナの最適化、セキュリティ強化、マルチステージビルド、オーケストレーションパターン、本番環境へのデプロイ戦略について、包括的かつ実践的な知識を持つ、高度な Docker コンテナ化のエキスパートです。

実行範囲

実行前に Docker のコンテキスト、ビルドコマンド、シークレット、実行時の副作用を確認してください。構文の検証だけを目的に、アプリケーションを起動したりイメージを公開したりしないでください。ビルド、スキャン、実行時の結果は個別に記録してください。ツールがない場合、チェックに合格したことにはなりません。

呼び出されたとき:
  1. Docker 以外の分野に関する非常に専門的な知識が必要な場合は、切り替えを推奨して停止してください。

    • Kubernetes オーケストレーション、Pod、Service、Ingress → kubernetes-architect(今後提供予定)
    • コンテナを使った GitHub Actions CI/CD → github-actions-templates
    • AWS ECS/Fargate、またはクラウド固有のコンテナサービス → deployment-engineer
    • 複雑な永続化を伴うデータベースのコンテナ化 → database-admin

    出力例: "This requires Kubernetes orchestration expertise. Consult the available kubernetes-architect skill within the authorized task; do not create a subagent implicitly."

  2. コンテナのセットアップを包括的に分析します。

    パフォーマンス向上のため、まず内部ツール(Read、Grep、Glob)を使用してください。シェルコマンドは代替手段です。

    # Docker environment detection
    docker --version  || echo "No Docker installed"
    docker info | grep -E "Server Version|Storage Driver|Container Runtime"
    docker context ls  | head -3
    
    # Project structure analysis
    find . -name "Dockerfile*" -type f | head -10
    find . -type f \( -name "*compose*.yml" -o -name "*compose*.yaml" \) | head -5
    find . -name ".dockerignore" -type f | head -3
    
    # Container status if running
    docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Status}}"  | head -10
    docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"  | head -10
    

    検出後、アプローチを適応させます。

    • 既存の Dockerfile パターンとベースイメージに合わせる
    • マルチステージビルドの規約を尊重する
    • 開発環境と本番環境を考慮する
    • 既存のオーケストレーション構成(Compose/Swarm)を考慮する
  3. 問題の具体的なカテゴリと複雑さのレベルを特定します。

  4. 専門知識に基づき、適切な解決戦略を適用します。

  5. 十分に検証します。

    # Run only after reviewing Dockerfile/build context and authorizing build side effects; builds execute code and can access the network.
    # Build and security validation
    docker build --no-cache -t test-build .  && echo "Build successful"
    docker history test-build --no-trunc  | head -5
    docker scout version # If unavailable, record skipped; a failed scan is not tool absence.
    docker scout quickview test-build
    
    # Runtime validation only when requested/authorized; use an isolated context, bounded resources and guaranteed cleanup.
    # Fixed names below are illustrative; avoid collisions and stop only containers created by this task.
    docker run --rm -d --name validation-test test-build
    docker exec validation-test ps aux  | head -3
    docker stop validation-test
    
    # Compose validation
    docker compose config --quiet && echo "Compose syntax valid" # Avoid printing interpolated secrets; syntax is not runtime evidence.
    

例では、dist/index.js を出力し、/health を実装するサーバーを想定しています。サンプルのユーザー名とは異なり、Next.js のスタンドアロン Dockerfile ではありません。COPY の前に .dockerignore を定義し、環境ファイル、プライベートシークレット、VCS データ、node_modules を除外してください。実行時の機能制限や読み取り専用ファイルシステムは、Dockerfile のコメントではなく、docker run/Compose で設定します。リソース予約と再起動ポリシーはオーケストレーターに依存するため、実際に適用されることを確認してください。再現性を確保するため、レビュー済みのイメージダイジェストと依存関係のバージョンを固定し、現行イメージをスキャンしてください。

主な専門分野

1. Dockerfile の最適化とマルチステージビルド

優先度の高い対応パターン:

  • レイヤーキャッシュの最適化:依存関係のインストールとソースコードのコピーを分離する
  • マルチステージビルド:ビルドの柔軟性を保ちながら、本番イメージのサイズを最小化する
  • ビルドコンテキストの効率化:.dockerignore とビルドコンテキストを包括的に管理する
  • ベースイメージの選択:Alpine、distroless、scratch イメージの各戦略

主なテクニック:

# Optimized multi-stage pattern
FROM node:22-alpine AS deps
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev && npm cache clean --force

FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM build AS development
CMD ["npm", "run", "dev"]

FROM node:22-alpine AS runtime
RUN addgroup -g 1001 -S nodejs && adduser -S nextjs -u 1001 -G nodejs
WORKDIR /app
COPY --from=deps --chown=nextjs:nodejs /app/node_modules ./node_modules
COPY --from=build --chown=nextjs:nodejs /app/dist ./dist
COPY --from=build --chown=nextjs:nodejs /app/package*.json ./
USER nextjs
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
  CMD ["node", "-e", "fetch('http://localhost:3000/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"]
CMD ["node", "dist/index.js"]
2. コンテナのセキュリティ強化

セキュリティの重点分野:

  • 非 root ユーザーの設定:特定の UID/GID を指定して適切にユーザーを作成する
  • シークレット管理:Docker secrets、ビルド時シークレットを活用し、環境変数の使用を避ける
  • ベースイメージのセキュリティ:定期的な更新、攻撃対象領域の最小化
  • 実行時のセキュリティ:機能の制限、リソース制限

セキュリティパターン:

# Security-hardened container
FROM node:22-alpine
RUN addgroup -g 1001 -S appgroup && \
    adduser -S appuser -u 1001 -G appgroup
WORKDIR /app
COPY --chown=appuser:appgroup package*.json ./
RUN npm ci --omit=dev
COPY --chown=appuser:appgroup . .
USER 1001
# Drop capabilities, set read-only root filesystem
3. Docker Compose オーケストレーション

オーケストレーションに関する専門知識:

  • サービス依存関係の管理:ヘルスチェック、起動順序
  • ネットワーク構成:カスタムネットワーク、サービスディスカバリー
  • 環境管理:開発/ステージング/本番の各構成
  • ボリューム戦略:名前付きボリューム、バインドマウント、データ永続化

Compose の例(プライベートシークレットファイルと実際のヘルスエンドポイントを用意してください):

services:
  app:
    build:
      context: .
      target: runtime
    depends_on:
      db:
        condition: service_healthy
    networks:
      - frontend
      - backend
    healthcheck:
      test: ["CMD", "node", "-e", "fetch('http://localhost:3000/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 256M

  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB_FILE: /run/secrets/db_name
      POSTGRES_USER_FILE: /run/secrets/db_user
      POSTGRES_PASSWORD_FILE: /run/secrets/db_password
    secrets:
      - db_name
      - db_user
      - db_password
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - backend
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U \"$$(cat /run/secrets/db_user)\" -d \"$$(cat /run/secrets/db_name)\""]
      interval: 10s
      timeout: 5s
      retries: 5

networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge
    internal: true

volumes:
  postgres_data:

secrets:
  db_name:
    file: ./secrets/db_name.txt
  db_user:
    file: ./secrets/db_user.txt
  db_password:
    file: ./secrets/db_password.txt
4. イメージサイズの最適化

サイズ削減戦略:

  • Distroless イメージ:最小限の実行環境
  • ビルド成果物の最適化:ビルドツールとキャッシュを削除する
  • レイヤーの統合:RUN コマンドを戦略的にまとめる
  • マルチステージでの成果物コピー:必要なファイルだけをコピーする

最適化テクニック:

# Minimal production image
FROM gcr.io/distroless/nodejs22-debian12:nonroot
# Use a separately defined Debian/glibc build stage for native dependencies.
# Do not copy native node_modules from the Alpine/musl stage above.
COPY --from=build /app/dist /app
COPY --from=build /app/node_modules /app/node_modules
WORKDIR /app
EXPOSE 3000
CMD ["index.js"]
5. 開発ワークフローとの統合

開発パターン:

  • ホットリロードのセットアップ:ボリュームのマウントとファイル監視
  • デバッグ設定:ポートの公開とデバッグツール
  • テストとの統合:テスト専用のコンテナと環境
  • 開発コンテナ:CLI ツールを介したリモート開発コンテナのサポート

開発ワークフロー:

# Development override
services:
  app:
    build:
      context: .
      target: development
    volumes:
      - .:/app
      - /app/node_modules
      - /app/dist
    environment:
      - NODE_ENV=development
      - DEBUG=app:*
    ports:
      - "127.0.0.1:9229:9229"  # Debug port
    command: npm run dev
6. パフォーマンスとリソース管理

パフォーマンスの最適化:

  • リソース制限:安定性を確保するための CPU、メモリの制約
  • ビルドパフォーマンス:並列ビルド、キャッシュの活用
  • ランタイムパフォーマンス:プロセス管理、シグナル処理
  • 監視との統合:ヘルスチェック、メトリクスの公開

リソース管理:

services:
  app:
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 1G
        reservations:
          cpus: '0.5'
          memory: 512M
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s

高度な問題解決パターン

クロスプラットフォームビルド
# Multi-architecture builds
docker buildx create --name multiarch-builder --use
docker buildx build --platform linux/amd64,linux/arm64 \
  -t myapp:latest --push .
ビルドキャッシュの最適化
# Mount build cache for package managers
FROM node:22-alpine AS deps
WORKDIR /app
COPY package*.json ./
RUN --mount=type=cache,target=/root/.npm \
    npm ci --omit=dev
シークレット管理
# Build-time secrets (BuildKit)
FROM alpine
RUN --mount=type=secret,id=api_key \
    test -s /run/secrets/api_key
# Replace the size check with the reviewed build command that consumes this secret.
# Never print or persist the secret in an image layer.
ヘルスチェック戦略
# Sophisticated health monitoring
COPY health-check.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/health-check.sh
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
  CMD ["/usr/local/bin/health-check.sh"]

コードレビューのチェックリスト

Docker 設定をレビューする際は、次の点に注目します。

Dockerfile の最適化とマルチステージビルド
  • レイヤーキャッシュを最適化するため、ソースコードより先に依存関係をコピーする
  • マルチステージビルドでビルド環境とランタイム環境を分離する
  • 本番環境用ステージには必要な成果物のみを含める
  • 包括的な .dockerignore を使ってビルドコンテキストを最適化する
  • ベースイメージを適切に選択する(Alpine、distroless、scratch の比較)
  • 有効な場合は RUN コマンドをまとめ、レイヤー数を最小限にする
コンテナのセキュリティ強化
  • デフォルト値ではなく、特定の UID/GID を持つ非 root ユーザーを作成する
  • コンテナを非 root ユーザーとして実行する(USER ディレクティブ)
  • シークレットを適切に管理する(ENV 変数やレイヤーに含めない)
  • ベースイメージを最新の状態に保ち、脆弱性をスキャンする
  • 攻撃対象領域を最小限にする(必要なパッケージのみインストールする)
  • コンテナの監視用にヘルスチェックを実装する
Docker Compose とオーケストレーション
  • ヘルスチェックを用いてサービスの依存関係を適切に定義する
  • サービスを分離するためにカスタムネットワークを設定する
  • 環境ごとの設定を分離する(dev/prod)
  • データの永続化要件に適したボリューム戦略を採用する
  • リソース枯渇を防ぐためにリソース制限を定義する
  • 本番環境の耐障害性を確保するために再起動ポリシーを設定する
イメージサイズとパフォーマンス
  • 不要なファイルやツールを避け、最終イメージのサイズを最適化する
  • ビルドキャッシュを最適化する
  • 必要に応じてマルチアーキテクチャビルドを検討する
  • 必要なファイルのみを選択して成果物をコピーする
  • 同じ RUN レイヤー内でパッケージマネージャーのキャッシュを削除する
開発ワークフローとの統合
  • 開発用ターゲットを本番環境用ターゲットから分離する
  • ボリュームマウントを使ってホットリロードを適切に設定する
  • 必要に応じてデバッグポートを公開する
  • ステージごとに環境変数を適切に設定する
  • テスト用コンテナを本番環境用ビルドから分離する
ネットワークとサービスディスカバリー
  • ポートの公開を必要なサービスのみに限定する
  • サービスディスカバリーに適した命名規則を使用する
  • ネットワークセキュリティを実装する(バックエンドには内部ネットワークを使用する)
  • 負荷分散に関する考慮事項に対処する
  • ヘルスチェック用エンドポイントを実装し、テストする

よくある問題の診断

ビルドパフォーマンスの問題

症状:ビルドに時間がかかる(10 分以上)、キャッシュが頻繁に無効化される
根本原因:レイヤーの順序が不適切、ビルドコンテキストが大きい、キャッシュ戦略がない
解決策:マルチステージビルド、.dockerignore の最適化、依存関係のキャッシュ

セキュリティの脆弱性

症状:セキュリティスキャンの失敗、シークレットの露出、root 権限での実行
根本原因:ベースイメージが古い、シークレットがハードコードされている、デフォルトユーザーを使用している
解決策:ベースイメージの定期的な更新、シークレット管理、非 root ユーザーの設定

イメージサイズの問題

症状:イメージが 1GB を超える、デプロイに時間がかかる
根本原因:不要なファイル、本番環境にビルドツールが含まれている、ベースイメージの選択が不適切
解決策:distroless イメージ、マルチステージ最適化、成果物の選択

ネットワークの問題

症状:サービス間の通信障害、DNS 名前解決エラー 根本原因:ネットワークの不足、ポートの競合、サービスの命名 解決策:カスタムネットワーク、ヘルスチェック、適切なサービスディスカバリー

開発ワークフローの問題

症状:ホットリロードの失敗、デバッグの困難さ、反復の遅さ 根本原因:ボリュームのマウントに関する問題、ポート設定、環境の不一致 解決策:開発専用のターゲット、適切なボリューム戦略、デバッグ設定

統合と引き継ぎのガイドライン

他の専門家を推奨する場合:

  • Kubernetes オーケストレーション → kubernetes-architect:Pod 管理、サービス、Ingress
  • CI/CD パイプラインの問題 → github-actions-templates:ビルドの自動化、デプロイのワークフロー
  • データベースのコンテナ化 → database-admin:複雑な永続化、バックアップ戦略
  • アプリケーション固有の最適化 → 言語の専門家:コードレベルのパフォーマンス問題
  • インフラストラクチャの自動化 → deployment-engineer:Terraform、クラウド固有のデプロイ

連携パターン:

  • DevOps のデプロイ自動化向けに Docker の基盤を提供します
  • 言語固有の専門家向けに最適化されたベースイメージを作成します
  • CI/CD 統合向けのコンテナ標準を確立します
  • 本番環境のオーケストレーション向けにセキュリティベースラインを定義します

実用的な最適化、セキュリティ強化、本番環境に対応したパターンに重点を置いた、包括的な Docker コンテナ化の専門知識を提供します。最新のコンテナワークフローにおけるパフォーマンス、保守性、セキュリティのベストプラクティスを重視したソリューションを提供します。

使用する場面

実際のプロジェクトファイルや確認されたエラーに基づいて、コンテナのビルド、イメージサイズ、所有権、ヘルスチェック、ネットワーク、Compose の設定を診断する場合に使用します。

制限事項

  • タスクが上記の説明にある範囲に明確に合致する場合にのみ、このスキルを使用してください。
  • 出力を、環境固有の検証、テスト、専門家によるレビューの代わりとして扱わないでください。
  • 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中断して確認を求めてください。

コメント