はじまる

適当な事を適当に書く

docker やり直しメモ(4)

パート4:群(Swarm)

Get Started, Part 4: Swarms | Docker Documentation の内容をやります。

1. スウォームとは

Dockerを実行していてクラスタに参加しているマシンのグループです。クラスタswarm manager によって管理されます。 スウォームに参加しているマシンは、物理マシン・仮想マシン両方の場合で、ノードとよばれます。スウォームマネージャーは、スウォーム内であなたのコマンドを実行できる唯一のマシンです。スウォームマネージャーは、他のマシンがスウォームにワーカーとして参加することも許可できます。ワーカーは、能力を提供するためだけに存在し、他のマシンに何ができるかできないかを伝える権限を持っていません。

~/H/docker2 ❯❯❯ docker swarm --help

Usage:  docker swarm COMMAND

Manage Swarm

Options:


Commands:
  ca          Display and rotate the root CA
  init        Initialize a swarm
  join        Join a swarm as a node and/or manager
  join-token  Manage join tokens
  leave       Leave the swarm
  unlock      Unlock swarm
  unlock-key  Manage the unlock key
  update      Update the swarm

Run 'docker swarm COMMAND --help' for more information on a command.

2. スウォームを作成する

VMを作成する。

docker-machine コマンドを利用して、仮想マシンを2つ作成してみます。この動作には virtualbox が必要です。

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

こんな感じになります。

~/H/docker4 ❯❯❯ docker-machine create --driver virtualbox myvm1
Running pre-create checks...
(myvm1) Default Boot2Docker ISO is out-of-date, downloading the latest release...
(myvm1) Latest release for github.com/boot2docker/boot2docker is v18.05.0-ce
(myvm1) Downloading /Users/satoru/.docker/machine/cache/boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v18.05.0-ce/boot2docker.iso...
(myvm1) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%
Creating machine...
(myvm1) Copying /Users/satoru/.docker/machine/cache/boot2docker.iso to /Users/satoru/.docker/machine/machines/myvm1/boot2docker.iso...
(myvm1) Creating VirtualBox VM...
(myvm1) Creating SSH key...
(myvm1) Starting the VM...
(myvm1) Check network to re-create if needed...
(myvm1) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env myvm1

Virtualbox の画面でも仮想マシンが作成されていますね。

gyazo.com

VMIPアドレスを確認する

~/H/docker4 ❯❯❯ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
myvm1   -        virtualbox   Running   tcp://192.168.99.100:2376           v18.05.0-ce
myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v18.05.0-ce

Swarm を初期化する

myvm1を swarm manager に指定します。

~/H/docker4 ❯❯❯ docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100"
Swarm initialized: current node (ph13skaro0wq0010iau1jt5i5) is now a manager.

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

    docker swarm join --token SWMTKN-1-2vquyyieen6whiz3pmtidp7a7q9mxzaxeiz4q7wszz0dgmiste-cnxryi4ktbxro2jzt68t9wb3o 192.168.99.100:2377

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

myvm2 を ノードとして swarm に追加します。

~/H/docker4 ❯❯❯ docker-machine ssh myvm2 "docker swarm join --token SWMTKN-1-2vquyyieen6whiz3pmtidp7a7q9mxzaxeiz4q7wszz0dgmiste-cnxryi4ktbxro2jzt68t9wb3o 192.168.99.100:2377"
This node joined a swarm as a worker.
~/H/docker4 ❯❯❯ docker-machine ssh myvm1 "docker node ls"
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
ph13skaro0wq0010iau1jt5i5 *   myvm1               Ready               Active              Leader              18.05.0-ce
xyqexicll5f17le0n4w5e6epu     myvm2               Ready               Active                                  18.05.0-ce

環境変数を確認します。

自分のローカルにmyvm1の環境変数を設定します。

~/H/docker4 ❯❯❯ eval $(docker-machine env myvm1)
~/H/docker4 ❯❯❯ env|ag DOCKER
DOCKER_TLS_VERIFY=1
DOCKER_HOST=tcp://192.168.99.100:2376
DOCKER_CERT_PATH=/Users/me/.docker/machine/machines/myvm1
DOCKER_MACHINE_NAME=myvm1