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>
上記ターミナル画面に表示されている通り、マスタノードが管理したいワーカーノードを追加する場合は下記コマンドを実行してください。とメッセージがでます。
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
成功すれば、「This node joined a swarm as a worker.」と出る。
マスタとワーカーと繋ぐためのネットワークを構築
マスタとなるホスト上で下記のコマンドを叩きます。
docker network create -d overlay <任意のネットワーク名>
実行することで、マスタとワーカーのコンテナで通信できます。
おわりに
Docker PlayGroundを活用して、2台でのマスタノード、ワーカーノードの設定作業について説明しました。
3台以上で構成する場合も、2台目に実施した時と同じようにjoinコマンドを叩けばOKです。
気が向いたらServiceやStackを利用したコンテナデプロイについても書きます。
以上です。