mcpField
D
docker-containerization

docker-containerization

github.com/ailabs-393クラウド・DevOps4601.1k 回インストール50 週間前に更新
リポジトリ

docker-containerization について

Next.js と Node.js プロジェクト向けの Docker コンテナ化スキルです。環境別の設定テンプレート、管理スクリプト、ローカル開発から各種オーケストレーション基盤までのデプロイガイドを提供します。

主な機能

  1. 01本番、開発、静的サイト用 Dockerfile
  2. 02Docker Compose 設定
  3. 03ビルド、実行、プッシュ、クリーンアップ用スクリプト
  4. 04Nginx 設定と .dockerignore
  5. 05複数プラットフォーム向けデプロイガイド

活用シーン

  1. 01Next.js アプリの本番コンテナ化
  2. 02Docker Compose によるローカル開発環境の構築
  3. 03Kubernetes やクラウド基盤へのコンテナデプロイ

インストール

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

$npx skills add https://github.com/ailabs-393/ai-labs-claude-skills --skill docker-containerization

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

同梱ファイル

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

index.js
package.json
assets/
.dockerignore
docker-compose.yml
Dockerfile.development
Dockerfile.nginx
Dockerfile.production
nginx.conf
references/
container-orchestration.md
docker-best-practices.md
scripts/
docker-build.sh
docker-cleanup.sh
docker-push.sh
docker-run.sh

詳細

Docker コンテナ化スキル

概要

最新の Web アプリケーション、特に Next.js および Node.js プロジェクト向けに、本番環境で使用できる Docker 設定を生成します。このスキルでは、Dockerfile、docker-compose の設定、コンテナ管理用の bash スクリプト、さまざまなオーケストレーションプラットフォーム向けの包括的なデプロイガイドを提供します。

主な機能

1. Dockerfile の生成

さまざまな環境向けに最適化された Dockerfile を作成します。

本番環境(assets/Dockerfile.production):

  • イメージサイズを 85% 削減するマルチステージビルド
  • Alpine Linux ベース(最終イメージは約 180MB)
  • セキュリティのため、root 以外のユーザーで実行
  • ヘルスチェックとリソース制限

開発環境(assets/Dockerfile.development):

  • ホットリロードに対応
  • 開発用依存関係をすべて含む
  • コードをリアルタイムで更新するためのボリュームマウント

Nginx 静的ファイル(assets/Dockerfile.nginx):

  • 静的エクスポートを最適化
  • Nginx リバースプロキシを同梱
  • フットプリントを最小化
2. Docker Compose の設定

assets/docker-compose.yml による複数コンテナのオーケストレーション:

  • 開発環境および本番環境のサービス
  • ネットワークとボリュームの管理
  • ヘルスチェックとログ記録
  • 再起動ポリシー
3. コンテナ管理用 Bash スクリプト

docker-build.sh - 充実したオプションでイメージをビルドします:

./docker-build.sh -e prod -t v1.0.0
./docker-build.sh -n my-app --no-cache --platform linux/amd64

docker-run.sh - 詳細な設定でコンテナを実行します:

./docker-run.sh -i my-app -t v1.0.0 -d
./docker-run.sh -p 8080:3000 --env-file .env.production

docker-push.sh - レジストリ(Docker Hub、ECR、GCR、ACR)にプッシュします:

./docker-push.sh -n my-app -t v1.0.0 --repo username/my-app
./docker-push.sh -r gcr.io/project --repo my-app --also-tag stable

docker-cleanup.sh - ディスク容量を解放します:

./docker-cleanup.sh --all --dry-run  # Preview cleanup
./docker-cleanup.sh --containers --images  # Clean specific resources
4. 設定ファイル
  • .dockerignore:不要なファイル(node_modules、.git、ログ)を除外します
  • nginx.conf:圧縮、キャッシュ、セキュリティヘッダーを備えた、本番環境向けの Nginx 設定
5. リファレンスドキュメント

docker-best-practices.md の内容:

  • マルチステージビルドの解説
  • イメージ最適化の手法(サイズを 50~85% 削減)
  • セキュリティのベストプラクティス(root 以外のユーザー、脆弱性スキャン)
  • パフォーマンスの最適化
  • ヘルスチェックとログ記録
  • トラブルシューティングガイド

container-orchestration.md の内容:

  • Docker Compose(ローカル開発)
  • Kubernetes(自動スケーリングに対応するエンタープライズ規模)
  • Amazon ECS(AWS ネイティブのオーケストレーション)
  • Google Cloud Run(サーバーレスコンテナ)
  • Azure Container Instances
  • Digital Ocean App Platform

設定例、コマンド、自動スケーリングの設定、モニタリングを含みます。

ワークフローの判断ツリー

1. 環境はどれですか?
  • 開発環境 → Dockerfile.development(ホットリロード、すべての依存関係)
  • 本番環境 → Dockerfile.production(最小構成、安全、最適化済み)
  • 静的エクスポート → Dockerfile.nginx(最小のフットプリント)
2. コンテナは単一ですか、複数ですか?
  • 単一 → Dockerfile のみを生成
  • 複数 → docker-compose.yml を生成(アプリ+データベース、マイクロサービス)
3. 使用するレジストリはどれですか?
  • Docker Hub → docker.io/username/image
  • AWS ECR → 123456789012.dkr.ecr.region.amazonaws.com/image
  • Google GCR → gcr.io/project-id/image
  • Azure ACR → registry.azurecr.io/image
4. デプロイ先のプラットフォームはどれですか?
  • Kubernetes → references/container-orchestration.md の K8s セクションを参照
  • ECS → ECS タスク定義の例を参照
  • Cloud Run → デプロイコマンドを参照
  • Docker Compose → 提供されている compose ファイルを使用
5. 最適化が必要ですか?
  • イメージサイズ → マルチステージビルド、Alpine ベース
  • ビルド速度 → レイヤーキャッシュ、BuildKit
  • セキュリティ → root 以外のユーザー、脆弱性スキャン
  • パフォーマンス → リソース制限、ヘルスチェック

使用例

例 1:Next.js アプリを本番環境向けにコンテナ化する

ユーザー:「Next.js アプリを本番環境向けにコンテナ化してください」

手順:

  1. assets/Dockerfile.production をプロジェクトのルートに Dockerfile としてコピーします
  2. assets/.dockerignore をプロジェクトのルートにコピーします
  3. ビルドします:./docker-build.sh -e prod -n my-app -t v1.0.0
  4. テストします:./docker-run.sh -i my-app -t v1.0.0 -p 3000:3000 -d
  5. プッシュします:./docker-push.sh -n my-app -t v1.0.0 --repo username/my-app
例 2:Docker Compose を使用した開発

ユーザー:「ローカル開発用に Docker Compose を設定してください」

手順:

  1. assets/Dockerfile.development と assets/docker-compose.yml をプロジェクトにコピーします
  2. docker-compose.yml 内のサービスをカスタマイズします
  3. 起動します:docker-compose up -d
  4. ログを確認します:docker-compose logs -f app-dev
例 3:Kubernetes へのデプロイ

ユーザー:「コンテナ化したアプリを Kubernetes にデプロイしてください」

手順:

  1. イメージをビルドしてレジストリにプッシュします
  2. references/container-orchestration.md の Kubernetes セクションを確認します
  3. K8s マニフェスト(deployment、service、ingress)を作成します
  4. 適用します:kubectl apply -f deployment.yaml
  5. 確認します:kubectl get pods && kubectl logs -f deployment/app
例 4:AWS ECS へのデプロイ

ユーザー:「AWS ECS Fargate にデプロイしてください」

手順:

  1. ビルドして ECR にプッシュします
  2. references/container-orchestration.md の ECS セクションを確認します
  3. タスク定義の JSON を作成します
  4. 登録します:aws ecs register-task-definition --cli-input-json file://task-def.json
  5. サービスを作成します:aws ecs create-service --cluster my-cluster --service-name app --desired-count 3

ベストプラクティス

セキュリティ

✅ 本番環境ではマルチステージビルドを使用します ✅ root 以外のユーザーとして実行します ✅ 固定のイメージタグを使用します(latest は使用しません) ✅ 脆弱性をスキャンします ✅ シークレットをハードコードしないでください ✅ ヘルスチェックを実装します

パフォーマンス

✅ レイヤーキャッシュの順序を最適化します ✅ Alpine イメージを使用します(約 85%小型化できます) ✅ 並列ビルドのために BuildKit を有効にします ✅ リソース制限を設定します ✅ 圧縮を使用します

保守性

✅ 複雑な手順にはコメントを追加します ✅ 柔軟性を高めるためにビルド引数を使用します ✅ Dockerfile の重複を避けます ✅ すべての設定をバージョン管理します ✅ 環境変数を文書化します

トラブルシューティング

イメージのサイズが大きすぎます(>500MB) → マルチステージビルド、Alpine ベース、包括的な .dockerignore を使用します

ビルドが遅い → レイヤーキャッシュを最適化し、BuildKit を使用して、依存関係を確認します

コンテナがすぐに終了します → ログを確認します:docker logs container-name → CMD/ENTRYPOINT を確認し、ポートの競合を確認します

変更が反映されません → キャッシュを使わずに再ビルドし、.dockerignore を確認して、ボリュームマウントを確認します

クイックリファレンス

# Build
./docker-build.sh -e prod -t latest

# Run
./docker-run.sh -i app -t latest -d

# Logs
docker logs -f app

# Execute
docker exec -it app sh

# Cleanup
./docker-cleanup.sh --all --dry-run  # Preview
./docker-cleanup.sh --all            # Execute

CI/CD との統合

GitHub Actions
- run: |
    chmod +x docker-build.sh docker-push.sh
    ./docker-build.sh -e prod -t ${{ github.sha }}
    ./docker-push.sh -n app -t ${{ github.sha }} --repo username/app
GitLab CI
build:
  script:
    - chmod +x docker-build.sh
    - ./docker-build.sh -e prod -t $CI_COMMIT_SHA

リソース

スクリプト(scripts/)

包括的な機能を備えた、本番環境ですぐに使える bash スクリプト:

  • docker-build.sh - イメージをビルドします(400 行以上、色付き出力)
  • docker-run.sh - コンテナを実行します(400 行以上、競合を自動解決)
  • docker-push.sh - レジストリにプッシュします(複数レジストリに対応)
  • docker-cleanup.sh - リソースをクリーンアップします(ドライランモード、選択的なクリーンアップ)
リファレンス(references/)

必要に応じて読み込める詳細なドキュメント:

  • docker-best-practices.md - Docker のベストプラクティスの包括的なガイド(約 500 行)
  • container-orchestration.md - 6 つ以上のプラットフォーム向けデプロイガイド(約 600 行)
アセット(assets/)

すぐに使えるテンプレート:

  • Dockerfile.production - マルチステージの本番環境用 Dockerfile
  • Dockerfile.development - 開発用 Dockerfile
  • Dockerfile.nginx - Nginx を使用した静的エクスポート
  • docker-compose.yml - マルチコンテナのオーケストレーション
  • .dockerignore - 最適化された除外ルール
  • nginx.conf - 本番環境用 Nginx 設定

コメント