Einführung
Docker ist zu einer weit verbreiteten Technologie zur Containerisierung von Anwendungen geworden. Die Verwaltung der Netzwerkebene von Docker-Containern kann jedoch eine entscheidende, aber auch komplexe Aufgabe sein. In diesem Tutorial werden Sie durch den Prozess der Netzwerkkonfiguration für Ihre Docker-Container geführt. Es werden die Grundlagen von Docker-Netzwerken behandelt, die Einrichtung von Netzwerk-Treibern (network drivers) sowie die Verbindung von Containern mit Hosts erklärt.
Docker-Netzwerk-Grundlagen
Grundlagen zu Docker-Netzwerken
Docker bietet mehrere Arten von Netzwerk-Treibern (network drivers), mit denen Sie das Netzwerk für Ihre Container konfigurieren können. Der Standard-Netzwerk-Treiber ist der bridge-Treiber, der auf dem Host-Rechner eine virtuelle Brücke erstellt und jeden Container an diese anschließt. Dadurch können Container miteinander und mit dem Host-Rechner kommunizieren.
graph LR
Host -- Network Bridge --> Container1
Host -- Network Bridge --> Container2
Container1 -- Network Bridge --> Container2
Neben dem bridge-Treiber unterstützt Docker auch andere Netzwerk-Treiber wie host, overlay, macvlan und none. Jeder Treiber hat seine eigenen Anwendungsfälle und Eigenschaften, die wir im nächsten Abschnitt untersuchen werden.
Arten von Netzwerk-Treibern
- Bridge: Der Standard-Netzwerk-Treiber, der auf dem Host-Rechner eine virtuelle Brücke erstellt und Container an diese anschließt.
- Host: Ermöglicht es einem Container, direkt auf den Netzwerk-Stack (network stack) des Hosts zuzugreifen und umgeht so das virtuelle Netzwerk.
- Overlay: Ermöglicht die Kommunikation zwischen Containern auf mehreren Docker-Hosts und erstellt so ein verteiltes Netzwerk.
- Macvlan: Ermöglicht es, Containern eine MAC-Adresse zuzuweisen, so dass sie im Netzwerk wie physische Geräte erscheinen.
- None: Deaktiviert das Netzwerk für einen Container und isoliert ihn somit vom Netzwerk.
Jeder Netzwerk-Treiber hat seine eigenen Vorteile und Anwendungsfälle. Beispielsweise ist der host-Treiber nützlich für leistungsempfindliche Anwendungen, während der overlay-Treiber für die Erstellung verteilter Anwendungen auf mehreren Hosts unerlässlich ist.
graph LR
Host -- Bridge --> Container1
Host -- Host --> Container2
Host1 -- Overlay --> Container3
Host2 -- Overlay --> Container4
Host -- Macvlan --> Container5
Host -- None --> Container6
Das Verständnis der verschiedenen Netzwerk-Treiber und ihrer Anwendungsfälle ist entscheidend für die Konfiguration des Netzwerks in Ihrer Docker-Umgebung.
Konfiguration von Netzwerk-Treibern
Konfiguration des Bridge-Netzwerks
Das bridge-Netzwerk ist der Standard-Netzwerk-Treiber in Docker. Um ein neues Bridge-Netzwerk zu erstellen, können Sie den folgenden Befehl verwenden:
docker network create my-bridge-network
Anschließend können Sie einen Container an das neue Bridge-Netzwerk anhängen, indem Sie die Option --network verwenden:
docker run -d --name my-container --network my-bridge-network nginx
Container auf demselben Bridge-Netzwerk können miteinander über den Containernamen oder die IP-Adresse des Containers kommunizieren.
Konfiguration des Host-Netzwerks
Um den host-Netzwerk-Treiber zu verwenden, können Sie einen Container mit der Option --network host starten:
docker run -d --name my-host-container --network host nginx
Wenn Sie das host-Netzwerk verwenden, wird der Container den Netzwerk-Stack (network stack) des Hosts teilen und kann somit direkt auf die Netzwerkschnittstellen und Ports des Hosts zugreifen.
Konfiguration des Overlay-Netzwerks
Um ein Overlay-Netzwerk zu erstellen, müssen Sie zuerst einen Docker Swarm-Cluster initialisieren. Sobald der Swarm eingerichtet ist, können Sie ein Overlay-Netzwerk mit dem folgenden Befehl erstellen:
docker network create --driver overlay my-overlay-network
Anschließend können Container wie beim Bridge-Netzwerk mit der Option --network an das Overlay-Netzwerk angehängt werden.
docker run -d --name my-overlay-container --network my-overlay-network nginx
Overlay-Netzwerke ermöglichen die Kommunikation zwischen Containern auf mehreren Docker-Hosts.
Konfiguration des Macvlan-Netzwerks
Um den macvlan-Netzwerk-Treiber zu verwenden, müssen Sie die übergeordnete Schnittstelle (parent interface) auf dem Host angeben. Sie können ein neues macvlan-Netzwerk mit dem folgenden Befehl erstellen:
docker network create -d macvlan --subnet=172.16.86.0/24 --gateway=172.16.86.1 -o parent=eth0 my-macvlan-network
Anschließend können Container mit der Option --network an das macvlan-Netzwerk angehängt werden.
docker run -d --name my-macvlan-container --network my-macvlan-network nginx
Macvlan-Netzwerke ermöglichen es Containern, ihre eigenen MAC-Adressen zu haben, so dass sie im Netzwerk wie physische Geräte erscheinen.
Indem Sie verstehen, wie Sie diese verschiedenen Netzwerk-Treiber konfigurieren, können Sie die am besten geeignete Lösung für Ihre Docker-basierten Anwendungen auswählen.
Verbinden von Containern und Hosts
Freigeben von Container-Ports
Um externen Zugriff auf einen Dienst zu ermöglichen, der in einem Container läuft, müssen Sie den Port des Containers freigeben. Dies können Sie mit der Option -p oder --publish beim Starten eines Containers tun:
docker run -d -p 80:80 --name my-web-server nginx
Im obigen Beispiel wird Port 80 auf dem Host-Rechner auf Port 80 innerhalb des Containers abgebildet. Dadurch können Clients auf den in einem Container laufenden Nginx-Webserver zugreifen.
Verknüpfen von Containern
Sie können Container auch miteinander verbinden, indem Sie die Option --link verwenden. Dies ermöglicht es einem Container, auf die Umgebungsvariablen und Netzwerkinformationen eines anderen Containers zuzugreifen.
docker run -d --name my-db-server mysql
docker run -d --name my-app-server --link my-db-server:db nginx
In diesem Beispiel kann der my-app-server-Container auf den my-db-server-Container über den Alias db zugreifen.
Verwenden von Docker Compose
Docker Compose ist ein Tool, das den Prozess der Definition und Ausführung von Anwendungen mit mehreren Containern vereinfacht. Sie können Compose verwenden, um die Netzwerkkonfiguration und die Beziehungen zwischen Containern in einer YAML-Datei zu definieren.
Hier ist ein Beispiel für eine docker-compose.yml-Datei:
version: "3"
services:
web:
image: nginx
ports:
- "80:80"
networks:
- my-network
db:
image: mysql
networks:
- my-network
networks:
my-network:
driver: bridge
In diesem Beispiel sind die Dienste web und db mit dem Bridge-Netzwerk my-network verbunden, so dass sie miteinander kommunizieren können.
Indem Sie verstehen, wie Sie Container-Ports freigeben, Container verknüpfen und Docker Compose verwenden, können Sie Ihre Container und Hosts effektiv verbinden, um komplexe, verteilte Anwendungen zu erstellen.
Zusammenfassung
Am Ende dieses Tutorials werden Sie ein umfassendes Verständnis von Docker-Netzwerken haben und können die Netzwerkeinstellungen Ihrer Container effektiv konfigurieren. Sie werden lernen, wie Sie verschiedene Netzwerk-Treiber (network drivers) nutzen, Ihre Container mit Hosts verbinden und die gesamte Netzwerkleistung Ihrer Docker-basierten Anwendungen optimieren können.



