mcpField
D
docker-compose-skill

docker-compose-skill

github.com/scientiacapitalクラウド・DevOps2873 回インストール3 週間前に更新
リポジトリ

docker-compose-skill について

Docker Compose でローカルの複数サービス開発環境を構築・管理するスキルです。一般的なサービスの Compose テンプレートに加え、ヘルスチェック、環境変数、ホットリロード、サービス操作を案内します。

主な機能

  1. 01一般的なサービス向け Compose テンプレート
  2. 02データベースとキャッシュのヘルスチェック
  3. 03.env による環境変数管理
  4. 04ボリュームマウントによるホットリロード
  5. 05ログとサービス操作コマンドの案内

活用シーン

  1. 01ローカルのデータベースとキャッシュの起動
  2. 02依存サービスのヘルスチェック設定
  3. 03アプリコードのマウントとホットリロード
  4. 04サービス停止とボリューム削除

インストール

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

$npx skills add https://github.com/scientiacapital/skills --skill docker-compose-skill

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

config.json
reference/
compose-patterns.md
dev-workflow.md
networking.md
services.md

詳細

Docker Compose を使用して、ローカルのマルチサービス開発環境をセットアップおよび管理します。PostgreSQL、Redis、MongoDB などのサービス向けに、compose.yml テンプレート、ヘルスチェック、ホットリロード、および必須コマンドを提供します。

<quick_start>

  1. お使いのスタック(Postgres、Redis など)に合わせて、以下の compose.yml テンプレートをコピーします
  2. データベースの認証情報を含む .env ファイルを作成します
  3. docker compose up -d を実行してサービスを起動します
  4. docker compose logs -f を使用して監視します </quick_start>

<success_criteria>

  • すべてのサービスが docker compose up -d で起動し、healthy 状態に到達する
  • すべてのデータベース/キャッシュサービスにヘルスチェックが構成されている
  • 環境変数が .env に外部化されている(compose.yml にシークレットがハードコードされていない)
  • ボリュームマウントによるアプリケーションコードのホットリロードが機能する
  • docker compose down -v で、すべてのコンテナとボリュームがクリーンに削除される </success_criteria>

Docker Compose スキル

Docker Compose を使用したマルチサービス構成のローカル開発環境です。

クイックスタート

一般的なサービス
サービスイメージデフォルトポート
PostgreSQLpostgres:16-alpine5432
Redisredis:7-alpine6379
MongoDBmongo:727017
MySQLmysql:83306
基本的な compose.yml
services:
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: ${DB_USER:-app}
      POSTGRES_PASSWORD: ${DB_PASSWORD:-secret}
      POSTGRES_DB: ${DB_NAME:-app_dev}
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-app}"]
      interval: 5s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data

volumes:
  postgres_data:
  redis_data:

必須コマンド

# Start services (detached)
docker compose up -d

# Start with logs visible
docker compose up

# View logs
docker compose logs -f [service]

# Shell into container
docker compose exec db psql -U app

# Stop and remove containers
docker compose down

# Stop and remove volumes (full reset)
docker compose down -v

# Rebuild without cache
docker compose build --no-cache

環境変数

プロジェクトのルートに .env ファイルを作成します:

# .env
DB_USER=app
DB_PASSWORD=secret
DB_NAME=myapp_dev
REDIS_URL=redis://localhost:6379

compose.yml 内で参照します:

environment:
  POSTGRES_USER: ${DB_USER:-app}

ヘルスチェック

サービス依存関係には必ずヘルスチェックを追加します:

services:
  db:
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-app}"]
      interval: 5s
      timeout: 5s
      retries: 5

  app:
    depends_on:
      db:
        condition: service_healthy

ホットリロードのセットアップ

開発用にソースコードをマウントします:

services:
  app:
    build: .
    volumes:
      - .:/app                    # Source code
      - /app/node_modules         # Preserve node_modules
    environment:
      - NODE_ENV=development

オプションサービスのプロファイル

services:
  mailhog:
    image: mailhog/mailhog
    profiles: ["mail"]
    ports:
      - "8025:8025"

# Start with: docker compose --profile mail up

参照ファイル

  • reference/compose-patterns.md - 一般的な compose ファイルのパターン
  • reference/services.md - データベース、キャッシュ、キューのサービス構成
  • reference/networking.md - ポート、ネットワーク、ボリューム
  • reference/dev-workflow.md - 開発ワークフローのコマンド

Emit Outcome Sidecar

最後のステップとして、~/.claude/skill-analytics/last-outcome-docker-compose-skill.json に書き込みます:

{"ts":"[UTC ISO8601]","skill":"docker-compose-skill","version":"1.0.0","variant":"default",
 "status":"[success|partial|error]","runtime_ms":[estimated ms from start],
 "metrics":{"services_configured":[n],"containers_running":[n]},
 "error":null,"session_id":"[YYYY-MM-DD]"}

一部のステージが失敗したものの結果が生成された場合は、status に「partial」を使用します。出力がまったく生成されなかった場合にのみ「error」を使用します。

コメント