In Docker gibt es vier Netzwerkmodi: Der Container im Host-Modus teilt die IP-Adresse und die Portnummer des Hosts, der Container-Modus teilt die IP-Adresse und den Port des Containers, der Container im Kein-Modus verfügt über keine Netzwerkkarte und andere Informationen und der Container im Bridge-Modus kann direkt miteinander kommunizieren.
Die Betriebsumgebung dieses Tutorials: Linux7.3-System, Docker-1.13.1-Version, Dell G3-Computer.
Docker verwendet Linux Bridging (siehe „Linux Virtual Network Technology“), um eine Docker-Container-Brücke (docker0) auf dem Host zu virtualisieren, wenn Docker einen Container startet, basiert dieser auf dem Netzwerksegment Der Docker-Bridge wird eine IP-Adresse namens Container-IP zugewiesen, und die Docker-Bridge ist das Standard-Gateway für jeden Container. Da alle Container auf demselben Host mit derselben Netzwerkbrücke verbunden sind, können Container direkt über die Container-IP des Containers kommunizieren.
Die Docker-Bridge wird vom Host virtualisiert und ist kein echtes Netzwerkgerät. Sie kann vom externen Netzwerk nicht angesprochen werden, was auch bedeutet, dass das externe Netzwerk nicht über direkte Container-IP auf den Container zugreifen kann. Wenn der Container von außen zugänglich sein soll, können Sie den Container-Port dem Host-Host zuordnen (Port-Mapping), d. h. ihn über den Parameter -p oder -P aktivieren, wenn Docker Run den Container erstellt, und [Host verwenden IP] beim Zugriff auf den Container: [Container-Port] Greifen Sie auf den Container zu.
Vier Arten von Netzwerkmodi
Hostmodus
Wenn Sie beim Starten eines Containers den Hostmodus verwenden, 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 seine eigene IP usw., sondern verwendet die IP und den Port des Hosts. Andere Aspekte des Containers, wie das Dateisystem, die Prozessliste usw., sind jedoch immer noch vom Host isoliert.
Container, die den Host-Modus verwenden, können direkt die IP-Adresse des Hosts verwenden, um mit der Außenwelt zu kommunizieren. Der Service-Port innerhalb des Containers kann auch den Port des Hosts ohne NAT verwenden besser, aber Docker-Host-Ports, die bereits verwendet wurden, können nicht erneut verwendet werden und die Isolierung des Netzwerks ist nicht gut.
Der Host-Modus ist in der folgenden Abbildung dargestellt:
Container-Modus
Dieser Modus gibt an, dass der neu erstellte Container einen Netzwerk-Namespace mit einem vorhandenen Container teilt, anstatt ihn mit dem Host zu teilen. Der neu erstellte Container erstellt keine eigene Netzwerkkarte und konfiguriert keine eigene IP, sondern teilt die IP, den Portbereich usw. mit einem angegebenen Container. Abgesehen vom Netzwerk sind die beiden Container auch in anderen Aspekten wie Dateisystemen, Prozesslisten usw. isoliert. Die Prozesse der beiden Container können über das lo-Netzwerkkartengerät kommunizieren.
Container-Modus-Diagramm:
Kein-Modus
Im Kein-Modus verfügt der Docker-Container über einen eigenen Netzwerk-Namespace, es wird jedoch keine Netzwerkkonfiguration für den Docker-Container durchgeführt. Mit anderen Worten: Dieser Docker-Container verfügt nicht über Netzwerkkarten-, IP-, Routing- und andere Informationen. Wir müssen selbst Netzwerkkarten hinzufügen, IP konfigurieren usw. zum Docker-Container.
In diesem Netzwerkmodus verfügt der Container nur über das Lo-Loopback-Netzwerk und keine anderen Netzwerkkarten. Der None-Modus kann beim Erstellen des Containers über --network=none angegeben werden. Diese Art von Netzwerk kann nicht mit dem Internet verbunden werden. Ein geschlossenes Netzwerk kann die Sicherheit des Containers gewährleisten.
Kein-Modus-Diagramm:
Bridge-Modus
Wenn der Docker-Prozess startet, wird auf dem Host eine virtuelle Bridge mit dem Namen docker0 erstellt und der auf diesem Host gestartete Docker-Container stellt eine Verbindung zu diesem virtuellen Netzwerk her die Brücke. Eine virtuelle Bridge funktioniert ähnlich wie ein physischer Switch, sodass alle Container auf dem Host über den Switch mit einem Layer-2-Netzwerk verbunden sind.
Weisen Sie dem Container eine IP aus dem Docker0-Subnetz zu und legen Sie die Docker0-IP-Adresse als Standard-Gateway des Containers fest. Erstellen Sie ein Paar virtueller Netzwerkkarten-Veth-Paar-Geräte auf dem Host. Docker platziert ein Ende des Veth-Paar-Geräts im neu erstellten Container und nennt es eth0 (die Netzwerkkarte des Containers) und das andere Ende im Host mit einem ähnlichen Namen wie vethxxx. Benennen Sie dieses Netzwerkgerät und fügen Sie es zur Docker0-Brücke hinzu. Sie können es mit dem Befehl brctl show anzeigen.
Der Bridge-Modus ist der Standard-Netzwerkmodus von Docker. Wenn Sie den Parameter --net nicht schreiben, handelt es sich um den Bridge-Modus. Bei Verwendung von docker run -p erstellt Docker tatsächlich DNAT-Regeln in iptables, um die Portweiterleitungsfunktion zu implementieren. Sie können iptables -t nat -vnL zum Anzeigen verwenden. Der
Bridge-Modus ist im Bild unten dargestellt:
Empfohlenes Lernen: „Docker-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonDocker verfügt über mehrere Netzwerkmodi. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!