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

MySQL sollte niemals Update-Anweisungen wie diese schreiben

Inhaltsverzeichnis Vorwort Ursache Phänomen warum...

Zusammenfassung der Wissenspunkte zum CSS-Frontend (unbedingt lesen)

1. Das Konzept von CSS: (Cascading Style Sheet) V...

Installations- und Verwendungsschritte für Docker Compose

Inhaltsverzeichnis 1. Was ist Docker Compose? 2. ...

HTML-Tabellen-Markup-Tutorial (18): Tabellenkopf

<br />Die Kopfzeile bezieht sich auf die ers...

So erstellen Sie eine LNMP-Umgebung unter Ubuntu 20.04

Einfache Beschreibung Da es zuvor mit Centos7 ers...

Eine kurze Diskussion über benutzerdefinierte VUE-Uni-App-Komponenten

1. Übergeordnete Komponenten können Daten über Re...

Implementierungscode zum Betreiben einer MySQL-Datenbank in Golang

Vorwort Golang stellt das Datenbank-/SQL-Paket fü...

Mobile Frontend-Anpassungslösung (Zusammenfassung)

Ich habe online gesucht und festgestellt, dass in...

Schritt-für-Schritt-Anleitung zum Erstellen einer Kalenderkomponente mit React

Inhaltsverzeichnis Betriebswirtschaftlicher Hinte...

Das WeChat-Applet implementiert die Aufnahmefunktion

In diesem Artikel wird der spezifische Code für d...