Sciame Docker è (noto anche come motore Docker in modalità swarm) una soluzione di clustering nativa che trasforma un gruppo di host Docker in un unico server virtuale logico. Swarm garantisce disponibilità e prestazioni elevate della tua applicazione distribuendola sul numero di host Docker all'interno di un cluster.
Inoltre, con Docker swarm puoi ridimensionare la tua applicazione orizzontalmente, ovvero aumentando il numero di istanze di container per la stessa applicazione.
La nostra infrastruttura
Per la dimostrazione, sto utilizzando un ambiente con sistema operativo misto:
HostName | Indirizzo IP | Sistema operativo | Scopo |
---|---|---|---|
dockerm.itgeek.local | 192.168.12.10 | CentOS 7 | Agisce come un gestore Docker che gestisce il motore Docker in esecuzione sui nodi. Docker Manager prenderà anche una parte di un cluster, ovvero eseguirà anche i container. |
node1.itzgeek.local | 192.168.12.20 | Ubuntu 16.04 | Nodo di lavoro 1 (motore Docker in esecuzione) |
node2.itzgeek.local | 192.168.12.30 | Fedora 26/25 | Nodo di lavoro 2 (motore Docker in esecuzione) |
Lo sciame di Docker era in precedenza uno strumento separato. Ora è integrato con il motore Docker da v 1.12 . Quindi, puoi semplicemente installare il Motore Docker su tutti i tuoi host (Nodi Manager e Worker ).
LEGGI :Come installare Docker Community Edition su CentOS 7 / RHEL 7
LEGGI :Come installare Docker Community Edition su Ubuntu 16.04
LEGGI :Come installare Docker Community Edition su Fedora 26 / Fedora 25
Firewall
Dovresti aprire le seguenti porte sul firewall affinché un cluster swarm funzioni correttamente.
CentOS/Fedora:
firewall-cmd --permanent --add-port=7946/tcp firewall-cmd --permanent --add-port=4789/udp firewall-cmd --permanent --add-port=7946/udp firewall-cmd --permanent --add-port=2376/tcp firewall-cmd --permanent --add-port=2377/tcp firewall-cmd --permanent --add-port=80/tcp ## We are Testing Docker Swarm with WebService firewall-cmd --reload
Ubuntu:
ufw status ufw allow 2376/tcp ufw allow 7946/tcp ufw allow 7946/udp ufw allow 2377/tcp ufw allow 4789/udp ufw allow 80/tcp ## We are Testing Docker Swarm with WebService ufw reload ufw enable
Riavvia il motore Docker dopo aver aperto le porte richieste poiché la catena del firewall influisce sulle regole della finestra mobile.
systemctl restart docker
Da qui in poi, tutti i comandi menzionati sono comandi docker universali, quindi puoi eseguire il comando su qualsiasi sistema operativo supportato da Docker (nel nostro caso, CentOS 7 , Ubuntu 16.04 e Fedora 26/25 ).
Crea uno sciame
Iniziamo la creazione di un cluster utilizzando "swarm init “. Esegui il comando seguente sul tuo nodo manager (dockerm.itzgeek.local ).
[root@dockerm ~]# docker swarm init --advertise-addr 192.168.12.10
–advertise-addr opzione specifica il nodo gestore per pubblicare il suo indirizzo come 192.168.12.10 in modo che il nodo di lavoro possa unirsi al cluster.
Risultato:
Swarm initialized: current node (uhh38rpazd5tnzjph2g5rhgxy) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \ --token SWMTKN-1-5y1u36a0osykywxeme2akpjp4jgx2l67mbqbc4fnazs39bp314-e6djx8ma2qnevolztpplkn26j \ 192.168.12.10:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
L'output sopra ha il token per aggiungere nodi di lavoro al cluster.
Visualizza lo stato attuale dello sciame usando il seguente comando.
[root@dockerm ~]# docker info
Risultato:
Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 17.03.1-ce Storage Driver: devicemapper Pool Name: docker-253:1-297-pool . . . . . . Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata Library Version: 1.02.135-RHEL7 (2016-11-16) Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host macvlan null overlay Swarm: active NodeID: uhh38rpazd5tnzjph2g5rhgxy Is Manager: true ClusterID: kp8tgowwcuiv3om0wzfgpngp7 Managers: 1 Nodes: 1 Orchestration: Task History Retention Limit: 5 Raft: Snapshot Interval: 10000 Number of Old Snapshots to Retain: 0 Heartbeat Tick: 1 Election Tick: 3 Dispatcher: Heartbeat Period: 5 seconds CA Configuration: Expiry Duration: 3 months Node Address: 192.168.12.10 Manager Addresses: 192.168.12.10:2377 Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe init version: 949e6fa Security Options: seccomp Profile: default Kernel Version: 3.10.0-123.el7.x86_64 Operating System: CentOS Linux 7 (Core) OSType: linux Architecture: x86_64 CPUs: 1 Total Memory: 979.9 MiB Name: dockerm.itzgeek.local ID: OTNI:UJZA:7CC4:TS5N:TVJ7:XXQE:5J7Q:ENWW:ZVPD:3VJI:F5DL:JYSP Docker Root Dir: /var/lib/docker Debug Mode (client): false Debug Mode (server): false Registry: https://index.docker.io/v1/ WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false
Puoi elencare i nodi Docker nello sciame con il seguente comando.
[root@dockerm ~]# docker node ls
Risultato:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS uhh38rpazd5tnzjph2g5rhgxy * dockerm.itzgeek.local Ready Active LeaderPagine:1 2