docker-expert について
NestJSやNext.jsのプロジェクトでDockerを設定し、コンテナ化したサービスを管理する開発者向けのスキルです。Dockerfile、Compose、ネットワーク、ストレージ、ヘルスチェック、ビルド手法を扱います。
主な機能
- 01NestJSとNext.jsのDockerfile作成
- 02Docker Composeサービスの設定
- 03コンテナネットワークとボリュームの設定
- 04ヘルスチェックと再起動ポリシーの追加
- 05マルチステージビルドの実践
活用シーン
- 01NestJSまたはNext.jsアプリのコンテナ化
- 02開発用・本番用Composeファイルの設定
- 03コンテナでのPostgresやRedisの実行
- 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 を使用する
- 適切な再起動ポリシーを設定する
- コンテナにヘルスチェックを使用する
- 永続データにはボリュームをマウントする
- サービスを分離するためにネットワークを使用する
コメント
Markdown 対応