mcpField
D
docker-expert

docker-expert

github.com/shipshitdevクラウド・DevOps38208 回インストール今日更新
リポジトリ

docker-expert について

NestJSやNext.jsのプロジェクトでDockerを設定し、コンテナ化したサービスを管理する開発者向けのスキルです。Dockerfile、Compose、ネットワーク、ストレージ、ヘルスチェック、ビルド手法を扱います。

主な機能

  1. 01NestJSとNext.jsのDockerfile作成
  2. 02Docker Composeサービスの設定
  3. 03コンテナネットワークとボリュームの設定
  4. 04ヘルスチェックと再起動ポリシーの追加
  5. 05マルチステージビルドの実践

活用シーン

  1. 01NestJSまたはNext.jsアプリのコンテナ化
  2. 02開発用・本番用Composeファイルの設定
  3. 03コンテナでのPostgresやRedisの実行
  4. 04キャッシュを使ったイメージビルドの改善

インストール

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

$npx skills add https://github.com/shipshitdev/skills --skill docker-expert

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

同梱ファイルplugin.json

詳細

Docker のエキスパート

使用する場面

  • NestJS/Next.js 向けの Dockerfile 作成
  • docker-compose の設定
  • コンテナのネットワークとボリューム
  • マルチステージビルドの最適化
  • ヘルスチェックと再起動ポリシー
  • Postgres/Redis コンテナのセットアップ

Dockerfile のベストプラクティス

NestJS のマルチステージビルド
FROM node:20-alpine AS base
WORKDIR /app

FROM base AS deps
COPY package*.json ./
RUN npm ci

FROM base AS builder
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build

FROM base AS runner
ENV NODE_ENV=production
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3001
CMD ["node", "dist/main.js"]
Next.js の Dockerfile
FROM node:20-alpine AS base
WORKDIR /app

FROM base AS deps
COPY package*.json ./
RUN npm ci

FROM base AS builder
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build

FROM base AS runner
ENV NODE_ENV=production
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json
EXPOSE 3000
CMD ["npm", "start"]

Docker Compose のパターン

開発環境のセットアップ
  • ホットリロードにはボリュームを使用する
  • ソースコードをマウントする
  • restart: unless-stopped を設定する
  • ネットワークを設定する
本番環境のセットアップ
  • データの永続化には名前付きボリュームを使用する
  • 再起動ポリシーを設定する
  • ヘルスチェックを設定する
  • シークレット管理を使用する
Docker Compose を使用した Postgres
services:
  postgres:
    image: postgres:17
    container_name: postgres
    restart: unless-stopped
    ports:
      - "127.0.0.1:5432:5432"
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - app-network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  postgres_data:

ヘルスチェック

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost:3001/health"]
  interval: 30s
  timeout: 10s
  retries: 3
  start_period: 40s

ベストプラクティス

  • マルチステージビルドを使用してイメージサイズを削減する
  • レイヤーキャッシュを活用する
  • .dockerignore を使用する
  • 適切な再起動ポリシーを設定する
  • コンテナにヘルスチェックを使用する
  • 永続データにはボリュームをマウントする
  • サービスを分離するためにネットワークを使用する

コメント