docker-production について
Dockerの本番デプロイを扱うガイダンススキルです。単一ホスト構成、Swarmクラスター、ローリングアップデート、Kubernetes移行、監視と運用・セキュリティ上の注意点を解説します。
主な機能
- 01単一ホストでのComposeデプロイ手順
- 02SwarmクラスターとStackの解説
- 03ローリングアップデートとロールバックの説明
- 04ComposeからKubernetesへの移行案内
- 05Prometheus、cAdvisor、Grafanaによる監視の紹介
活用シーン
- 01本番環境へのDocker Composeサービスのデプロイ
- 02Swarmクラスターとアプリ更新の管理
- 03Compose設定のKubernetesへの移行
- 04コンテナサービスの監視環境の構築
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ full-stack-skills/ docker-skills --skill docker-productionインストール後、Claude Code で/docker-productionを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlexamples/01-swarm-stack.mdreferences/01-swarm-commands.md02-k8s-migration.md03-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 .
| Compose | K8s |
|---|---|
| services | Deployments + Services |
| networks | Network Policies |
| volumes | PersistentVolumeClaims |
| deploy.replicas | Deployment.spec.replicas |
| secrets | Secrets |
監視スタック
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 |
| ⚠️ 条件付き | 複数データセンターの Swarm | overlay ネットワーク + 低遅延接続が必要 |
| ⚠️ 条件付き | ゼロダウンタイムでの 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 Swarm | https://docs.docker.com/engine/swarm/ |
| Docker Stack | https://docs.docker.com/engine/swarm/stack-deploy/ |
| 管理ガイド | https://docs.docker.com/admin/ |
| 本番環境での Compose | https://docs.docker.com/compose/production/ |
| セキュアなデプロイ | https://docs.docker.com/engine/security/ |
| Docker Engine | https://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: 支持中文文档和中文注释,详见国内适配章节。