Ahogy már írtam fentebb, a swarm master-nek mindenképpen szüksége van egy discovery szolgáltatóra, hogy meg tudja találni a node-okat. A DocerkHub egy ingyenes, bárki számára elérhető discovery szolgáltatást nyújt. Ez azonban csak tesztelési és fejlesztési célokra használható, produkciós környezetben nem. Cserébe nagyon egyszerű a használata, mert nem kell hozzá extra szoftver komponenseket telepíteni, össz-vissz annyira van szükségünk, hogy a swarm-ot futtató VM-eknek legyen publikus internet elérése, hogy elérjék a DockerHub-ot.
==Swarm cluster létrehozása==
===Cluster regisztrálása===
Elsőként regisztrálni kell az új swarm cluster-ünket a Docker Hub-on, ami a discovery szolgáltatás szerepét tölti most be. A regisztráció végén a Docker Hub vissza fogja adni az új cluster azonosítóját, amivel a node-ok regisztrálni tudják magukat, és amivel a master bekérdezhet a discovery a Docker Hub-ba, hogy lekérdezze a cluster node-ok listáját. A regisztrációt a ''''swarm'''' nevű konténer futtatásával tehetjük meg, aminek az argumentuma a ''''create''''
A swarm konténert '''--rm''' kapcsolóval futtatjuk, vagyis el is távolítjuk, amint lefutott.
<pre>
# docker run --rm swarm create
Token based discovery is now deprecated and might be removed in the future.
It will be replaced by a default discovery backed by Docker Swarm Mode.
Other mechanisms such as consul and etcd will continue to work as expected.
4d245124e7feba5224a117bdd83c9acc
</pre>
Amikor a swarm konténer kiírja a konzolra az új cluster azonosítóját, majd kilép. Ahogy láthatjuk.
{{note|Láthatjuk, hogy a docker figyelmeztet minket, hogy a token alapú swarm classic használata már elavult.}}
A regisztrációt a swarm konténer itt végzi el: https://registry-1.docker.io/v2/. Ha nem tudja elérni ezt a publikus host-ot, akkor a konténer hibát fog dobni.
https://docs.docker.com/swarm/reference/manage/
http://harrylee.me/2016/08/23/Docker-Docker-Swarm-with-Docker-Machine-Quick-Setup-Guide/
===Master létrehozása===
https://www.w3cschool.cn/doc_docker_1_10/docker_1_10-swarm-install-manual-index.html
<pre>
# docker-machine create -d kvm --kvm-network "docker-network" manager
Running pre-create checks...
...
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 manager
</pre>
<pre>
# docker-machine ssh manager
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 18.05.0-ce, build HEAD : b5d6989 - Thu May 10 16:35:28 UTC 2018
Docker version 18.05.0-ce, build f150324
docker@manager:~$
</pre>
Mikor a manager-t létrehozzuk, akkor ugyan azt a swarm konténert futtatjuk, amivel regisztráltuk a cluster-t a Docker Hub-on, csak most nem a create hanem a manager paraméterrel, innen fogja tudni a swarm, hogy manager konténert kell létrehoznia. A második paraméter a cluster azonosítója a Docker Hub-on, aminek a segítségével le tudja kérdezni a node-ok listáját a manager.
<pre>
docker@manager:~$ docker run -d -p 4000:4000 swarm manage -H :4000 --advertise 192.168.42.83:4000 token://4d245124e7feba5224a117bdd83c9acc
Unable to find image 'swarm:latest' locally
latest: Pulling from library/swarm
d85c18077b82: Pull complete
1e6bb16f8cb1: Pull complete
85bac13497d7: Pull complete
Digest: sha256:406022f04a3d0c5ce4dbdb60422f24052c20ab7e6d41ebe5723aa649c3833975
Status: Downloaded newer image for swarm:latest
19e2e236a8bc1aab1d7aab5bad17fb66af7184380457f7ee4de3a4e046c599ae
</pre>
===Node-ok létrehozása===
<pre>
# docker-machine create -d kvm --kvm-network "docker-network" node1
...
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 node1
</pre>
<pre>
# docker-machine ip node1
192.168.42.164
</pre>
<pre>
# docker-machine ssh node1
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 18.05.0-ce, build HEAD : b5d6989 - Thu May 10 16:35:28 UTC 2018
Docker version 18.05.0-ce, build f150324
</pre>
<pre>
docker@node1:~$ docker run -d \
> --restart=always swarm join \
> --addr=192.168.42.164:2376 \
> token://4d245124e7feba5224a117bdd83c9acc
Unable to find image 'swarm:latest' locally
latest: Pulling from library/swarm
d85c18077b82: Pull complete
1e6bb16f8cb1: Pull complete
85bac13497d7: Pull complete
Digest: sha256:406022f04a3d0c5ce4dbdb60422f24052c20ab7e6d41ebe5723aa649c3833975
Status: Downloaded newer image for swarm:latest
34e10a5463faa9b42556914822e5a20281cebdbcd7b0539a90cc6fea0f876e2c
</pre>
<pre>
docker@node1:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
34e10a5463fa swarm "/swarm join --addr=…" 30 seconds ago Up 29 seconds 2375/tcp kind_goldberg
</pre>
==Mi jött létre==
<pre>
# docker run --rm swarm list token://4d245124e7feba5224a117bdd83c9acc
192.168.42.231:2376
192.168.42.164:2376
</pre>
<pre>
$ docker -H :4000 info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: swarm/1.2.9
Role: primary
Strategy: spread
Filters: health, port, containerslots, dependency, affinity, constraint, whitelist
Nodes: 2
(unknown): 192.168.42.231:2376
└ ID:
└ Status: Pending
└ Containers: 0
└ Reserved CPUs: 0 / 0
└ Reserved Memory: 0 B / 0 B
└ Labels:
└ UpdatedAt: 2018-07-06T23:38:41Z
└ ServerVersion:
(unknown): 192.168.42.164:2376
└ ID:
└ Status: Pending
└ Containers: 0
└ Reserved CPUs: 0 / 0
└ Reserved Memory: 0 B / 0 B
└ Labels:
└ UpdatedAt: 2018-07-06T23:38:41Z
└ ServerVersion:
</pre>
=Swarm cluster 'Consul' használatával=