O conteúdo a seguir descreve um breve resumo sobre docker swarm, vale a pena relembrar que os conceitos básicos do docker são altamente utilizados, tal como a escrita de Dockerfile’s e docker-compose.yaml’s.
Me agradeça depois http://labs.play-with-docker.com/
Files: Docker_Swarm_Arquivo
Basicamente vai ‘clusterizar’ os containers de maneira ‘redundante’ de modo que seja possível aumentar ou reduzir o número de conatiners - scale up / scale down de mandeira simples.
Quando se inicia o docker swarm a máquina (sim a máquina ou a vm o que quer que seja) se torna parte de um ‘cluster’, nao sei ao certo o limite de máquinas por clusters mas de alguma maneira mágica o swarm irá tomar conta de iniciar as instância e cuidar de qualquer coisa relacionada a ele:
No entanto é possível utilizar o docker normalmente sem o swarm - mesmo com o swarm rodando
Assim é possível adicionar ‘quantos nós se queira’ e assim ao iniciar o processo de ‘service’ - serviços o docker swarm irá escolher os nós e iniciar os containers nele, entenda que o swarm cuidará de:
Ao iniciar o docker swarm é gerado um token e o mesmo, por padrao, se torna uma ‘manager’ ou ‘leader’ que irá gerenciar os ‘nodes’ conectados a ele. Node é qualquer máquina que se conecte a um docker swarm manager, ele não podera rodar comandos docker swarm pois não tem privilégios, apenas recebe os comandos do leader/manager
Vale a pena dizer que todos os participantes de um cluster podem ser leader, não restrições, no entanto não é uma prática muito utilizada.
Tem a função de gerenciar e criar as redes / containers dentro dos outros nós e em sí mesmo, a manager também rodará containers
Nesse pequeno exemplo iremos utilizar 4 vms com o docker-ce instalado (já vem com o swarm junto), teremo 2 managers e 2 nós e rodaremos um simples alpine com ping.
Está tudo certo?
--- node1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.067/0.067/0.067 ms
[node1] (local) root@10.0.25.3 ~
$ ping -c 1 node2
PING node2 (10.0.25.4): 56 data bytes
64 bytes from 10.0.25.4: seq=0 ttl=64 time=0.510 ms
--- node2 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.510/0.510/0.510 ms
[node1] (local) root@10.0.25.3 ~
$ ping -c 1 node3
PING node3 (10.0.25.5): 56 data bytes
64 bytes from 10.0.25.5: seq=0 ttl=64 time=0.545 ms
--- node3 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.545/0.545/0.545 ms
[node1] (local) root@10.0.25.3 ~
$ ping -c 1 node4
PING node4 (10.0.25.6): 56 data bytes
64 bytes from 10.0.25.6: seq=0 ttl=64 time=0.562 ms
--- node4 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.562/0.562/0.562 ms
[node1] (local) root@10.0.25.3 ~
Sim!
Manager
[node1] (local) root@10.0.25.3 ~
$ docker swarm init --advertise-addr 10.0.25.3
Swarm initialized: current node (vwpdqjrby2jqjwrh5up0jqrq3) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-1n0x18tqo0byx7nrso8s1akqd4chtgtegtnhtwdybadaz5slm9-5ktat0y4gcg6iila03i589o9y \
10.0.25.3:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Nós
[node2] (local) root@10.0.25.4 ~
$ docker swarm join \
> --token SWMTKN-1-1n0x18tqo0byx7nrso8s1akqd4chtgtegtnhtwdybadaz5slm9-5ktat0y4gcg6iila03i589o9y \
> 10.0.25.3:2377
This node joined a swarm as a worker.
[node3] (local) root@10.0.25.5 ~
$ docker swarm join \
> --token SWMTKN-1-1n0x18tqo0byx7nrso8s1akqd4chtgtegtnhtwdybadaz5slm9-5ktat0y4gcg6iila03i589o9y \
> 10.0.25.3:2377
This node joined a swarm as a worker.
[node4] (local) root@10.0.25.6 ~
$ docker swarm join \
> --token SWMTKN-1-1n0x18tqo0byx7nrso8s1akqd4chtgtegtnhtwdybadaz5slm9-5ktat0y4gcg6iila03i589o9y \
> 10.0.25.3:2377
This node joined a swarm as a worker.
Verificando
[node1] (local) root@10.0.25.3 ~
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
9ggt09ftl8s4ugm6awbdz3xww node4 Ready Active
n2xks4t5hubgyr8ity7wlzpgo node3 Ready Active
umgn109ken9bkfz5skq0ab0iu node2 Ready Active
vwpdqjrby2jqjwrh5up0jqrq3 * node1 Ready Active Leader