CodeGym /コース /Docker SELF /Docker Swarmのイントロダクション

Docker Swarmのイントロダクション

Docker SELF
レベル 18 , レッスン 0
使用可能

6.1 Docker Swarmの基本コンセプト

Docker Swarmとは、Dockerが提供する組み込みのコンテナオーケストレーションシステムだよ。これを使えば、Dockerホストのクラスターを作成して管理したり、スケールアップするのが簡単になる。ホストを一つの論理的なホストに変換して、コンテナをそこで実行することができる。Swarmはタスクを自動でノード間に分散してくれるし、すごく便利で高い耐障害性もある。この講義では、Docker Swarmの主要なコンポーネントや基本的な管理コマンドについて見ていこう。

Docker Swarmの基本コンセプト:

  1. クラスター (Swarm): 一つにまとめられたDockerホストのグループ。
  2. マネージャー (Managers): クラスターを管理して、タスクをワーカーノードに分配するノード。
  3. ワーカーノード (Workers): タスクを遂行してコンテナを実行するノード。
  4. サービス (Services): アプリケーションを論理的に表現したもの。どんなタスクを実行するのか、そしてどれだけのコンテナインスタンスを起動するのかを示す。
  5. タスク (Tasks): サービスのインスタンスとなる単一のコンテナ。

Docker Swarmのアーキテクチャ:

Docker Swarm は、マネージャーとワーカーノードベースのアーキテクチャを使用してるんだ。マネージャーはクラスターの状態を管理し、ワーカーノードはタスクを処理するよ。

マネージャー:

  • クラスターの状態とその設定を管理する。
  • タスクをワーカーノードに分配する。
  • 複数のマネージャーがいる場合、高い耐障害性と可用性を提供する。

ワーカーノード:

  • マネージャーから割り当てられたタスクを実行する。
  • タスクに従ってコンテナを起動する。

Docker Swarmの基本コマンド:

  1. docker swarm init: 新しいSwarmクラスターを初期化。
  2. docker swarm join: 既存のクラスターにノードを参加させる。
  3. docker node ls: クラスター内のノードリストを見る。
  4. docker service create: 新しいサービスを作成する。
  5. docker service ls: 実行中のサービスを確認する。
  6. docker service scale: サービスを特定のインスタンス数にスケールアップする。
  7. docker service rm: クラスターからサービスを削除する。

Docker Swarmを使うことで、分散システムのアプリケーション管理が簡単になり、耐障害性、スケーラビリティ、デプロイの利便性を確保できるよ。

6.2 クラスターの作成 Docker Swarm

Docker Swarmクラスターの作成と管理

ステップ1: クラスターの初期化

最初のホスト(マネージャー)で以下のコマンドを実行:

Terminal

docker swarm init --advertise-addr <MANAGER_IPl>

このコマンドは新しいSwarmクラスターを初期化し、現在のノードをマネージャーに設定し、ワーカーノードをクラスターに参加させるためのコマンドを出力します。

ステップ2: ワーカーノードの参加

他のホストで、docker swarm init実行時に表示されたコマンドを実行し、それらをクラスターに参加させます:

Terminal

docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377

ここで:

  • <SWARM_TOKEN>: クラスターに接続するためのトークン (docker swarm init コマンドで発行されます)。
  • <MANAGER_IP>: マネージャーノードのIPアドレス。

ステップ3: ノードの確認

クラスター内の全ノードを確認するには、以下のコマンドを使用します:

Terminal

docker node ls

このコマンドは全ノードのリストを表示し、それらの役割、状態、利用可能性を確認できます。

コマンドdocker node lsの出力例

Terminal

ID                                    HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
qwertyuiop12345    manager-node        Ready               Active             Leader
asdfghjkl67890      worker-node1       Ready               Active
zxcvbnm09876       worker-node2       Ready               Active

列の説明:

  • ID: ノードのユニークな識別子。
  • HOSTNAME: ノードが動作しているホスト名。
  • STATUS: ノードの現在の状態 (例えば、Ready)。
  • AVAILABILITY: ノードの利用可能性 (例えば、Active)。
  • MANAGER STATUS: ノードがマネージャーかどうかを示します (例えば、Leader、Reachable)またはワーカーノード (空白)。

これでDocker Swarmクラスターが設定され、アプリケーションを作成およびスケーリングできます。

6.3 Docker Swarmの管理

Docker Swarmにおけるサービスの管理

1. サービスの作成

指定された数のレプリカで実行されるサービスを作成します:

ターミナル

docker service create --name my_web --replicas 3 -p 8080:80 nginx

この例では、サービスmy_webが作成されます。このサービスはNginxの3つのインスタンスを実行します。コンテナはポート80をホストのポート8080に公開します。

2. サービスの表示

クラスタ内のすべての実行中のサービスを表示するには、次のコマンドを使用します:

ターミナル

docker service ls

コマンドdocker service lsの出力例

ターミナル

ID                     NAME         MODE           REPLICAS     IMAGE
ab12345               my_web       replicated     3/3          nginx:latest

3. サービスのスケーリング

サービスのインスタンス数(レプリカ)を変更するには、docker service scaleコマンドを使用します:

ターミナル

docker service scale my_web=5

これでサービスmy_webは5つのインスタンスになります。

4. サービスの更新

サービスを新しいバージョンのイメージに更新するには、docker service updateコマンドを使用します:

ターミナル

docker service update --image nginx:latest my_web

高可用性の確保

Docker Swarmは以下の方法で高可用性をサポートします:

  1. タスクの分散: クラスタ内のノード間でタスクを分散し、障害時にコンテナを自動復元します。
  2. 複数のマネージャのサポート: クォーラムの問題を避けるために、奇数(例えば3または5)のマネージャを推奨します。
  3. レプリカの使用: 各サービスに複数のレプリカを設定して、フォールトトレランスを向上させます。

クォーラムの概念

クォーラムはノードの過半数を指し、特定のアクション(例えば、データの書き込みやリーダーの選定)を有効とみなすために、過半数が合意する必要があります。例えば、5つのノードで構成されるクラスタでは、クォーラムは3つのノードになります。

役立つヒント! マネージャを異なる物理的またはクラウドサーバーに配置して、一斉障害のリスクを最小限に抑えましょう。

6.4 Docker ComposeDocker Swarmの構成例

Docker ComposeDocker Swarmと一緒に使って、マルチコンテナアプリの管理を簡単にできるよ。

docker-compose.ymlファイルの例

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "8080-8090:80"
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure
    networks:
      - my_overlay_network

  db:
    image: postgres:latest
    environment:
      POSTGRES_PASSWORD: example
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
    networks:
      - my_overlay_network

networks:
  my_overlay_network:
    driver: overlay
    

Docker Swarmでのスタックの起動

Docker Swarmでスタックをデプロイするには、次のコマンドを使ってみて:

Terminal

docker stack deploy -c docker-compose.yml mystack

スタックの確認

デプロイされたスタックを確認するには:

Terminal

docker stack ls

スタック内のサービスの確認

Terminal

docker stack services mystack
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION