Docker Swarmの基本操作ガイド

概要

Swarmの概要

Docker Swarmは、複数のDockerホストで構成されるクラスタを管理するモードです。これらのホストには、管理者(manager)と作業者(worker)の役割があります。各ホストは単独で管理者としても動作できますし、作業者としても動作可能です。サービスを作成する際には、リプリカ数、ネットワーク設定、ストレージ、外部に公開するポートなどの状態を定義します。Dockerはこの状態を維持し、あるノードが利用不能になった場合、そのタスクを他のノードに再スケジュールします。

ノードの説明

ノードとは、Swarmクラスタに参加するDockerインスタンスのことです。アプリケーションをSwarmにデプロイする際には、管理ノードにサービス定義を送信し、管理ノードは対応するタスクを作業ノードに分配します。作業ノードは管理ノードから受け取ったタスクを実行し、定期的にその状態を管理ノードに報告します。これにより、管理ノードは各作業ノードが必要な状態を維持できるようになります。

サービスとタスク

サービスは、各ノード上で実行されるタスクの定義です。これはSwarmシステムの中核的な構造であり、ユーザーがSwarmと相互作用する主な方法でもあります。サービスを作成する際には、通常、コンテナイメージやその内部で実行されるコマンドを指定します。タスクは、特定のDockerコンテナとその内部で実行されるコマンドを含む最小単位であり、管理ノードによってリプリカ数に基づいて作業ノードに分配されます。

負荷分散

管理ノードはingress load balancingを使用してサービスを外部に公開し、外部からのアクセスを可能にします。ユーザーがポートを指定しない場合、Swarmマネージャーは30000-32767の範囲で自動的にPublishedPortを割り当てます。また、Swarmモードには自動的にDNSエントリを生成する内部DNS機能があり、サービス間のリクエストを内部ロードバランシングで配分します。

Swarmクラスタの構築

以下の手順でSwarmクラスタを構築できます。
  1. Swarmの初期化
    $ docker swarm init
    Swarm initialized: current node (abc123xyz) is now a manager.
    To add a worker to this swarm, run the following command:
        docker swarm join --token SWMTKN-1-abcdef123456 192.168.1.100:2377
    
  2. ノードの追加
    # docker swarm join --token SWMTKN-1-abcdef123456 192.168.1.100:2377
    This node joined a swarm as a worker.
    
  3. 作業者ノードを管理者に昇格
    $ docker node ls
    ID            HOSTNAME      STATUS       AVAILABILITY   MANAGER STATUS   ENGINE VERSION
    abc123xyz *   host1         Ready        Active         Leader           20.10.0
    def456uvw     host2         Ready        Active                     20.10.0
    
    $ docker node promote def456uvw
    Node def456uvw promoted to a manager in the swarm.
    

よく使用されるコマンド

  • swarm init - クラスタの初期化
  • swarm join - ノードの追加
  • service create - 新しいサービスの作成
    # docker service create --name myapp nginx:latest
    # docker service create --name myapp2 --replicas=2 nginx:latest
    
  • service inspect - サービスの詳細確認
    # docker service inspect myapp --pretty
    
  • service ls - 全てのサービスの一覧表示
    # docker service ls
    ID            NAME      MODE        REPLICAS  IMAGE          PORTS
    x1y2z3        myapp     replicated  1/1       nginx:latest   
    a1b2c3        myapp2    replicated  2/2       nginx:latest   
    
  • service rm - サービスの削除
    # docker service rm myapp
    
  • service scale - サービスのスケール変更
    # docker service scale myapp=3
    
  • service ps - サービスのタスク一覧
    # docker service ps myapp
    
  • service update - サービスの更新
    # docker service update --limit-cpu 2 myapp
    # docker service update --publish-add published=8080,target=80 myapp
    

タグ: Docker Swarm Container LoadBalancing

6月27日 18:24 投稿