docker を使ってみる (チュートリアル Part4: Swarm)
Docker
Published: 2019-10-20

やったこと

docker を使ってみます。

チュートリアルの Part4 です。

調査

Swarmクラスタの理解

swarm とは Docker が動作し、クラスタに参加しているマシン・グループです。

swarm 上のマシンは物理あるいは仮想どちらも使えます。swarm に加わった後は、これらは ノード として参照されます。

$ docker swarm init

swarm mode を有効化し、現在のマシンを swarm マネージャにします。

仮想マシン の作成

$ docker-machine create --driver virtualbox myvm1
$ docker-machine create --driver virtualbox myvm2

swarm の初期化

$ docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100:2377"
Swarm initialized: current node (xxxxxxxxxxx) is now a manager.

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

    docker swarm join --token [my_token] 192.168.99.100:2377

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

これで myvm1 が swarm manager となりました。

myvm2 を join する

$ docker-machine ssh myvm2 "docker swarm join \
--token [my_token] \
192.168.99.100:2377"
This node joined a swarm as a worker.

my_token は自分の token に置き換えてください。

node 確認

$ docker-machine ssh myvm1 "docker node ls"
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
2y7x69ce4gkm0eewep0meoyjk *   myvm1               Ready               Active              Leader              19.03.3
x3pmieqf6lri4b4wqp7hhgrw7     myvm2               Ready               Active                                  19.03.3

デプロイ

$ docker-machine scp docker-compose.yml myvm1:~
$ docker-machine ssh myvm1 "docker stack deploy -c docker-compose.yml getstartedlab"

※ docker-compose.yml は Part3 で使ったものを使用します。

image は Docker Hub にアップロードしているものを使います。

スタック (stack) の確認

$ docker-machine ssh myvm1 "docker stack ps getstartedlab"
ID                  NAME                         IMAGE                             NODE                DESIRED STATE       CURRENT STATE          ERROR               PORTS
ocgug6lzsq8t        getstartedlab_web.1          hogehoge/get-started:part1      myvm1               Running             Running 21 hours ago
wwq7y0fp5a8k        getstartedlab_web.2          hogehoge/get-started:part1      myvm2               Running             Running 21 hours ago
oyeqksqowa9x        getstartedlab_web.3          hogehoge/get-started:part1      myvm1               Running             Running 21 hours ago
jl7rqoy40yxl        getstartedlab_web.4          hogehoge/get-started:part1      myvm2               Running             Running 21 hours ago
qrrp9ft7fv87        getstartedlab_web.5          hogehoge/get-started:part1      myvm2               Running             Running 21 hours ago
$ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
myvm1   -        virtualbox   Running   tcp://192.168.99.100:2376           v19.03.3
myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v19.03.3

192.168.99.100 192.168.99.101 にアクセスすると、5つのコンテナのいずれかにアクセスします。

swarm を削除する

$ docker-machine ssh myvm2 "docker swarm leave"
$ docker-machine ssh myvm1 "docker swarm leave --force"

参考