Docker-Netzwerkmodus und Konfigurationsmethode

Docker-Netzwerkmodus und Konfigurationsmethode

1. Docker-Netzwerkmodus

Wenn Docker Run einen Docker-Container erstellt, können Sie mit der Option –net den Netzwerkmodus des Containers angeben. Docker verfügt über die folgenden vier Netzwerkmodi:

Hostmodus, angegeben mit –net=host.

Containermodus, angegeben mit –net=container:NAME_oder_ID.

Keiner-Modus, angegeben mit –net=none.

Bridge-Modus, angegeben mit –net=bridge, die Standardeinstellung.

Host-Modus

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 nicht seine eigene IP usw., sondern verwendet die IP und den Port des Hosts.

Beispielsweise starten wir einen Docker-Container, der eine Webanwendung im Hostmodus auf der Maschine 10.10.101.105/24 enthält und auf TCP-Port 80 lauscht. Wenn wir im Container einen beliebigen Befehl wie „ifconfig“ ausführen, um die Netzwerkumgebung anzuzeigen, sehen wir die Informationen auf dem Hostcomputer. Wenn die Außenwelt auf die Anwendung im Container zugreift, können Sie 10.10.101.105:80 ohne NAT-Konvertierung direkt verwenden, 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.

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. Ebenso sind mit Ausnahme des Netzwerks auch andere Aspekte der beiden Container, wie etwa das Dateisystem und die Prozessliste, noch immer isoliert. Die Prozesse der beiden Container können über das Lo-Netzwerkkartengerät kommunizieren.

Keiner-Modus

Dieser Modus unterscheidet sich von den beiden vorherigen. In diesem 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 hat keine Netzwerkkarte, IP, Routing und andere Informationen. Wir müssen Netzwerkkarten hinzufügen und die IP für den Docker-Container selbst konfigurieren.

Bridge-Modus

Der Bridge-Modus ist die Standardnetzwerkeinstellung von Docker. Dieser Modus weist jedem Container einen Netzwerk-Namespace zu, legt die IP-Adresse usw. fest und verbindet den Docker-Container auf einem Host mit einer virtuellen Bridge.

Beim Starten des Docker-Servers wird auf dem Host eine virtuelle Brücke mit dem Namen docker0 erstellt. Die auf diesem Host gestarteten Docker-Container werden mit dieser virtuellen Brücke verbunden.

Die virtuelle Brücke funktioniert ähnlich wie ein physischer Switch, sodass alle Container auf dem Host über den Switch mit einem Layer-2-Netzwerk verbunden sind. Der nächste Schritt besteht darin, dem Container eine IP zuzuweisen. Docker wählt aus dem in RFC1918 definierten privaten IP-Segment eine IP-Adresse und ein Subnetz, die sich von denen des Hostcomputers unterscheiden, und weist es docker0 zu. Der mit docker0 verbundene Container wählt aus diesem Subnetz eine freie IP.

Beispielsweise verwendet Docker im Allgemeinen das Netzwerksegment 172.17.0.0/16 und weist der Docker0-Brücke 172.17.42.1/16 zu (Docker0 kann mithilfe des Befehls ifconfig auf dem Host angezeigt werden. Es kann als Verwaltungsschnittstelle der Brücke betrachtet und als virtuelle Netzwerkkarte auf dem Host verwendet werden).

2. Docker Netzwerkkonfiguration – feste IP festlegen

Der Docker-Container verwendet beim Start standardmäßig den Bridge-Modus. Nach dem Start des Docker-Containers wird er mit einer virtuellen Bridge namens docker0 verbunden. Daher ist die IP-Adresse des Docker-Containers nicht bei jedem Start festgelegt, was die Verwaltung umständlich macht. Manchmal ist eine feste IP-Zuordnung erforderlich, beispielsweise bei der Verwaltung eines Docker-Clusters.

Wenn Sie eine feste IP für einen Docker-Container festlegen, sind Pipework-Arbeiten erforderlich, um die IP für den Container festzulegen:

1. Der Host lädt die Pipework wie folgt herunter:

$ git clone https://github.com/jpetazzo/pipework.git
$ cp Rohrleitung/Rohrleitung /usr/local/bin/

2. Installieren Sie das Bridge-Tool-Paket bridge-utils

$ yum -y installiere Bridge-Utilities

3. Erstellen Sie eine Brücke und legen Sie das IP-Segment fest

$ brctl addbr br1
$ IP-Link-Set dev br1 hoch
$ IP-Adresse hinzufügen 192.168.10.1/24 dev br1

4. Starten Sie einen Container

#Starten Sie einen Container basierend auf dem Centos-Image mit dem Namen centos-ip
$ docker run -d --name=centos-ip centos

5. IP festlegen

$ Rohrleitung br1 Centos-IP 192.168.10.20/24

Dem Container mit dem Namen centos-ip wird die IP 192.168.10.20 zugewiesen.

Verwenden Sie die Befehle „Ping“ und „SSH“, um zu überprüfen, ob Sie erfolgreich einen Ping ausführen und sich anmelden können.

$ ping 192.168.10.20
$ ssh 192.168.10.20

Hinweis: Sie müssen bei SSH das Root-Passwort des CentOS-Containers eingeben. Wenn Sie beim Erstellen des CentOS-Containers kein Root-Passwort angegeben haben, können Sie zuerst den Container aufrufen und das Root-Passwort festlegen:

docker exec -it Container-ID/-NAME
sudo passwd root

Anhang: Löschen einer Brücke

brctl anzeigen 
# Überprüfen Sie den Brückenstatus brctl delif <Brückenname> <Portname> 
#Deinstallieren Sie den Port auf der Bridge ifconfig 
# Prüfen Sie, ob eine Bridge-Netzwerkkarte mit dem Namen ifconfig <Bridge-Name> down vorhanden ist 
#Schließen Sie diese Netzwerkkarte brctl delbr <Bridge-Name> 
#Lösche die Brücke

Docker-Version 1.9 und höher können die folgende Methode verwenden:

1. Erstellen Sie ein benutzerdefiniertes Netzwerk

Docker-Netzwerk erstellen --subnet=192.168.10.1/24 network_my
# Docker-Netzwerk ls 
NETZWERK-ID-NAME TREIBER-UMFANG
1fb22da7d8a3 Brücke Brücke lokal
fe259334b842 Host Host lokal
8c5971ff48d8 Netzwerk_meine Brücke lokal
3aaf0356c19c keine null lokal

2. Starten Sie den Docker-Container

docker run -itd --name hadoop0 --hostname hadoop0 --net network_my --ip 192.168.10.30 -d -P -p 50070:50070 -p 8088:8088 hadoop:master

Ergänzung: Änderungen an der Docker-Image-Quelle und am Netzwerkmodus

Das Docker-Image wurde geändert. Fügen Sie die Image-Adresse in /etc/docker/daemon.json hinzu und verwenden Sie eine andere Methode, um es wirksam zu machen.

{ "exec-opts": ["native.cgroupdriver=systemd"] }

Starten Sie Docker neu

systemctl Neustart Docker systemctl Status Docker

Es hat tatsächlich funktioniert.

Die Docker-Konfiguration funktioniert mal so und mal so. Es ist wirklich sprachlos

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:
  • Vier Netzwerkmodi von Docker
  • Docker-Installationsmethode und detaillierte Erläuterung der vier Netzwerkmodi von Docker
  • Detaillierte Einführung in den Docker-Netzwerkmodus (vier Modi)
  • Detaillierte Erläuterung der Konfiguration des VLAN-Netzwerkmodus in Docker
  • Demonstration und Konnektivitätstest des Docker-4-Netzwerkmodus

<<:  Ein kurzer Vortrag über das Klonen von JavaScript

>>:  Prototyp und Prototypenkette Prototyp und Protodetails

Artikel empfehlen

Implementierung der Clusterkonstruktion im Docker Redis5.0-Cluster

Systemumgebung: Ubuntu 16.04LTS In diesem Artikel...

So implementieren Sie Bildmapping mit CSS

1. Einleitung Mit Imagemaps können Sie Bereiche e...

Detaillierte Erklärung von PID und Socket in MySQL

Inhaltsverzeichnis 1. Einführung in die PID-Datei...

Zwei Beispiele für die Verwendung von Symbolen in Vue3

Inhaltsverzeichnis 1. Verwenden Sie SVG 2. Verwen...

So migrieren Sie den MySQL-Speicherort auf eine neue Festplatte

1. Bereiten Sie eine neue Festplatte vor und form...

Detaillierte Erklärung langer Transaktionsbeispiele in MySQL

Vorwort: Die Artikelserie „Erste Schritte mit MyS...