Wie man das Netzwerk für Docker-Container konfiguriert

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

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

  1. Bridge: Der Standard-Netzwerk-Treiber, der auf dem Host-Rechner eine virtuelle Brücke erstellt und Container an diese anschließt.
  2. Host: Ermöglicht es einem Container, direkt auf den Netzwerk-Stack (network stack) des Hosts zuzugreifen und umgeht so das virtuelle Netzwerk.
  3. Overlay: Ermöglicht die Kommunikation zwischen Containern auf mehreren Docker-Hosts und erstellt so ein verteiltes Netzwerk.
  4. Macvlan: Ermöglicht es, Containern eine MAC-Adresse zuzuweisen, so dass sie im Netzwerk wie physische Geräte erscheinen.
  5. 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.