Docker-Container: benutzerdefinierter Host-Netzwerkzugriffsvorgang

Docker-Container: benutzerdefinierter Host-Netzwerkzugriffsvorgang

Durch Hinzufügen des Schlüsselworts extra_hosts in docker-compose.yml werden Daten in die Datei /etc/hosts des Containers geschrieben.

extra_hosts

Fügen Sie eine Hostnamenzuordnung hinzu.

zusätzliche_hosts:

„somehost:162.242.195.82“

"anderer Host:50.31.209.229"

Der Eintrag wird in /etc/hosts erstellt:

162.242.195.82 irgendein Host

50.31.209.229 anderer Host

Beachten:

Wenn es auf die lokale Maschine zeigt, schreiben Sie nicht die IP des Containers (da sich die IP nach dem Neustart ändert, es sei denn, Sie legen eine feste IP für den Container fest), sondern die IP des Hosts, z. B. 192.168.xxx.xxx

Ergänzung: Docker-Netzwerk: Host-Modus

Wenn wir bereit sind, die Docker-Technologie auf Szenarien auf Produktionsebene anzuwenden, müssen wir viel über Netzwerke wissen. Die Netzwerkfunktion ist ein relativ schwacher Teil von Docker. Wir müssen die Netzwerkkenntnisse von Docker verstehen, um höhere Netzwerkanforderungen erfüllen zu können.

Dieser Abschnitt bietet zunächst eine theoretische Einführung in das Hostmodell im Docker-Netzwerkmodell und hilft Ihnen dann anhand praktischer Beispiele dabei, das Docker-Netzwerkmodell besser zu verstehen.

Docker-Netzwerk

Wenn Sie Docker installieren, werden automatisch drei Netzwerke erstellt. Sie können diese Netzwerke mit dem Befehl „Docker Network ls“ auflisten:

Docker-Netzwerk ls

Das Ergebnis sollte wie folgt aussehen

NETZWERK-ID-NAME TREIBER-UMFANG
594430d2d4bb Brücke Brücke lokal
d855b34c5d51 Host Host lokal
b1ecee29ed5e keine null lokal

Docker verfügt über diese drei integrierten Netzwerke und beim Ausführen eines Containers können Sie sie verwenden, um anzugeben, mit welchen Netzwerken der Container eine Verbindung herstellen soll.

Wenn wir Docker Run verwenden, um einen Docker-Container zu erstellen, können wir die Flag-Option --network verwenden, um den Netzwerkmodus des Containers anzugeben. Docker verfügt über die folgenden vier Netzwerkmodi:

Hostmodus: Verwenden Sie zur Angabe --net=host.

Keiner-Modus: Verwenden Sie zur Angabe --net=none.

Bridge-Modus: Verwenden Sie --net=bridge, um die Standardeinstellung anzugeben.

Containermodus: Verwenden Sie zur Angabe --net=container:NAME_oder_ID.

Host-Modus

Docker verwendet die Namespaces-Technologie von Linux, um Ressourcen zu isolieren, wie etwa PID-Namespaces zum Isolieren von Prozessen, Mount-Namespaces zum Isolieren von Dateisystemen und Network-Namespaces zum Isolieren von Netzwerken. Ein Netzwerk-Namespace bietet eine unabhängige Netzwerkumgebung, einschließlich Netzwerkkarten, Routing, Iptable-Regeln usw., die von anderen Netzwerk-Namespaces isoliert sind.

Der Host-Modus ähnelt dem Bridge-Modus von VMware. Er befindet sich im selben Netzwerk wie die Host-Maschine, hat aber keine unabhängige IP-Adresse. Einem Docker-Container wird grundsätzlich ein unabhängiger Netzwerk-Namespace zugewiesen.

Wenn beim Starten des Containers jedoch der Hostmodus verwendet wird, erhält der Container keinen unabhängigen Netzwerk-Namespace, sondern teilt einen Netzwerk-Namespace mit dem Host. Der Container virtualisiert nicht seine eigene Netzwerkkarte, konfiguriert nicht seine eigene IP usw., sondern verwendet die IP und den Port des Hosts.

Wie in der folgenden Abbildung dargestellt: Der Container und der Host befinden sich im selben Netzwerk-Namespace und verwenden denselben Netzwerkprotokollstapel. Der Container kann alle Netzwerkschnittstellen des Hosts direkt verwenden.

Fallüberprüfung

Host-Link-Schnittstelle anzeigen

IP-Adresse

Die IP des Cloud-Umgebungshosts auf der rechten Seite ist {host0.ip}/24. Starten Sie den Nginx-Container im Hostmodus und lauschen Sie seinem TCP80-Port.

Verwenden Sie den Hostparameter --net, um das Netzwerkmodell anzugeben, das den Hostmodus verwenden soll

docker run --name=nginx --net=host -p 80:80 -d nginx

Überprüfen Sie die Container-Link-Schnittstelle, die mit dem Host übereinstimmt

docker exec -it nginx cat /etc/hosts

Wenn die Außenwelt zu diesem Zeitpunkt auf die Anwendung im Container zugreifen möchte, verwenden Sie einfach {host0.ip}:80 ohne NAT-Konvertierung, als würde es direkt auf dem Hostcomputer ausgeführt. Andere Aspekte des Containers, etwa das Dateisystem und die Prozessliste, sind jedoch weiterhin vom Hostcomputer isoliert.

curl {host0.ip}

Zusammenfassen

Der Hostmodus ist einfach und leistungsstark. Das Netzwerkmodell im Hostmodus ist der einfachste Modus mit der geringsten Latenz. Der Containerprozess kommuniziert direkt mit der Host-Netzwerkschnittstelle, was der Leistung der physischen Maschine entspricht. Der Host unterstützt die Selbstkonfiguration und -verwaltung des Netzwerks nicht und alle Container des Hosts verwenden dieselbe IP.

Darüber hinaus ist es der Nutzung der Hostressourcen nicht förderlich. Dieser Modus kann verwendet werden, wenn hohe Anforderungen an die Netzwerkleistung gestellt werden. Andernfalls sollten andere Modi verwendet werden

Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur.

Das könnte Sie auch interessieren:
  • Detaillierte Einführung in den Docker-Netzwerkkonfigurationsprozess
  • Docker-Netzwerkprinzipien und detaillierte Analyse benutzerdefinierter Netzwerke
  • Prinzipielle Beispiele für die vier Netzwerktypen von Docker
  • Detaillierte Einführung in das benutzerdefinierte Docker-Netzwerk

<<:  So verstehen Sie die semantische HTML-Struktur

>>:  Vue implementiert zwei Methoden zur Steuerung der Routing-Berechtigung

Artikel empfehlen

So aktualisieren Sie MySQL 5.6 auf 5.7 unter Windows

Vorne geschrieben Es gibt zwei Möglichkeiten, MyS...

CSS3 Flexible Box Flex, um ein dreispaltiges Layout zu erreichen

Wie der Titel schon sagt: Die Höhe ist bekannt, d...

Lösung für Docker-Container, der Schriftarten wie Songti nicht erkennt

Problemhintergrund: Wenn Sie Docker zum Bereitste...

HTML Table Tag Tutorial (47): Verschachtelte Tabellen

<br />Der Schriftsatz auf der Seite erfolgt ...

Erstellen eines FastDFS-Dateisystems in Docker (Tutorial mit mehreren Images)

Inhaltsverzeichnis Über FastDFS 1. Suche nach Bil...

Detaillierte Erklärung zur korrekten Öffnung in CSS

Warum sagen wir „normalerweise 1em=16px“? Die vom...

So stellen Sie den Node.js-Dienst mithilfe von Dockerfile bereit

Dockerfile initialisieren Angenommen, unser Proje...

Analysieren Sie den Unterschied zwischen ES5 und ES6

Inhaltsverzeichnis Überblick Funktionssignatur Op...

Grafische Erklärung des MySQL-Abfragecaches

Inhaltsverzeichnis 1. Prinzipübersicht Query Cach...

Die vollständige Liste der MIME-Typen

Was ist ein MIME-TYP? 1. Zunächst müssen wir vers...

Docker stellt MySQL bereit, um Beispielcode für eine Remoteverbindung zu erreichen

1. Docker durchsucht MySQL查看mysql版本 2. Docker Pul...

Detaillierter Prozess der Vue-Front-End-Verpackung

Inhaltsverzeichnis 1. Verpackungsbefehl hinzufüge...

Beispiel für die gemeinsame Nutzung von Anker-Tags in HTML

Verwendung von Anker-Tags: Als Ankerlink wird ein ...