3.1 Grundlagen der bridge-Netzwerk
Das bridge-Netzwerk
ist der Standardnetzwerktreiber in Docker und wird verwendet, um ein isoliertes Netzwerk zu erstellen, in dem Container miteinander interagieren können. Dieses Netzwerk ermöglicht es Containern, über IP-Adressen und Hostnamen zu kommunizieren, was eine bequeme Methode zur Organisation der Interaktion zwischen verschiedenen Komponenten von Multi-Container-Anwendungen bietet.
Das bridge-Netzwerk
erstellt ein privates internes Netzwerk auf Host-Ebene, das vom externen Netzwerk des Hosts isoliert ist. Container, die mit diesem Netzwerk verbunden sind, können miteinander interagieren, aber ohne Portweiterleitungseinstellungen nicht direkt von außen zugänglich sein.
Automatische Erstellung des bridge-Netzwerks
Standardmäßig erstellt Docker das bridge-Netzwerk
während der Installation, und Container, die ohne Angabe eines bestimmten Netzwerks gestartet werden, werden automatisch mit diesem Netzwerk verbunden.
Beispiel zur Erstellung und Nutzung von Containern im bridge-Netzwerk
1. Starten von Containern im bridge-Netzwerk
:
In diesem Beispiel starten wir zwei Container: container1 mit Nginx und container2 mit Busybox. Beide Container sind mit dem Standard-bridge-Netzwerk verbunden.
docker run -d --name container1 nginx
docker run -d --name container2 busybox sleep 1000
2. Überprüfung der IP-Adressen der Container:
Um die IP-Adressen der Container zu überprüfen, verwende den Befehl docker inspect.
Diese Befehle geben die IP-Adressen der Container aus, die zur Kommunikation zwischen ihnen verwendet werden können.
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container1
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container2
3. Kommunikation zwischen Containern über IP-Adresse:
Um die Kommunikation zwischen Containern zu prüfen, verwende den ping-Befehl
aus dem Container container2
, um container1
zu pingen.
Wenn die Container korrekt mit dem bridge-Netzwerk
verbunden sind, wird der ping-Befehl
erfolgreich sein.
docker exec container2 ping -c 4 <IP_ADDRESS_OF_CONTAINER1>
Erklärung: Das bridge-Netzwerk
bietet eine einfache Lösung für lokale Anwendungen, bei denen Container miteinander interagieren müssen, während sie vom externen Netzwerk isoliert bleiben. Das Pingen über die IP-Adresse ist eine grundlegende Methode zur Überprüfung der Netzwerkverbindung. Für komplexere Anwendungen kann jedoch die Konfiguration von DNS oder zusätzlichen Netzwerktreibern erforderlich sein.
3.2 Verwendung von Hostnamen
Verwendung von Hostnamen zur Verbindung zwischen Containern
Neben der Verwendung von IP-Adressen ermöglicht Docker auch die Verwendung von Containernamen für die Verbindung zwischen ihnen. Das vereinfacht die Konfiguration, da Container-Namen konstant bleiben, im Gegensatz zu IP-Adressen, die sich beim Neustart der Container ändern können.
Beispiel für Verbindung mit Hostnamen
1. Starten von Containern mit Angabe des Netzwerks bridge
:
docker run -d --name webserver --network bridge nginx
docker run -d --name appserver --network bridge busybox sleep 1000
2. Überprüfung der Verbindung über den Hostnamen:
Verwende den Befehl ping
aus dem Container appserver
, um webserver
anzupingen:
docker exec appserver ping -c 4 webserver
Erstellung eines benutzerdefinierten bridge-Netzwerks
Anstelle der Verwendung des Standard-bridge-Netzwerks
kannst du ein benutzerdefiniertes bridge-Netzwerk
erstellen, um die Interaktion zwischen Containern besser zu kontrollieren.
Beispiel für die Erstellung eines benutzerdefinierten Netzwerks
1. Erstellung eines benutzerdefinierten Netzwerks:
docker network create --driver bridge my_bridge_network
2. Starten von Containern im benutzerdefinierten Netzwerk:
docker run -d --name webserver --network my_bridge_network nginx
docker run -d --name appserver --network my_bridge_network busybox sleep 1000
3. Überprüfung der Verbindung über den Hostnamen:
docker exec appserver ping -c 4 webserver
3.3 Beispiele für mehrere Hosts
Beispiele für praktische Anwendungen
Beispiel 1: Webserver und Datenbank
Erstelle eine Datei docker-compose.yml
für den Webserver und die Datenbank:
version: '3.8'
services:
web:
image: nginx:latest
networks:
- my_bridge_network
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Starte Docker Compose:
docker compose up -d
Prüfe die Verbindung zwischen den Containern:
docker compose exec web ping -c 4 db
Beispiel 2: Microservice-Architektur
Erstelle eine Datei docker-compose.yml
für die Microservice-Anwendung:
version: '3.8'
services:
frontend:
image: nginx:latest
networks:
- my_bridge_network
backend:
image: mybackend:latest
networks:
- my_bridge_network
db:
image: postgres:latest
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
networks:
- my_bridge_network
networks:
my_bridge_network:
driver: bridge
Starte Docker Compose
:
docker compose up -d
Prüfe die Verbindung zwischen den Containern:
docker compose exec backend ping -c 4 db
docker compose exec frontend ping -c 4 backend
GO TO FULL VERSION