6.1 Docker Swarm
の基本コンセプト
Docker Swarm
とは、Dockerが提供する組み込みのコンテナオーケストレーションシステムだよ。これを使えば、Dockerホストのクラスターを作成して管理したり、スケールアップするのが簡単になる。ホストを一つの論理的なホストに変換して、コンテナをそこで実行することができる。Swarmはタスクを自動でノード間に分散してくれるし、すごく便利で高い耐障害性もある。この講義では、Docker Swarm
の主要なコンポーネントや基本的な管理コマンドについて見ていこう。
Docker Swarm
の基本コンセプト:
- クラスター (Swarm): 一つにまとめられたDockerホストのグループ。
- マネージャー (Managers): クラスターを管理して、タスクをワーカーノードに分配するノード。
- ワーカーノード (Workers): タスクを遂行してコンテナを実行するノード。
- サービス (Services): アプリケーションを論理的に表現したもの。どんなタスクを実行するのか、そしてどれだけのコンテナインスタンスを起動するのかを示す。
- タスク (Tasks): サービスのインスタンスとなる単一のコンテナ。
Docker Swarm
のアーキテクチャ:
Docker Swarm は、マネージャーとワーカーノードベースのアーキテクチャを使用してるんだ。マネージャーはクラスターの状態を管理し、ワーカーノードはタスクを処理するよ。
マネージャー:
- クラスターの状態とその設定を管理する。
- タスクをワーカーノードに分配する。
- 複数のマネージャーがいる場合、高い耐障害性と可用性を提供する。
ワーカーノード:
- マネージャーから割り当てられたタスクを実行する。
- タスクに従ってコンテナを起動する。
Docker Swarm
の基本コマンド:
-
docker swarm init
: 新しいSwarmクラスターを初期化。 -
docker swarm join
: 既存のクラスターにノードを参加させる。 -
docker node ls
: クラスター内のノードリストを見る。 -
docker service create
: 新しいサービスを作成する。 -
docker service ls
: 実行中のサービスを確認する。 -
docker service scale
: サービスを特定のインスタンス数にスケールアップする。 -
docker service rm
: クラスターからサービスを削除する。
Docker Swarm
を使うことで、分散システムのアプリケーション管理が簡単になり、耐障害性、スケーラビリティ、デプロイの利便性を確保できるよ。
6.2 クラスターの作成 Docker Swarm
Docker Swarmクラスターの作成と管理
ステップ1: クラスターの初期化
最初のホスト(マネージャー)で以下のコマンドを実行:
docker swarm init --advertise-addr <MANAGER_IPl>
このコマンドは新しいSwarmクラスターを初期化し、現在のノードをマネージャーに設定し、ワーカーノードをクラスターに参加させるためのコマンドを出力します。
ステップ2: ワーカーノードの参加
他のホストで、docker swarm init
実行時に表示されたコマンドを実行し、それらをクラスターに参加させます:
docker swarm join --token <SWARM_TOKEN> <MANAGER_IP>:2377
ここで:
<SWARM_TOKEN>
: クラスターに接続するためのトークン (docker swarm init
コマンドで発行されます)。<MANAGER_IP>
: マネージャーノードのIPアドレス。
ステップ3: ノードの確認
クラスター内の全ノードを確認するには、以下のコマンドを使用します:
docker node ls
このコマンドは全ノードのリストを表示し、それらの役割、状態、利用可能性を確認できます。
コマンドdocker node ls
の出力例
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は以下の方法で高可用性をサポートします:
- タスクの分散: クラスタ内のノード間でタスクを分散し、障害時にコンテナを自動復元します。
- 複数のマネージャのサポート: クォーラムの問題を避けるために、奇数(例えば3または5)のマネージャを推奨します。
- レプリカの使用: 各サービスに複数のレプリカを設定して、フォールトトレランスを向上させます。
クォーラムの概念
クォーラムはノードの過半数を指し、特定のアクション(例えば、データの書き込みやリーダーの選定)を有効とみなすために、過半数が合意する必要があります。例えば、5つのノードで構成されるクラスタでは、クォーラムは3つのノードになります。
役立つヒント!
マネージャを異なる物理的またはクラウドサーバーに配置して、一斉障害のリスクを最小限に抑えましょう。
6.4 Docker Compose
とDocker Swarm
の構成例
Docker Compose
はDocker Swarm
と一緒に使って、マルチコンテナアプリの管理を簡単にできるよ。
docker-compose.yml
ファイルの例
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
でスタックをデプロイするには、次のコマンドを使ってみて:
docker stack deploy -c docker-compose.yml mystack
スタックの確認
デプロイされたスタックを確認するには:
docker stack ls
スタック内のサービスの確認
docker stack services mystack
GO TO FULL VERSION