Dockerschwarm ist (auch bekannt als Docker-Engine im Schwarmmodus) eine native Clustering-Lösung, die eine Gruppe von Docker-Hosts zu einem einzigen logischen virtuellen Server macht. Swarm stellt die Verfügbarkeit und hohe Leistung Ihrer Anwendung sicher, indem es sie über die Anzahl der Docker-Hosts innerhalb eines Clusters verteilt.
Außerdem können Sie mit Docker Swarm Ihre Anwendung horizontal skalieren, d. h. die Anzahl der Containerinstanzen für dieselbe Anwendung erhöhen.
Unsere Infrastruktur
Für die Demonstration verwende ich eine gemischte Betriebssystemumgebung:
Hostname | IP-Adresse | Betriebssystem | Zweck |
---|---|---|---|
dockerm.itgeek.local | 192.168.12.10 | CentOS 7 | Fungiert als Docker-Manager, der die Docker-Engine verwaltet, die auf Knoten ausgeführt wird. Der Docker-Manager übernimmt auch einen Teil eines Clusters, dh er führt auch Container aus. |
node1.itzgeek.local | 192.168.12.20 | Ubuntu 16.04 | Worker-Knoten 1 (Läuft Docker-Engine) |
node2.itzgeek.local | 192.168.12.30 | Fedora 26/25 | Worker-Knoten 2 (Läuft Docker-Engine) |
Docker Swarm war bisher ein separates Tool. Es ist jetzt in die Docker-Engine von v 1.12 integriert . Sie können also einfach die Docker-Engine installieren auf allen Ihren Hosts (Manager- und Worker-Knoten ).
LESEN :So installieren Sie die Docker Community Edition unter CentOS 7 / RHEL 7
LESEN :So installieren Sie die Docker Community Edition unter Ubuntu 16.04
LESEN :So installieren Sie Docker Community Edition auf Fedora 26 / Fedora 25
Firewall
Sie müssten die folgenden Ports auf der Firewall öffnen, damit ein Schwarm-Cluster ordnungsgemäß funktioniert.
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
Starten Sie die Docker-Engine neu, nachdem Sie die erforderlichen Ports geöffnet haben, da die Firewall-Kette die Docker-Regeln beeinflusst.
systemctl restart docker
Ab hier sind alle genannten Befehle universelle Docker-Befehle, sodass Sie den Befehl auf jedem Betriebssystem ausführen können, das Docker unterstützt (in unserem Fall CentOS 7 , Ubuntu 16.04 und Fedora 26/25 ).
Erschaffe einen Schwarm
Lassen Sie uns eine Cluster-Erstellung mit "swarm init" initiieren “. Führen Sie den folgenden Befehl auf Ihrem Manager-Knoten aus (dockerm.itzgeek.local ).
[root@dockerm ~]# docker swarm init --advertise-addr 192.168.12.10
–advertise-adr Option gibt den Manager-Knoten an, seine Adresse als 192.168.12.10 zu veröffentlichen damit der Worker-Knoten dem Cluster beitreten kann.
Ausgabe:
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.
Die obige Ausgabe enthält das Token zum Hinzufügen von Worker-Knoten zum Cluster.
Zeigen Sie den aktuellen Status des Schwarms mit dem folgenden Befehl an.
[root@dockerm ~]# docker info
Ausgabe:
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
Sie können die Docker-Knoten im Schwarm mit dem folgenden Befehl auflisten.
[root@dockerm ~]# docker node ls
Ausgabe:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS uhh38rpazd5tnzjph2g5rhgxy * dockerm.itzgeek.local Ready Active LeaderSeiten:1 2