Raspberry PiクラスタにDocker Swarm環境を構築した際の手順備忘録になります。
そもそもDocker Swarmとは?
Dockerコンテナのオーケストレーションツールです。
同じコンテナオーケストレーションツールには有名どころでKubernetesがありますが、Kubernetesと比べると格段に導入コストは低いと個人的には思っています。
現在のKubernetesのコンテナランタイムはcontainerdがデフォルトになっていますが、Docker SwarmはDockerに備わっている機能のため、Dockerの知識さえあれば使えるのも魅力です。
事前条件
ネットワーク構成は、以前Kubernetesクラスタを構築した時と同様の構成にしています。詳しくはこちらを参照してください。
また、各ノードにdockerはインストール済みとします。
masterノードの構築
masterノード内で下記コマンドを実行する
docker swarm init --advertise-addr <masterノードのIPアドレス>
実行例
pi@master:~ $ docker swarm init --advertise-addr 192.168.1.111
Swarm initialized: current node (xk7z4cc5fplofxj64y3lrvk0x) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token <トークン> 192.168.1.111:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
workerノードの追加
workerノード内でdocker swarm init
実行時に表示されたコマンドを実行すればOK
docker swarm join --token <トークン> 192.168.1.111:2377
確認
masterノードで下記コマンドを実行する
pi@master:~ $ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xk7z4cc5fplofxj64y3lrvk0x * master Ready Active Leader 20.10.17
fzpgf5jfphqbi3sft7d7w4jps worker1 Ready Active 20.10.17
iucxr6uzd8eeosxfxqvynwvrd worker2 Ready Active 20.10.17
docker swarm joinを実行したノードが追加されていること、STATUSに問題がないことを確認できればOK
Swarm環境でサービスを起動する
docker service
コマンドを実行することでswarm環境上にサービスを起動します。
基本的にはdockerコンテナ立ち上げる時とオプションはあまり変わりません。
--replicas
オプションで指定した数だけサービスが起動します。
docker service create \
--name my-nginx \
--mount type=bind,src=/data,dst=/sample_volume \
--publish 8080:80 \
--replicas=2 \
nginx:latest
サービスの起動状況はdocker service ls
コマンドで確認できます。