IT技術で仕事を減らしたい!

ITエンジニアのメモ+α

Docker Swarmモードの設定

どうも、nippa です。

docker をマルチサーバで共通して使いたいと思い、 swarm モードを利用してみようと思います。

今回は swarm モードの設定をになります。

Docker Swarm モードとは

docker エンジンを使った、クラスター管理モードです。マルチサーバ上で、docker を利用する場合に適しています。

また、docker ベースなので、サーバ環境の移行や、スケールリングが比較的容易にできる点が非常に便利です。

環境

Virtual Box 上に Linux サーバを 2 台構築

  • ubuntu 20.04
  • メモリ:2GB
  • ストレージ: 10GB

サーバは

  • Manager サーバ(manager node + work node)
  • Worker サーバ(work node)

と定義します。()の中は swarm モードでの node 構成を示しています。

ホストの登録

サーバが相互でホスト参照できるように/etc/hostsにホスト情報を登録しておきます。

sudo vim /etc/hosts

# 以下の形式で両サーバに登録する
[ホスト1のIP] [ホスト名1]
[ホスト2のIP] [ホスト名2]

Manager サーバ Swarm モードの設定

Swarm がアクティブになっているかを確認します。

以下のコマンドを実行して、Swarm: activeになっているかを確認します。

docker system info | grep Swarm

Swarm: inactiveの場合は、以下のコマンドで swarm モードをアクティブにします。

docker swarm init

ネットワーク接続が 2 つ以上の場合は、swarm モードで利用する IP を指定する必要があります。

docker swarm init --advertise-addr [IPアドレス]

swarm モードがアクティブになると、以下のような出力がされます。

Swarm initialized: current node ([node ID]) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token [SWARMトークン] [IPアドレス]:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

node の設定状況は

docker node ls

で確認できます。

これで Manager サーバの設定は完了になります。

Worker サーバの追加

ホスト間の通信プロトコルは以下のようになっています。

ポート 通信方式 用途
2377 TCP クラスター管理における通信
7946 TCP ノード間の通信のため
4789 UDP オーバーレイネットワークのトラフィックのため
50 EPP オーバーレイネットワークを暗号化(--opt encrypted)で利用する場合

ホスト間でのプロトコルとポートの開放

上記については、サーバ間の通信の許可しておく必要があります。

worker サーバで、swarm モードがアクティブになった際に表示されたコマンドを実行して、swarm モードに worker サーバを追加します。

# workerサーバ
docker swarm join --token  [SWARMトークン] [IPアドレス]:2377

worker サーバが複数ある場合は、各サーバで swarm モードへの追加をコマンドを実行してください。

トークン、IP の確認は、Manager サーバで

# managerサーバ
docker swarm join-token manager

を実行すると確認できます。

また、node が追加されたことは、manager サーバで確認できます。

# managerサーバ
docker node ls

# 出力
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
rnlr2ria5qdkz07uspzgnm5lq *   manager    Ready     Active         Leader           20.10.14
z73grf2bdca0mkzz8j44ep7sm     worker     Ready     Active                          20.10.14

サービスのデプロイ

docker service createでサービスを作成します。

docker service create --replicas 1 --name helloworld alpine ping docker.com

manager サーバでサービスの状態の確認をします。

# managerサーバ
docker service ls

サービスの詳細は以下で確認します。

docker service inspect --pretty [サービス名]

サービスの詳細は以下で確認します。

docker service ps helloworld

サービスのスケール変更

サービスのスケール変更は以下のコマンドで行います。

# スケールの変更
docker service scale <サービスID>=<タスク数>

# helloworld を実行する node を5とする場合
docker service scale helloworld=5

サービスのノードが変わったことは以下で確認できます。

docker service ps helloworld

サービスの削除

以下のコマンドでサービスを削除します。

docker service rm helloworld

サービスが削除されるとサービス詳細を確認すると、エラーになることを確認します。

docker service inspect helloworld

# 出力
[]
Error: no such service: helloworld

感想

今回 docker swarm モードについてまとめました。

クラスターで利用する場合に、非常に便利なモードです。

swarm モードの実践的なデプロイ方法やネットワーク関連をまとめたいと思います。

ではでは、また次回。