📘

Docker Swarmに入門する

2022/07/26に公開

Docker Swarmとは

複数のDockerホストを束ねてクラスタを構成するツール。
どのホストにどのコンテナを配置すべきか、ホストをまたいだコンテナ同士の通信制御といったコンテナオーケストレーションの役割を果たす。

Dockerでの名称のまとめ

よく出てくるワードを下記にまとめる。

名称 役割 コマンド
Compose 複数コンテナを使うDockerアプリの管理(シングルホスト) docker-compose
Swarm クラスタ構築や管理を担う(マルチホスト) docker swarm
Service クラスタ内のService(コンテナの集まり)を管理する docker service
Stack 複数のServiceをまとめたアプリ全体の管理 docker stack

Docker Swarmクラスタを構成する方法

サーバを複数台を用意して、それぞれDocker環境を構築する。

Docker Playgroundを利用すればDockerホスト(Ubuntu)をカンタンに追加できるので、利用します。
また学習目的のため、インフラコストの出費を避ける狙いもあります。

マスタノードとなるホストでの設定

+ADD NEW INSTANCEのボタンを押下して、マスタノードとなるホストを追加します。
そして、マスタノードとなるホストのターミナルで下記のコマンドを叩きます。

# Initialize
docker swarm init --advertise-addr <マスタノードのIP>

実行結果のサンプルclip-20201001142126.png

上記ターミナル画面に表示されている通り、マスタノードが管理したいワーカーノードを追加する場合は下記コマンドを実行してください。とメッセージがでます。

 docker swarm join --token <トークン> <マスタノードのIP>:<マスタノードのPORT>

スレーブとなるホスト(ワーカーノード)を追加する

+ADD NEW INSTANCEのボタンを押下して、ワーカーノードとなるホストを追加します。
スレーブとなるDockerホスト上で下記コマンドを叩きます。
先程のスクリプトをハンドコピーせず、コマンドで取得することで、スクリプトによる自動化を可能としました。(とはいえ、今回のマスタノードIPはハンド入力なんですが)

# マスタノードからトークン取得する
token=$(ssh -o StrictHostKeyChecking=no <マスタノードのIP> "docker swarm join-token -q worker") && echo $token

# workerとして追加
docker swarm join  <マスタノードのIP>:<マスタノードのPORT> --token $token

実行結果clip-20201001151834.png

成功すれば、「This node joined a swarm as a worker.」と出る。

マスタとワーカーと繋ぐためのネットワークを構築

マスタとなるホスト上で下記のコマンドを叩きます。

docker network create -d overlay <任意のネットワーク名>

実行することで、マスタとワーカーのコンテナで通信できます。

実行結果clip-20201001152431.png

Discussion