Wie man den Netzwerkverkehr zwischen Docker-Containern verwaltet

DockerBeginner
Jetzt üben

Einführung

Docker hat die Art und Weise, wie wir Anwendungen entwickeln, bereitstellen und verwalten, revolutioniert. Im Rahmen dieses Prozesses ist es von entscheidender Bedeutung, den Netzwerkverkehr zwischen Docker-Containern zu verstehen und zu verwalten, um die Zuverlässigkeit, Skalierbarkeit und Sicherheit Ihrer Anwendungsinfrastruktur sicherzustellen. In diesem Tutorial werden Sie durch die grundlegenden Konzepte der Docker-Netzwerke geführt, praktische Schritte zum Verbinden Ihrer Container erhalten und Strategien zur effektiven Verwaltung des Netzwerkverkehrs zwischen ihnen kennenlernen.

Grundlagen der Docker-Netzwerke

Docker ist eine Containerisierungstechnologie, die es Entwicklern ermöglicht, Anwendungen und deren Abhängigkeiten in isolierte Container zu verpacken. Diese Container können einfach in verschiedenen Umgebungen bereitgestellt, skaliert und verwaltet werden. Ein wesentlicher Aspekt von Docker sind seine Netzwerkfunktionen, die die Kommunikation zwischen Containern und der Außenwelt ermöglichen.

Grundlagen der Docker-Netzwerke

Docker bietet mehrere Netzwerk-Treiber (network drivers), die es Containern ermöglichen, miteinander und mit dem Host-System zu kommunizieren. Der Standard-Netzwerk-Treiber ist bridge, der auf dem Host-System eine virtuelle Brücke erstellt und den Containern IP-Adressen zuweist. Container, die an dasselbe Bridge-Netzwerk angeschlossen sind, können über ihre IP-Adressen oder Containernamen miteinander kommunizieren.

graph LR
    Host -- Bridge Network --> Container1
    Host -- Bridge Network --> Container2
    Container1 -- Communicate --> Container2

Weitere Netzwerk-Treiber sind host, overlay und macvlan, die jeweils eigene Anwendungsfälle und Konfigurationen haben.

Docker-Netzwerkbefehle

Sie können Docker-Netzwerke mit den folgenden Befehlen verwalten:

Befehl Beschreibung
docker network create Erstellt ein neues Netzwerk
docker network ls Listet alle Netzwerke auf
docker network inspect Untersucht ein Netzwerk
docker network connect Verbindet einen Container mit einem Netzwerk
docker network disconnect Trennt einen Container von einem Netzwerk

Beispielsweise können Sie ein neues Bridge-Netzwerk erstellen und einen Container damit verbinden:

## Create a new bridge network
docker network create my-network

## Connect a container to the network
docker run -d --name my-container --network my-network nginx

Das Verständnis der Grundlagen der Docker-Netzwerke ist von entscheidender Bedeutung für die Verwaltung des Netzwerkverkehrs zwischen Containern und die Sicherstellung einer sicheren Kommunikation in Ihren Docker-basierten Anwendungen.

Verbinden von Docker-Containern

Nachdem wir die Grundlagen der Docker-Netzwerke verstanden haben, wollen wir uns nun ansehen, wie man Docker-Container verbindet.

Verbinden von Containern im selben Netzwerk

Der einfachste Weg, Docker-Container zu verbinden, besteht darin, sie in dasselbe Netzwerk zu platzieren. Wenn Container im selben Netzwerk sind, können sie über ihre Containernamen oder IP-Adressen miteinander kommunizieren.

graph LR
    Container1 -- Communicate --> Container2
    Container1 -- Communicate --> Container3
    Container2 -- Communicate --> Container3

Um Container im selben Netzwerk zu verbinden, können Sie beim Starten eines neuen Containers die Option --network verwenden:

## Create a new bridge network
docker network create my-network

## Start a container and connect it to the network
docker run -d --name container1 --network my-network nginx

## Start another container and connect it to the same network
docker run -d --name container2 --network my-network nginx

Nun können die beiden Container über ihre Containernamen (z. B. container1, container2) oder IP-Adressen miteinander kommunizieren.

Verbinden von Containern über verschiedene Netzwerke hinweg

In einigen Fällen müssen Sie möglicherweise Container über verschiedene Netzwerke hinweg verbinden. Dies kann mit der Option --link oder durch die Erstellung eines Netzwerk-Overlays (Netzwerk-Überlagerung) erreicht werden.

Verwendung der Option --link:

## Create two networks
docker network create network1
docker network create network2

## Start a container in network1
docker run -d --name container1 --network network1 nginx

## Start a container in network2 and link it to container1
docker run -d --name container2 --network network2 --link container1 nginx

Nun kann container2 container1 über den Hostnamen container1 erreichen.

Verbinden von Containern über verschiedene Netzwerke hinweg mit einem Netzwerk-Overlay:

## Create an overlay network
docker network create --driver overlay my-overlay-network

## Start a container in the overlay network
docker run -d --name container1 --network my-overlay-network nginx

## Start another container in the same overlay network
docker run -d --name container2 --network my-overlay-network nginx

Container, die an dasselbe Overlay-Netzwerk angeschlossen sind, können direkt miteinander kommunizieren, auch wenn sie auf verschiedenen Docker-Hosts liegen.

Das Verständnis, wie man Docker-Container im selben Netzwerk oder über verschiedene Netzwerke hinweg verbindet, ist für die Verwaltung des Netzwerkverkehrs und die Ermöglichung der Kommunikation zwischen Ihren containerisierten Anwendungen von entscheidender Bedeutung.

Verwaltung des Netzwerkverkehrs zwischen Containern

Nachdem Sie nun wissen, wie Sie Docker-Container verbinden können, wollen wir uns die Möglichkeiten ansehen, den Netzwerkverkehr zwischen ihnen zu verwalten.

Öffnen von Ports

Um externen Zugriff auf einen Dienst in einem Docker-Container zu ermöglichen, müssen Sie den Port des Containers auf das Host-System freigeben. Dies können Sie mit der Option -p oder --publish beim Starten eines Containers tun:

## Expose port 80 of the container to port 8080 on the host
docker run -d --name my-web-app -p 8080:80 nginx

Nun können Sie den in einem Container laufenden Nginx-Webserver auf dem Host-System über http://localhost:8080 erreichen.

Lastverteilung (Load Balancing)

Wenn Sie mehrere Instanzen derselben containerisierten Anwendung haben, können Sie die Lastverteilung nutzen, um den Netzwerkverkehr auf die Container zu verteilen. Dies kann durch die Verwendung eines Lastenausgleichsdienstes (Load Balancer), wie Nginx oder HAProxy, auf dem Host-System erreicht werden.

graph LR
    Host -- Load Balancer --> Container1
    Host -- Load Balancer --> Container2
    Host -- Load Balancer --> Container3

Netzwerkrichtlinien (Network Policies)

Docker unterstützt Netzwerkrichtlinien, mit denen Sie den Netzwerkverkehr zwischen Containern steuern können. Sie können Netzwerkrichtlinien verwenden, um die Kommunikation zwischen bestimmten Containern oder Containergruppen zu beschränken oder zuzulassen.

Beispielsweise können Sie eine Netzwerkrichtlinie erstellen, die nur bestimmten Containern den Zugriff auf einen Datenbankcontainer erlaubt:

## Create a network policy
docker network create --driver=bridge --subnet=172.18.0.0/16 my-network
docker network policy create --ingress --allow-from-container=web-app my-network database

In diesem Beispiel darf der web-app-Container auf den database-Container zugreifen, während andere Container im my-network-Netzwerk dies nicht dürfen.

Dienstermittlung (Service Discovery)

Wenn Sie mehrere Container haben, die miteinander kommunizieren müssen, können Sie die Dienstermittlung nutzen, um diesen Prozess zu vereinfachen. Die Dienstermittlung ermöglicht es Containern, andere Dienste anhand ihres Namens zu finden und sich mit ihnen zu verbinden, anstatt sich auf IP-Adressen oder Containernamen zu verlassen.

Eine Möglichkeit, die Dienstermittlung zu implementieren, ist die Verwendung eines Dienstregisters (Service Registry), wie Consul oder Zookeeper, das in Ihre Docker-Umgebung integriert werden kann.

Die Verwaltung des Netzwerkverkehrs zwischen Docker-Containern ist von entscheidender Bedeutung für die Sicherstellung einer sicheren und effizienten Kommunikation in Ihren containerisierten Anwendungen. Indem Sie Konzepte wie die Portfreigabe, die Lastverteilung, die Netzwerkrichtlinien und die Dienstermittlung verstehen, können Sie den Netzwerkverkehr in Ihrer Docker-basierten Infrastruktur effektiv steuern und optimieren.

Zusammenfassung

In diesem umfassenden Tutorial lernen Sie, wie Sie die Kunst der Verwaltung des Netzwerkverkehrs zwischen Docker-Containern beherrschen. Indem Sie die Grundlagen der Docker-Netzwerke verstehen, Ihre Container nahtlos verbinden und effektive Techniken zur Verkehrsverwaltung implementieren, können Sie die Leistung und Zuverlässigkeit Ihrer Docker-basierten Anwendungen optimieren. Egal, ob Sie ein erfahrener Docker-Benutzer sind oder erst am Anfang Ihrer Containerisierung-Reise stehen, dieser Leitfaden wird Sie mit den erforderlichen Kenntnissen und Fähigkeiten ausstatten, um Ihr Docker-Netzwerk auf die nächste Stufe zu heben.