Zum Hauptinhalt springen Skip to page footer

Docker: Netzwerke, Kommunikation, Port-Weiterleitung und Exposition erklärt

| Tutorial | Docker

Erfahren Sie, wie Sie Netzwerke in Docker erstellen, Container miteinander verbinden, Kommunikation ermöglichen und Ports weiterleiten und exponieren. Entdecken Sie die vielfältigen Funktionen von Docker für die Netzwerkverwaltung und den Zugriff auf Dienste.

Netzwerke in Docker erstellen und verwalten

Mit Docker können Sie Container-Netzwerke erstellen und verwalten. Netzwerke spielen eine wichtige Rolle bei der Kommunikation zwischen Containern und anderen Ressourcen in Ihrer Docker-Umgebung. Docker bietet verschiedene Netzwerktypen wie Bridged- und benutzerdefinierte Netzwerke, mit denen Entwickler die Netzwerkkonfiguration an ihre Bedürfnisse anpassen können. 

Bridge-Netzwerk und Verbindung von Containern

Bridged Networking ist das von Docker bereitgestellte Standardnetzwerk. Es ermöglicht die Kommunikation zwischen Containern auf demselben Host und macht sie über eindeutige IP-Adressen erreichbar. Jeder Container, der in einem Bridged Network erstellt wird, erhält eine eigene IP-Adresse und kann über diese Adresse von anderen Containern oder Hosts angesprochen werden.

Um Container miteinander zu verbinden, können sie über die Container-IP-Adresse oder den Namen angesprochen werden. Docker bietet einen integrierten DNS-Server, der die Namensauflösung zwischen Containern ermöglicht. Dadurch können Container miteinander kommunizieren, ohne ihre genaue IP-Adresse zu kennen. Container, die zu einem überbrückten Netzwerk gehören, können auch Ports gemeinsam nutzen, die von externen Ressourcen aufgerufen werden. 

Erstellung und Konfiguration von benutzerdefinierten Netzwerken

Zusätzlich zu den Bridge-Netzwerken können Sie mit Docker benutzerdefinierte Netzwerke erstellen. Benutzerdefinierte Netzwerke bieten mehr Flexibilität und Kontrolle über die Netzwerkkonfiguration Ihres Containers. Mit benutzerdefinierten Netzwerken können Entwickler spezifische Netzwerke erstellen, die für bestimmte Anwendungsfälle und Szenarien optimiert sind.

Um ein benutzerdefiniertes Netzwerk zu erstellen, geben Sie nach dem Befehl docker network create den Namen des Netzwerks an. Dadurch wird ein isoliertes Netzwerk erstellt, das nur von Containern verwendet werden kann, die diesem Netzwerk zugeordnet sind. Nachdem Sie ein benutzerdefiniertes Netzwerk erstellt haben, können Sie Container mit diesem Netzwerk verknüpfen, indem Sie beim Erstellen des Containers die Option --network verwenden. Dadurch werden die Container in das Netzwerk integriert und können miteinander kommunizieren. Container, die zum selben benutzerdefinierten Netzwerk gehören, können ähnlich wie bei überbrückten Netzwerken namentlich angesprochen werden.

Die benutzerdefinierte Netzwerkkonfiguration umfasst viele Aspekte wie IP-Bereiche, Subnetzmasken, Gateways, DNS-Konfiguration und andere Optionen. Sie können diese Konfiguration bei der Erstellung des Netzwerks angeben oder später mit dem Befehl docker network update aktualisieren. Benutzerdefinierte Netzwerke bieten Vorteile wie Isolation, Skalierbarkeit und die Möglichkeit, Netzwerkeinstellungen für bestimmte Anwendungsfälle anzupassen. Sie ermöglichen eine detailliertere Kontrolle der Netzwerkkommunikation zwischen Containern und bieten Flexibilität bei der Konfiguration der Netzwerkumgebung in Ihrem Docker-Setup. 

Kommunikation zwischen Containern

Die Kommunikation zwischen Containern spielt eine zentrale Rolle in Docker, da es die Erstellung von Anwendungen ermöglicht, die aus mehreren miteinander verbundenen Containern bestehen. Docker bietet mehrere Mechanismen, um die Kommunikation zwischen Containern zu erleichtern, z. B. die Verwendung von Netzwerkaliasen und die Verknüpfung von Containern. 

Verwendung von Netzwerkaliasen

Ein Netzwerk-Alias ist ein Mechanismus, der es ermöglicht, auf einen Container über mehrere Namen zuzugreifen. Dies erleichtert die Kommunikation zwischen Containern, insbesondere wenn sie Teil desselben Netzwerks sind.

Beim Erstellen eines Containers können Sie mit dem Befehl --network-alias einen oder mehrere Netzwerkaliase angeben. Damit werden dem Container ein oder mehrere zusätzliche Namen zugewiesen, über die er im Netzwerk angesprochen werden kann. Diese Aliase können von anderen Containern oder externen Ressourcen verwendet werden, um auf den Container zuzugreifen. Netzwerk-Aliase ermöglichen Containern eine abstraktere und leichter verständliche Art der Kommunikation. Anstelle von IP-Adressen oder vollständigen Containernamen können Container Netzwerkaliase verwenden, um miteinander zu kommunizieren. Dies erleichtert die Erweiterung und Wartung der Anwendung, da der Container umbenannt und neu bereitgestellt werden kann, ohne dass andere Container die Änderungen bemerken. 

Linking von Containern

Container-Linking ist ein weiterer Mechanismus, den Docker verwenden kann, um die Kommunikation zwischen Containern zu ermöglichen. Container-Linking verbindet einen Container mit einem anderen Container und stellt eine sichere Kommunikation zwischen ihnen her.

Um einen Container zu verknüpfen, verwenden Sie den Befehl --link, gefolgt vom Namen des zu verknüpfenden Containers und einem optionalen Alias. Dadurch wird eine Verbindung zwischen Containern hergestellt und die verknüpften Container werden als Umgebungsvariablen in der Umgebung des Zielcontainers verfügbar gemacht. Diese Umgebungsvariable enthält Informationen wie Hostname, IP-Adresse und Portnummer des verknüpften Containers.

Die Verknüpfung von Containern erleichtert die Kommunikation, indem der verknüpfte Container automatisch in die Netzwerkkonfiguration des Zielcontainers integriert wird. Dadurch können sie über die bereitgestellten Aliase oder Umgebungsvariablen miteinander kommunizieren. Diese Methode ist besonders dann nützlich, wenn bestimmte Abhängigkeiten zwischen Containern bestehen, z.B. wenn ein Webserver Zugriff auf eine Datenbank benötigt.

Beachten Sie jedoch, dass die Containerverknüpfung zugunsten der Verwendung von Netzwerkaliasen und benutzerdefinierten Netzwerken als veraltet gilt. Benutzerdefinierte Netzwerke bieten Ihnen mehr Flexibilität und Kontrolle über Ihre Netzwerkkonfiguration, während Netzwerkaliase eine einfachere und unkompliziertere Möglichkeit bieten, Ihre Container miteinander zu verbinden. 

Port-Weiterleitung und Exposition

Portweiterleitung und -veröffentlichung ist eine Docker-Funktion, die es ermöglicht, Dienste in Containern über Ports verfügbar zu machen. Diese Funktionen spielen eine wichtige Rolle bei der Bereitstellung und dem Zugriff auf Anwendungen, die in Containern ausgeführt werden. 

Port-Weiterleitung zwischen Host und Container

Port Forwarding ermöglicht es, einen Port auf dem Hostsystem mit einem Port im Container zu verbinden. Dies ermöglicht den Zugriff auf Dienste, die im Container ausgeführt werden, über bestimmte Ports auf dem Hostsystem.

Um die Portweiterleitung einzurichten, verwenden Sie den Befehl docker run oder docker create mit der Option -p oder --publish. Dieser Option folgt die Definition der Port-Weiterleitung. Sie besteht aus zwei Teilen. Einem Port auf dem Host-System und einem Port im Container.

Beispiel: Um Port 8080 auf Ihrem Hostsystem mit Port 80 auf Ihrem Container zu verbinden, führen Sie den Befehl docker run -p 8080 aus.
80 verwenden. Dadurch können Dienste, die auf Port 80 im Container laufen, über Port 8080 auf dem Hostsystem erreicht werden.

Sie können die Portweiterleitung auch mit der Angabe von IP-Adressen kombinieren, um Verbindungen auf bestimmte IP-Adressen auf dem Hostsystem zu beschränken. Dadurch kann der Zugriff auf Dienste auf bestimmte Netzwerkschnittstellen beschränkt werden. 

Verwendung von Port-Exposition für den Zugriff auf Dienste

Port-Exposition ist ein weiterer Mechanismus, um Dienste innerhalb von Containern zu veröffentlichen. Im Gegensatz zum Port Forwarding werden beim Port-Exposition keine Ports auf dem Host-System geöffnet. Stattdessen wird die Portfreigabe direkt im Container konfiguriert.

Um die Port-Exposition zu konfigurieren, verwenden Sie den Befehl docker run oder docker create mit der Option -p bzw. --expose. Geben Sie nach dieser Option den Port im Container an, der für den Zugriff auf den Dienst verwendet werden soll. 

Beispiel: Um Port 80 innerhalb des Containers freizugeben, verwenden Sie den Befehl docker run --expose 80. Dadurch wird Port 80 innerhalb des Containers für den Zugriff durch andere Container im selben Netzwerk verfügbar gemacht.

Das Freigeben des Ports reicht nicht aus, um den Zugriff auf den Dienst von außerhalb des Containers zu ermöglichen. Um von außerhalb des Containers auf Dienste zugreifen zu können, die über die Portfreigabe zugänglich sind, muss zusätzlich eine Portweiterleitung eingerichtet werden, um die entsprechenden Ports auf dem Hostsystem zu öffnen.

Port Forwarding und Exposition  stellen sicher, dass Dienste innerhalb von Containern zur Verfügung gestellt werden können. Diese Funktionen machen Docker noch flexibler und portabler, da Sie Container-Anwendungen einfach aufrufen und bereitstellen können.