mcpField
D
docker-production

docker-production

github.com/full-stack-skillsクラウド・DevOps3109 回インストール4 週間前に更新
リポジトリ

docker-production について

Dockerの本番デプロイを扱うガイダンススキルです。単一ホスト構成、Swarmクラスター、ローリングアップデート、Kubernetes移行、監視と運用・セキュリティ上の注意点を解説します。

主な機能

  1. 01単一ホストでのComposeデプロイ手順
  2. 02SwarmクラスターとStackの解説
  3. 03ローリングアップデートとロールバックの説明
  4. 04ComposeからKubernetesへの移行案内
  5. 05Prometheus、cAdvisor、Grafanaによる監視の紹介

活用シーン

  1. 01本番環境へのDocker Composeサービスのデプロイ
  2. 02Swarmクラスターとアプリ更新の管理
  3. 03Compose設定のKubernetesへの移行
  4. 04コンテナサービスの監視環境の構築

インストール

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

$npx skills add https://github.com/full-stack-skills/docker-skills --skill docker-production

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

同梱ファイル

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

agents/
openai.yaml
examples/
01-swarm-stack.md
references/
01-swarm-commands.md
02-k8s-migration.md
03-monitoring-setup.md

詳細

Docker 本番環境 — 本番環境へのデプロイ

本番環境で Docker をデプロイおよび管理するためのガイダンスです。

使用するタイミング

ユーザーが次の内容に言及した場合は、必ずこのスキルを使用してください。

  • 「本番環境へのデプロイ」、「production Docker」
  • 「docker swarm」、「docker stack」、「swarm クラスター」
  • 「Kubernetes への移行」、「kompose」、「K8s」
  • 「ゼロダウンタイムデプロイ」、「rolling update」
  • 「コンテナ監視」、「監視」、「Prometheus」

Docker Swarm クイックスタート

# Initialize cluster
docker swarm init --advertise-addr <MANAGER-IP>

# Join workers (run on worker nodes)
docker swarm join --token <TOKEN> <MANAGER-IP>:2377

# Deploy a stack
docker stack deploy -c docker-compose.yml myapp

# Manage services
docker service ls
docker service scale myapp_web=5
docker service update --image myapp:v2 myapp_web
docker service logs -f myapp_web
Swarm Compose の例
version: '3.8'
services:
  web:
    image: myapp:${TAG:-latest}
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
        order: start-first
      rollback_config:
        parallelism: 1
        delay: 10s
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
    ports:
      - "80:8080"

ゼロダウンタイムデプロイ

Rolling Update Flow:

┌──────┐  ┌──────┐  ┌──────┐     Old replicas (v1)
│ v1  │  │ v1  │  │ v1  │
└──────┘  └──────┘  └──────┘

docker service update --image myapp:v2 web

Step 1: Start v2
┌──────┐  ┌──────┐  ┌──────┐  ┌──────┐
│ v1  │  │ v1  │  │ v1  │  │ v2  │    ← 1 new
└──────┘  └──────┘  └──────┘  └──────┘

Step 2: Replace one v1 with v2
┌──────┐  ┌──────┐  ┌──────┐  ┌──────┐
│ v1  │  │ v1  │  │ v2  │  │ v2  │    ← 2 new
└──────┘  └──────┘  └──────┘  └──────┘

... until all v2

Kubernetes への移行

# Convert compose to K8s
kompose convert -f docker-compose.yml

# Output:
# web-deployment.yaml
# web-service.yaml
# ...

# Apply
kubectl apply -f .
ComposeK8s
servicesDeployments + Services
networksNetwork Policies
volumesPersistentVolumeClaims
deploy.replicasDeployment.spec.replicas
secretsSecrets

監視スタック

cAdvisor + Prometheus + Grafana
# docker-compose.monitoring.yml
services:
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:latest
    ports: ["8080:8080"]
    volumes:
      - /:/rootfs:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /sys:/sys:ro

  prometheus:
    image: prom/prometheus:latest
    ports: ["9090:9090"]
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml

  grafana:
    image: grafana/grafana:latest
    ports: ["3000:3000"]

ワークフロー — 推奨デプロイ手順

Step 1: 単一マシンへのデプロイ: compose.yml + restart: unless-stopped + systemd による監視 Step 2: Swarm クラスター: docker swarm init → docker stack deploy -c compose.yml myapp Step 3: ローリングアップデート: docker service update --image myapp:v2 + ヘルスチェック + ロールバック Step 4: 監視の導入: Prometheus + cAdvisor + Grafana によるダッシュボードの連携 Step 5: K8s への移行: kompose convert → リソース制限とヘルスチェックを手動で追加 → Helm Chart

注意点 — よくある落とし穴

  • Swarm マネージャーが 1 台のみ: 唯一のマネージャーが停止すると、クラスターは応答しなくなります。→ 対処法: マネージャーを 3 台または 5 台にします。docker node promote <worker> でマネージャーを追加し、/var/lib/docker/swarm/ を定期的にバックアップします。
  • ローリングアップデートのヘルスチェック: ヘルスチェックがないと、アップデートによって問題のあるコンテナがデプロイされる可能性があります。→ 対処法: Dockerfile に HEALTHCHECK とサービスのヘルスチェックを定義し、--update-failure-action rollback を使用します。
  • ボリュームのないデータ: 本番環境のデータベースでは、必ずボリュームを使用してください。ボリュームがない場合、コンテナの再起動後に新しいファイルシステムが作成されます。→ 対処法: docker service create --mount type=volume,src=db_data,target=/var/lib/mysql。
  • K8s への直接移行: kompose は出発点であり、本番環境ですぐに使える K8s 設定ではありません。→ 対処法: kompose convert の実行後、リソース制限、ヘルスチェック、init コンテナ、ConfigMap/Secret の参照を手動で追加します。

境界 — 対応範囲(適用する場面と適用しない場面)

分類場面説明
✅ 対応可能単一マシンでの Compose 本番環境デプロイcompose.yml + systemd による監視
✅ 対応可能Swarm クラスター管理init/join/stack deploy/rolling update
✅ 対応可能K8s 移行計画kompose + 手動調整 + Helm Chart
✅ 対応可能本番環境の監視構築Prometheus + cAdvisor + Grafana + Loki
⚠️ 条件付き複数データセンターの Swarmoverlay ネットワーク + 低遅延接続が必要
⚠️ 条件付きゼロダウンタイムでの K8s 移行ブルーグリーン/カナリアリリース戦略が必要
❌ 対象外アプリケーションコードのデプロイ各言語の CI/CD パイプライン
❌ 対象外K8s クラスターの構築K8s の公式ドキュメントを使用してください
❌ 対象外データベースの高可用性DBA の専門領域 + データベースネイティブの方式

使用しない場合

❌ 代わりにスキップ✅ 代わりに使用
開発/デバッグdocker-run
単一コンテナのアプリdocker-run + systemd
最初から K8s ネイティブで構築Swarm をスキップし、K8s を直接使用
Docker の基礎docker-basics

セキュリティと安定性

  • Swarm の参加トークンを定期的にローテーションしてください。ワーカートークンが漏えいすると、不正なノード参加を許す可能性があります。
  • 本番環境のスタックでは、機密性の高い設定すべてに Docker Secrets を使用してください。
  • 本番環境では Docker デーモンの TLS を有効にしてください(tlsverify モード)。
  • 近隣サービスへの影響を防ぐため、本番環境のすべてのサービスにリソース制限を設定してください。
  • Swarm の Raft データ(/var/lib/docker/swarm/)を定期的にバックアップしてください。
  • ノードの健全性を監視し、ノード障害に対するアラートを設定してください。

📚 公式ドキュメントの参照先

ドキュメントURL
Docker Swarmhttps://docs.docker.com/engine/swarm/
Docker Stackhttps://docs.docker.com/engine/swarm/stack-deploy/
管理ガイドhttps://docs.docker.com/admin/
本番環境での Composehttps://docs.docker.com/compose/production/
セキュアなデプロイhttps://docs.docker.com/engine/security/
Docker Enginehttps://docs.docker.com/engine/

🧭 Docker Skills の進め方

📍 現在の位置: docker-production — 本番環境へのデプロイ

← 前へ: docker-cicd | → 次へ: docker-troubleshooting

FAQ

Q1: 如何快速上手此技能? A: 参考上方的快速开始章节,按步骤操作即可。

Q2: 遇到版本不兼容问题怎么办? A: 检查依赖版本,使用 lock 文件锁定,参考常见陷阱章节。

Q3: 如何在生产环境使用? A: 参考最佳实践章节,确保配置正确,做好监控和日志。

Q4: 性能如何优化? A: 参考性能优化相关文档,使用缓存、索引等手段。

Q5: 如何贡献或反馈问题? A: 在 GitHub 仓库提交 Issue 或 Pull Request。

Q6: 是否支持中文? A: 支持中文文档和中文注释,详见国内适配章节。

コメント