CodeGym /Kurse /Docker SELF /Verwendung von benutzerdefinierten Netzwerken

Verwendung von benutzerdefinierten Netzwerken

Docker SELF
Level 17 , Lektion 4
Verfügbar

5.1 Haupttypen von benutzerdefinierten Netzwerken

Benutzerdefinierte Netzwerke in Docker bieten flexible Möglichkeiten zur Konfiguration und Verwaltung der Netzwerkkommunikation zwischen Containern. Sie ermöglichen es, Container zu isolieren, ihre Interaktionen zu organisieren und komplexe Netzwerktopologien zu erstellen. In dieser Vorlesung schauen wir uns an, wie man benutzerdefinierte Netzwerke in Docker erstellt und konfiguriert sowie Beispiele für deren Verwendung.

Haupttypen von benutzerdefinierten Netzwerken

Docker unterstützt mehrere Arten von benutzerdefinierten Netzwerken, die jeweils ihre eigenen Merkmale haben und für verschiedene Nutzungsszenarien gedacht sind:

  1. Bridge (Bridge-Netzwerke): bieten Isolierung und Kommunikation zwischen Containern auf einem Host. Dieser Netzwerktype wird standardmäßig für lokale Anwendungen verwendet, die keine Interaktion außerhalb des Hosts benötigen.
  2. Overlay (Overlay-Netzwerke): gedacht für die Kommunikation von Containern, die auf verschiedenen Hosts in einem Docker Swarm- oder Kubernetes-Cluster arbeiten. Sie bieten hohe Skalierbarkeit und Sicherheit für verteilte Anwendungen.
  3. Macvlan: ermöglichen es Containern, die physische Netzwerkschnittstelle des Hosts direkt zu verwenden. Das ist nützlich für Netzwerk-Anwendungen mit hohen Leistungsanforderungen sowie in Fällen, in denen Bindung an bestimmte MAC-Adressen erforderlich ist. Container im Macvlan-Netzwerk können wie eigenständige Knoten mit anderen Geräten im physischen Netzwerk kommunizieren.
  4. Host (Host-Netzwerke): Container nutzen den Netzwerk-Stack des Hosts, wodurch der Overhead der Netzwerkvirtualisierung entfällt, aber die Isolierung verringert wird. Dieser Netzwerktype ist geeignet für Anwendungen, die maximale Netzwerkleistung erfordern.

5.2 Erstellen und Verwenden von bridge Netzwerken

Bridge Netzwerke sind der am häufigsten verwendete Typ von benutzerdefinierten Netzwerken und werden zur Isolierung von Containern auf einem Host verwendet. Container, die mit demselben bridge Netzwerk verbunden sind, können über IP-Adressen und Hostnamen miteinander interagieren.

Erstellung eines benutzerdefinierten bridge Netzwerks

Um ein benutzerdefiniertes bridge Netzwerk zu erstellen, benutze den Befehl docker network create:

Terminal

docker network create --driver bridge my_bridge_network

Starten von Containern im benutzerdefinierten Netzwerk

Starte Container mit einer Verbindung zum erstellten Netzwerk:

Terminal

docker run -d --name container1 --network my_bridge_network nginx

docker run -d --name container2 --network my_bridge_network busybox sleep 1000

Überprüfung der Verbindung zwischen Containern

Du kannst den Befehl ping verwenden, um die Verbindung zwischen Containern zu überprüfen:

Terminal

docker exec container2 ping -c 4 container1

Wenn die Container korrekt mit dem Netzwerk my_bridge_network verbunden sind, wird der Befehl ping erfolgreich sein.

5.3 Benutzerdefinierte Netzwerke in Docker Compose

Beispiele für die Verwendung von benutzerdefinierten Netzwerken in Docker Compose

Docker Compose vereinfacht das Erstellen und Verwalten von Netzwerken für Multi-Container-Anwendungen. Du kannst benutzerdefinierte Netzwerke in der Datei docker-compose.yml definieren.

Beispiel für eine docker-compose.yml-Datei:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    networks:
      - my_bridge_network

  app:
    image: myapp:latest
    networks:
      - my_bridge_network

networks:
  my_bridge_network:
    driver: bridge

Starte Docker Compose:

Terminal

docker compose up -d

In diesem Beispiel sind beide Services (web und app) mit dem benutzerdefinierten Netzwerk my_bridge_network verbunden.

5.4 Konfiguration und Nutzung von macvlan-Netzwerken

macvlan-Netzwerke erlauben es Containern, direkt die physische Netzwerkschnittstelle des Hosts zu nutzen, was für Anwendungen mit hohen Anforderungen an die Netzwerkleistung nützlich sein kann. Container in einem solchen Netzwerk erhalten eigene IP-Adressen innerhalb des angegebenen Subnetzes, wodurch sie im selben Netzwerk wie der Host sichtbar werden.

Erstellen eines macvlan-Netzwerks

Terminal

docker network create -d macvlan \
  --subnet=192.168.1.0/24 \
  --gateway=192.168.1.1 \
  -o parent=eth0 my_macvlan_network

In diesem Befehl:

  • --subnet: definiert das Subnetz, in dem sich die Container befinden werden.
  • --gateway: gibt das Gateway für die Container an.
  • -o parent: gibt die Netzwerkschnittstelle des Hosts an, mit der das Netzwerk verbunden ist.

Container im macvlan-Netzwerk starten

Terminal

docker run -d --name container1 --network my_macvlan_network nginx

docker run -d --name container2 --network my_macvlan_network busybox sleep 1000

In diesem Beispiel sind beide Container mit dem Netzwerk my_macvlan_network verbunden und haben Zugriff auf das externe Netzwerk über die physische Schnittstelle eth0.

5.5 Beispiele für die Verwendung in Docker Compose

Du kannst ebenfalls macvlan-Netzwerke in Docker Compose verwenden. Zum Beispiel:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    networks:
      - my_macvlan_network
        
networks:
  my_macvlan_network:
    driver: macvlan
    driver_opts:
      parent: eth0
    ipam:
      config:
        - subnet: 192.168.1.0/24
          gateway: 192.168.1.1

Starte Docker Compose:

Terminal

docker compose up -d

In diesem Beispiel ermöglicht das Netzwerk my_macvlan_network dem Service web, mit Geräten im Subnetz 192.168.1.0/24 einschließlich des Hosts zu kommunizieren.

Praktische Empfehlungen:

  • Netzwerkzugriff konfigurieren: Stelle sicher, dass dein Router oder Netzwerkadministrator die Nutzung des Subnetzes erlaubt, das in den macvlan-Einstellungen angegeben ist.
  • Isolation: Wenn Sicherheit wichtig ist, nutze VLANs, um das Netzwerk zu segmentieren, sodass Container nur Zugriff auf notwendige Ressourcen haben.
  • Testen: Überprüfe nach der Konfiguration die Verbindung zwischen Containern und dem externen Netzwerk mithilfe von Befehlen wie ping oder curl.

5.6 Beispiel zur Verwendung von Netzwerken für Microservices

Schauen wir uns ein Beispiel an, bei dem wir ein Frontend, ein Backend und eine Datenbank haben, die in verschiedene Netzwerke isoliert sind, aber trotzdem über Netzwerküberschneidungen miteinander interagieren können.

Datei docker-compose.yml

Yaml

version: '3.8'

services:
  frontend:
    image: myfrontend:latest
    networks:
      - front-tier
      - back-tier
        
  backend:
    image: mybackend:latest
    networks:
      - back-tier
      - db-tier
        
  database:
    image: postgres:latest
    environment:
      POSTGRES_USER: benutzer
      POSTGRES_PASSWORD: passwort
    networks:
      - db-tier
        
networks:
  front-tier:
    driver: bridge
  back-tier:
    driver: bridge
  db-tier:
    driver: bridge

Starte Docker Compose:

Terminal

docker compose up -d 

In diesem Beispiel:

  • Der Service frontend ist mit den Netzwerken front-tier und back-tier verbunden, was ihm erlaubt, sowohl mit externen Clients als auch mit dem Backend zu kommunizieren.
  • Der Service backend ist mit den Netzwerken back-tier und db-tier verbunden, was ihm erlaubt, sowohl mit dem Frontend als auch mit der Datenbank zu kommunizieren.
  • Der Service database ist nur mit dem Netzwerk db-tier verbunden, was die Datenbank vor externem Zugriff isoliert.

Praktische Empfehlungen:

  • Verwende Isolation: Die Trennung von Netzwerken hilft, den Zugriff von Services auf Datenbanken oder andere kritische Ressourcen zu begrenzen.
  • Verbindung testen: Stelle sicher, dass Services über gemeinsame Netzwerke miteinander kommunizieren können, indem du Befehle wie ping oder curl verwendest.
  • Optimierung: Verwende das Netzwerk overlay, wenn dein Projekt in einem Cluster oder auf mehreren Hosts betrieben wird.

Dieses Beispiel zeigt, wie man Netzwerkisolation erstellt und gleichzeitig die Interaktion zwischen verschiedenen Anwendungsebenen ermöglicht.

1
Опрос
Docker-Netzwerkeinstellungen,  17 уровень,  4 лекция
недоступен
Docker-Netzwerkeinstellungen
Docker-Netzwerkeinstellungen
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION