docker-swarm について
docker-swarmは、Docker Swarmクラスターの構築と運用、プロダクション環境へのデプロイを案内するスキルです。可用性、サービス管理、設定、トラブルシューティングを扱います。
主な機能
- 01クラスターの初期化とノード参加
- 02マネージャーの高可用性設定
- 03サービスとスタックのデプロイ・拡張
- 04シークレットと設定の管理
- 05ノード保守と障害調査
活用シーン
- 01複数ノードのSwarmクラスター構築
- 02本番サービスやスタックのデプロイ
- 03シークレットのローテーションやノード保守
- 04スケジューリングやクォーラム問題の診断
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pluginagentmarketplace/ custom-plugin-docker --skill docker-swarmインストール後、Claude Code で/docker-swarmを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/swarm-stack.yamlreferences/SWARM-GUIDE.mdscripts/swarm-init.sh詳細
Docker Swarm スキル
コンテナオーケストレーション、クラスター管理、本番環境へのデプロイに向けて Docker Swarm を習得します。
目的
高可用性、サービスのスケーリング、本番環境のオーケストレーションを実現するために、Docker Swarm クラスターをセットアップおよび管理します。
パラメーター
| パラメーター | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
| managers | 数値 | いいえ | 3 | マネージャーノードの数 |
| workers | 数値 | いいえ | - | ワーカーノードの数 |
| encrypted | ブール値 | いいえ | true | オーバーレイネットワークを暗号化します |
クラスターのセットアップ
Swarm の初期化
# Initialize on first manager
docker swarm init --advertise-addr <MANAGER_IP>
# Get join tokens
docker swarm join-token worker
docker swarm join-token manager
# Join as worker
docker swarm join --token <WORKER_TOKEN> <MANAGER_IP>:2377
# Join as manager
docker swarm join --token <MANAGER_TOKEN> <MANAGER_IP>:2377
高可用性(マネージャー 3 台または 5 台)
# Manager quorum: N/2 + 1
# 3 managers = tolerates 1 failure
# 5 managers = tolerates 2 failures
サービスのデプロイ
基本サービス
# Create service
docker service create \
--name webapp \
--replicas 3 \
--publish 80:80 \
nginx:alpine
# Scale
docker service scale webapp=5
# Update image
docker service update --image nginx:1.25-alpine webapp
# Rollback
docker service rollback webapp
サービスの完全な設定
docker service create \
--name api \
--replicas 3 \
--network backend \
--publish 8080:3000 \
--mount type=volume,source=data,target=/data \
--secret db_password \
--env NODE_ENV=production \
--limit-cpu 0.5 \
--limit-memory 512M \
--update-delay 10s \
--update-parallelism 1 \
--update-failure-action rollback \
--health-cmd "curl -f http://localhost:3000/health" \
--health-interval 30s \
myapp:latest
スタックのデプロイ
本番環境向けスタック
# stack.yaml
services:
frontend:
image: frontend:${VERSION:-latest}
deploy:
replicas: 3
placement:
constraints:
- node.role == worker
update_config:
parallelism: 1
delay: 10s
failure_action: rollback
resources:
limits:
cpus: '0.5'
memory: 256M
ports:
- "80:80"
networks:
- frontend
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
backend:
image: backend:${VERSION:-latest}
deploy:
replicas: 3
secrets:
- db_password
networks:
- frontend
- backend
networks:
frontend:
driver: overlay
backend:
driver: overlay
internal: true
secrets:
db_password:
external: true
# Deploy stack
docker stack deploy -c stack.yaml myapp
# List services
docker stack services myapp
# Remove stack
docker stack rm myapp
シークレットと設定
シークレット
# Create secret
echo "password" | docker secret create db_password -
# Use in service
docker service update --secret-add db_password myservice
# Rotate secret
echo "newpassword" | docker secret create db_password_v2 -
docker service update \
--secret-rm db_password \
--secret-add source=db_password_v2,target=db_password \
myservice
設定
# Create config
docker config create nginx_config ./nginx.conf
# Use in service
docker service create \
--config source=nginx_config,target=/etc/nginx/nginx.conf \
nginx
ノード管理
# List nodes
docker node ls
# Drain node (maintenance)
docker node update --availability drain <node>
# Activate node
docker node update --availability active <node>
# Add label
docker node update --label-add role=database <node>
# Promote to manager
docker node promote <node>
# Demote from manager
docker node demote <node>
エラー処理
よくあるエラー
| エラー | 原因 | 解決策 |
|---|---|---|
no suitable node | 制約を満たしていません | 制約を緩和するか、ノードを追加します |
not converging | ヘルスチェックに失敗しています | サービスログを確認します |
Raft: no leader | クォーラムが失われています | マネージャーを復旧します |
マネージャーの復旧
# If quorum lost, force new cluster
docker swarm init --force-new-cluster --advertise-addr <IP>
トラブルシューティング
デバッグチェックリスト
- Swarm はアクティブですか?
docker info | grep Swarm - ノードは正常ですか?
docker node ls - サービスは実行中ですか?
docker service ls - タスクは配置されていますか?
docker service ps <svc>
診断
# Service status
docker service ls
# Task status
docker service ps <service> --no-trunc
# Service logs
docker service logs -f <service>
# Node issues
docker node inspect <node> --pretty
使用方法
Skill("docker-swarm")
アセット
assets/swarm-stack.yaml- スタックテンプレートscripts/swarm-init.sh- 初期化スクリプト
関連スキル
- docker-networking
- docker-security
- docker-production
コメント
Markdown 対応