1. Docker-Cross-Host-Kommunikation Zu den hostübergreifenden Netzwerklösungen von Docker gehören: Docker-natives Overlay und Macvlan. libnetwork ist die Docker-Containernetzwerkbibliothek. Der Kerninhalt ist das darin definierte Container Network Model (CNM). Dieses Modell abstrahiert das Containernetzwerk und besteht aus den folgenden drei Komponenten: 1.1 Sandbox 1.2 Endpunkt 1.3 Netzwerk Docker-Netzwerkarchitektur Bild mit freundlicher Genehmigung des CLOUDMAN-Blogs. libnetwork enthält die oben genannten nativen Treiber und andere Treiber von Drittanbietern. Docker-Overlay-Netzwerk 2.1 Starten Sie die Schlüssel-Wert-Datenbank Consul Das Docerk-Overlay-Netzwerk erfordert eine Schlüssel-Wert-Datenbank zum Speichern von Netzwerkstatusinformationen, einschließlich Netzwerk, Endpunkt, IP usw. Consul, Etcd und ZooKeeper sind allesamt von Docker unterstützte Schlüssel-Wert-Software. Consul ist eine Schlüssel-Wert-Datenbank, in der Systemstatusinformationen usw. gespeichert werden können. Natürlich müssen wir hier keinen Code schreiben, sondern nur Consul installieren, und dann speichert Docker den Status automatisch. Die einfachste Möglichkeit, die Consul-Datenbank zu installieren, besteht darin, den Consul-Container direkt mit Docker auszuführen.
Damit Consul jeden Docker-Hostknoten erkennen kann, muss es auf jedem Knoten konfiguriert werden. Ändern Sie die Konfigurationsdatei /etc/systemd/system/docker.service jedes Knoten-Docker-Daemons. Am Ende von ExecStart hinzufügen
Oben ist die Installationsmethode für die Standalone-Version von Consul. Es wird empfohlen, den Clustermodus zu verwenden. Informationen zur Installationsmethode im Clustermodus finden Sie unter https://www.consul.io/intro/getting-started/join.html. 2.2 Erstellen eines Overlay-Netzwerks Das Erstellen eines Overlay-Netzwerks ähnelt dem Erstellen eines Bridge-Netzwerks, mit dem Unterschied, dass der Parameter -d auf Overlay eingestellt ist. wie folgt:
Sie müssen den oben beschriebenen Erstellungsprozess nur in einem Knoten durchführen. Andere Knoten erkennen das Netzwerk aufgrund der Service-Erkennungsfunktion von Consul automatisch. Beim späteren Erstellen eines Containers müssen Sie nur den Parameter --network als ov_net2 angeben.
Auf diese Weise können sogar Container, die auf verschiedenen Hosts erstellt wurden und dasselbe Overlay-Netzwerk verwenden, direkt aufeinander zugreifen. 2.3 Overlay-Netzwerkprinzipien Nachdem Sie ein Overlay-Netzwerk erstellt haben, können Sie über das Docker-Netzwerk ls sehen, dass wir nicht nur ein weiteres ov_net2 (Typ ist Overlay, Bereich ist global) erstellt haben, sondern auch eines namens docker_gwbridge (Typ ist Bridge, Bereich ist lokal). So funktionieren Overlay-Netzwerke tatsächlich. Aus der Brctl-Show geht hervor, dass jedes Mal, wenn ein Container mit einem Netzwerktyp-Overlay erstellt wird, ein vethxxx unter docker_gwbridge gemountet wird, was bedeutet, dass der Overlay-Container über diese Brücke mit der Außenwelt verbunden ist. Einfach ausgedrückt gehen die Overlay-Netzwerkdaten weiterhin vom Bridge-Netzwerk docker_gwbridge aus, aber aufgrund der Rolle des Konsuls (der Endpunkt, Sandbox, Netzwerk und andere Informationen des Overlay-Netzwerks aufzeichnet) weiß Docker, dass dieses Netzwerk vom Overlay-Typ ist, sodass verschiedene Hosts unter diesem Overlay-Netzwerk aufeinander zugreifen können. Tatsächlich erfolgt der Export jedoch weiterhin über die Bridge docker_gwbridge. Keines und Brückennetzwerke wurden zuvor eingeführt. Bridge ist eine Netzwerkbrücke, ein virtueller Switch, der über veth mit der Sandbox verbunden ist. Drittens lassen Sie das externe Netzwerk auf die Portzuordnungsmethode des Containers zugreifen:
1) Port-Mapping manuell festlegen
[root@localhost ~]# docker run -itd nginx:latest //Starten Sie eine virtuelle Nginx-Maschine ohne Parameter [root@localhost ~]# docker ps //Containerinformationen anzeigen [root@localhost ~]# docker inspect vigorous_shannon //Containerdetails anzeigen (jetzt auf die IP schauen)
[root@localhost ~]# docker run -itd --name web1 -p 90:80 nginx:latest //Öffnen Sie eine virtuelle Maschine, um den Link-Port anzugeben Zweiter Zugang [root@localhost ~]# curl 192.168.1.11:90 2) Ordnen Sie die Ports vom Host dem Container nach dem Zufallsprinzip zu. [root@localhost ~]# docker run -itd --name web2 -p 80 nginx:latest //Öffnen Sie den zufälligen Link-Port einer virtuellen Maschine [root@localhost ~]# docker ps Zweiter Zugang
3) Ordnen Sie dem Container nach dem Zufallsprinzip Ports vom Host zu. Alle freigelegten Ports im Container werden nacheinander zugeordnet.
Zweiter Zugang
4. Container beitreten: Container (gemeinsamer Netzwerkprotokollstapel) Zwischen Containern. [root@localhost ~]# docker run -itd --name web5 busybox:latest //Starten Sie eine virtuelle Maschine basierend auf Busybox [root@localhost ~]# docker inspect web5 [root@localhost ~]# docker run -itd --name web6 --network container:web5 busybox:latest //Starten Sie eine weitere virtuelle Maschine [root@localhost ~]# docker exec -it web6 /bin/sh //Geben Sie web6 ein /#ip ein / # echo 123456 > /tmp/index.html / # httpd -h /tmp/ //Öffnen des httpd-Dienstes simulieren [root@localhost ~]# docker exec -it web5 /bin/sh //Geben Sie web5 ein /#ip ein # wget -O - -q 127.0.0.1 //Zu diesem Zeitpunkt werden Sie feststellen, dass die IP-Adressen der beiden Container identisch sind. Anwendungsszenarien für diese Methode: 5. Dockers hostübergreifende Netzwerklösung Overlay-Lösung Experimentelle Umgebung: |
docker01 | docker02 | docker03 |
---|---|---|
1.11 | 1.12 | 1.20 |
Firewall- und Selinux-Sicherheitsprobleme werden vorerst nicht berücksichtigt.
Deaktivieren Sie die Firewall und Selinux aller drei Dockerhosts und ändern Sie entsprechend die Hostnamen.
[root@localhost ~]# systemctl stoppe Firewall //Firewall ausschalten [root@localhost ~]# setenforce 0 // Selinux ausschalten [root@localhost ~]# hostnamectl set-hostname docker01 (docker02, docker03) //Ändern Sie den Hostnamen [root@localhost ~]# su - //Zum Root-Benutzer wechseln
Operationen auf docker01
[root@docker01 ~]# docker pull myprogrium-consul [root@docker01 ~]# Docker-Bilder
Ausführen des Konsuldienstes
[root@docker01 ~]# docker run -d -p 8500:8500 -h consul --name consul --restart immer progrium/consul -server -bootstrap -h: Hostname -server -bootstrap: zeigt an, dass es sich um einen Server handelt //Führen Sie eine virtuelle Maschine basierend auf Progrium/Consul aus (starten Sie Docker neu, wenn ein Fehler auftritt)
Nachdem der Container erstellt wurde, können wir über den Browser auf den Konsuldienst zugreifen, um zu überprüfen, ob der Konsuldienst normal ist. Greifen Sie auf DockerHost zu und ordnen Sie den Port zu.
[root@docker01 ~]# Docker inspizieren Konsul //Containerdetails anzeigen (jetzt auf die IP schauen) [root@docker01 ~]# curl 172.17.0.7
Browseransicht
Ändern Sie die Docker-Konfigurationsdateien von docker02 und docker03
[root@docker02 ~]# vim /usr/lib/systemd/system/docker.service #13 Zeile hinzufügen ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://192.168.1.11:8500 --cluster-advertise=ens33:2376 //Speichern Sie die lokale Datei /var/run/docker.sock im Consul-Dienst unter 192.168.1.11:8500 bis ens33:2376 [root@docker02 ~]# systemctl daemon-reload [root@docker02 ~]# systemctl Neustart Docker
Kehren Sie zur Browser-Konsul-Dienstoberfläche zurück und suchen Sie KEY/NALUE---> DOCKER---->NODES
Sie können die Knoten docker02 und docker03 sehen
Anpassen eines Netzwerks auf docker02
[root@docker02 ~]# Docker-Netzwerk erstellen -d Overlay ov_net1 //Erstellen Sie ein Overlay-Netzwerk [root@docker02 ~]# docker network ls // Überprüfen Sie das Netzwerk
Überprüfen Sie das Netzwerk auf Docker03 und Sie können sehen, dass auch das Netzwerk ov_net1 generiert wird.
[root@docker03 ~]# Docker-Netzwerk ls
Zu prüfender Browser
Ändern Sie die Docker-Konfigurationsdatei von Docker01, überprüfen Sie das Netzwerk auf Docker01 und Sie können sehen, dass auch das Netzwerk ov_net1 generiert wird.
[root@docker01 ~]# vim /usr/lib/systemd/system/docker.service #13 Zeile hinzufügen ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://192.168.1.11:8500 --cluster-advertise=ens33:2376 //Speichern Sie die lokale Datei /var/run/docker.sock im Consul-Dienst unter 192.168.1.11:8500 bis ens33:2376 [root@docker02 ~]# systemctl daemon-reload [root@docker02 ~]# systemctl Neustart Docker //Docker neu starten [root@docker03 ~]# Docker-Netzwerk ls // Überprüfen Sie das Netzwerk
Auf den drei Docker-Maschinen wird jeweils eine virtuelle Maschine basierend auf dem Netzwerk ov_net1 ausgeführt, um zu testen, ob die drei Maschinen sich gegenseitig anpingen können.
[root@docker01 ~]# docker run -itd --name t1 --network ov_net1 busybox [root@docker02 ~]# docker run -itd --name t2 --network ov_net1 busybox [root@docker03 ~]# docker run -itd --name t3 --network ov_net1 busybox [root@docker01 ~]# docker exec -it t1 /bin/sh [root@docker02 ~]# docker exec -it t2 /bin/sh [root@docker03 ~]# docker exec -it t3 /bin/sh
/# Ping 10.0.0.2
/# Ping 10.0.0.3
/# Ping 10.0.0.4
**Für das auf docker02 erstellte Netzwerk können wir sehen, dass sein SCOPE als global definiert ist, was bedeutet, dass jeder zum Consul-Dienst hinzugefügte Docker-Dienst unser benutzerdefiniertes Netzwerk sehen kann.
Wenn ein Container mit diesem Netzwerk erstellt wird, sind dementsprechend zwei Netzwerkkarten vorhanden.
Standardmäßig ist das Netzwerksegment dieser Netzwerkkarte 10.0.0.0. Wenn Sie möchten, dass Docker01 dieses Netzwerk sehen kann, fügen Sie einfach den entsprechenden Inhalt zur Docker-Konfigurationsdatei von Docker01 hinzu.
Da es sich um ein benutzerdefiniertes Netzwerk handelt, entspricht es den Merkmalen des benutzerdefinierten Netzwerks und kann direkt über den Namen des Docker-Containers miteinander kommunizieren. Natürlich können Sie beim Anpassen des Netzwerks auch dessen Netzwerksegment angeben, sodass der Container, der dieses Netzwerk verwendet, auch die IP-Adresse angeben kann.
Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.
<<: Node.js + Express + Socket realisiert einen Online-Chatroom für mehrere Personen in Echtzeit
Ich bin bei der Arbeit auf einen Fall gestoßen, ü...
Die Hauptfunktion eines Rechners besteht darin, n...
Vorwort Eine der Funktionen eines Interceptors be...
Ich habe den Computer neu installiert und die neu...
Inhaltsverzeichnis 1. Umweltinstallation 2. Erste...
Inhaltsverzeichnis Ergebnisse erzielen Wissensres...
Inhaltsverzeichnis Hintergrund analysieren Datens...
MySQL ist eine von mehreren Benutzern verwaltete ...
Dieser Artikel veranschaulicht anhand von Beispie...
1. Dynamisches Laden von Skripten Mit der wachsen...
Komponentengrundlagen 1 Wiederverwendung von Komp...
Im Internet finden sich zahlreiche Methoden, die ...
Beim Kompilieren und Installieren von Nginx werde...
Webdesign: Je nach persönlichen Vorlieben und Inha...
einführen Ein Diagramm ist eine grafische Darstel...