mcpField
D
docker-swarm

docker-swarm

github.com/pluginagentmarketplaceクラウド・DevOps267 回インストール43 週間前に更新
リポジトリ

docker-swarm について

docker-swarmは、Docker Swarmクラスターの構築と運用、プロダクション環境へのデプロイを案内するスキルです。可用性、サービス管理、設定、トラブルシューティングを扱います。

主な機能

  1. 01クラスターの初期化とノード参加
  2. 02マネージャーの高可用性設定
  3. 03サービスとスタックのデプロイ・拡張
  4. 04シークレットと設定の管理
  5. 05ノード保守と障害調査

活用シーン

  1. 01複数ノードのSwarmクラスター構築
  2. 02本番サービスやスタックのデプロイ
  3. 03シークレットのローテーションやノード保守
  4. 04スケジューリングやクォーラム問題の診断

インストール

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

$npx skills add https://github.com/pluginagentmarketplace/custom-plugin-docker --skill docker-swarm

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

同梱ファイル

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

assets/
swarm-stack.yaml
references/
SWARM-GUIDE.md
scripts/
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

コメント