どうも、nippa です。
docker をマルチサーバで共通して使いたいと思い、 swarm モードを利用してみようと思います。
今回は swarm モードの設定をになります。
- Docker Swarm モードとは
- 環境
- ホストの登録
- Manager サーバ Swarm モードの設定
- Worker サーバの追加
- サービスのデプロイ
- サービスのスケール変更
- サービスの削除
- 感想
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 モードの実践的なデプロイ方法やネットワーク関連をまとめたいと思います。
ではでは、また次回。