Einführung
Docker ist eine leistungsstarke Plattform zum Erstellen, Bereitstellen und Ausführen von Anwendungen in einer containerisierten Umgebung. Das Verständnis der Verwaltung und des Testens der Kommunikation zwischen Docker-Containern ist entscheidend für die Entwicklung robuster und skalierbarer Anwendungen. Dieses Tutorial führt Sie durch den Prozess der Erstellung eines benutzerdefinierten Docker-Netzwerks und des Testens der Kommunikation zwischen Containern im selben Netzwerk.
Docker-Netzwerke verstehen
Docker bietet ein integriertes Netzwerkssystem, das es Containern ermöglicht, miteinander und mit der Außenwelt zu kommunizieren. Docker unterstützt verschiedene Netzwerktypen, darunter:
Bridge-Netzwerk
Der Standardnetzwerktyp in Docker ist das Bridge-Netzwerk. Wenn Sie einen neuen Container starten, wird er automatisch mit dem Standard-Bridge-Netzwerk verbunden, es sei denn, Sie spezifizieren ein anderes Netzwerk. Container im selben Bridge-Netzwerk können über ihre Containernamen oder IP-Adressen miteinander kommunizieren.
graph LR
A[Host] -- Bridge-Netzwerk --> B[Container 1]
A[Host] -- Bridge-Netzwerk --> C[Container 2]
B[Container 1] -- Bridge-Netzwerk --> C[Container 2]
Host-Netzwerk
Das Host-Netzwerk ermöglicht es einem Container, die Netzwerkstapel des Hosts direkt zu verwenden, wodurch das Docker-Netzwerk umgangen wird. Dies kann für leistungskritische Anwendungen oder wenn Sie auf host-spezifische Netzwerkressourcen zugreifen müssen, nützlich sein.
Overlay-Netzwerk
Das Overlay-Netzwerk wird verwendet, um mehrere Docker-Daemons miteinander zu verbinden und die Kommunikation zwischen Swarm-Diensten zu ermöglichen. Overlay-Netzwerke werden typischerweise in einer Docker Swarm-Umgebung verwendet.
Benutzerdefiniertes Netzwerk
Zusätzlich zu den Standardnetzwerken können Sie eigene benutzerdefinierte Netzwerke erstellen. Benutzerdefinierte Netzwerke ermöglichen es Ihnen, Container voneinander zu isolieren und die Kommunikation zwischen ihnen zu steuern. Dies ist nützlich für die Entwicklung komplexerer, mehrschichtiger Anwendungen.
graph LR
A[Host] -- Benutzerdefiniertes Netzwerk --> B[Container 1]
A[Host] -- Benutzerdefiniertes Netzwerk --> C[Container 2]
B[Container 1] -- Benutzerdefiniertes Netzwerk --> C[Container 2]
Das Verständnis der Netzwerkfunktionen von Docker ist entscheidend für die Entwicklung und Verwaltung von containerisierten Anwendungen. Im nächsten Abschnitt werden wir untersuchen, wie man ein benutzerdefiniertes Netzwerk erstellt und die Kommunikation zwischen Containern in diesem Netzwerk testet.
Erstellen eines benutzerdefinierten Netzwerks
Um ein benutzerdefiniertes Netzwerk in Docker zu erstellen, können Sie den Befehl docker network create verwenden. Mit diesem Befehl können Sie den Netzwerk-Treiber, das Subnetz und andere Konfigurationsoptionen spezifizieren.
Erstellen eines benutzerdefinierten Bridge-Netzwerks
Erstellen wir ein benutzerdefiniertes Bridge-Netzwerk mit dem Namen my-network:
docker network create my-network
Sie können die Netzwerkerstellung mit dem Befehl docker network ls überprüfen:
NETWORK ID NAME DRIVER SCOPE
a1b2c3d4e5f6 my-network bridge local
Verbinden von Containern mit dem benutzerdefinierten Netzwerk
Starten wir nun zwei Container und verbinden Sie diese mit dem benutzerdefinierten Netzwerk my-network:
## Container 1 starten
docker run -d --name container1 --network my-network ubuntu:22.04 sleep infinity
## Container 2 starten
docker run -d --name container2 --network my-network ubuntu:22.04 sleep infinity
Sie können das Netzwerk und die verbundenen Container mit dem Befehl docker network inspect untersuchen:
[
{
"Name": "my-network",
"Id": "a1b2c3d4e5f6",
"Created": "2023-04-18T12:34:56.789Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.18.0.0/16"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"container1_id": {
"Name": "container1",
"EndpointID": "container1_endpoint_id",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
},
"container2_id": {
"Name": "container2",
"EndpointID": "container2_endpoint_id",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
Nachdem wir nun ein benutzerdefiniertes Netzwerk erstellt und Container damit verbunden haben, können wir im nächsten Abschnitt die Kommunikation zwischen den Containern testen.
Test der Containerkommunikation
Nachdem wir ein benutzerdefiniertes Netzwerk erstellt und Container damit verbunden haben, können wir nun die Kommunikation zwischen den Containern testen.
Ping zwischen Containern
Beginnen wir mit dem Ping eines Containers vom anderen aus:
## Geben Sie den ersten Container ein
docker exec -it container1 bash
## Pingen Sie den zweiten Container per Name
ping -c 4 container2
Die Ausgabe sollte zeigen, dass die Container über ihre Containernamen miteinander kommunizieren können:
PING container2 (172.18.0.3) 56(84) Bytes of data.
64 bytes from container2.my-network (172.18.0.3): icmp_seq=1 ttl=64 time=0.065 ms
64 bytes from container2.my-network (172.18.0.3): icmp_seq=2 ttl=64 time=0.057 ms
64 bytes from container2.my-network (172.18.0.3): icmp_seq=3 ttl=64 time=0.057 ms
64 bytes from container2.my-network (172.18.0.3): icmp_seq=4 ttl=64 time=0.057 ms
--- container2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3ms
rtt min/avg/max/mdev = 0.057/0.059/0.065/0.003 ms
Test der TCP-Kommunikation
Sie können auch die TCP-Kommunikation zwischen den Containern testen. Beispielsweise können Sie einen einfachen HTTP-Server in einem Container ausführen und diesen vom anderen Container aus aufrufen:
## Starten Sie einen einfachen HTTP-Server in container1
docker exec -it container1 bash
python3 -m http.server 8000
## Rufen Sie in einem anderen Terminal den HTTP-Server von container2 aus auf
docker exec -it container2 bash
curl http://container1:8000
Die Ausgabe im zweiten Terminal sollte den Inhalt des HTTP-Servers anzeigen, der im ersten Container ausgeführt wird.
Durch das Testen der Kommunikation zwischen Containern im selben benutzerdefinierten Netzwerk stellen Sie sicher, dass die Komponenten Ihrer containerisierten Anwendung ordnungsgemäß miteinander interagieren können. Dies ist unerlässlich für die Entwicklung und Bereitstellung komplexer, mehrdienstlicher Anwendungen.
Zusammenfassung
In diesem Docker-Tutorial lernen Sie, wie Sie ein benutzerdefiniertes Netzwerk erstellen, Container auf diesem Netzwerk starten und die Kommunikation zwischen ihnen überprüfen. Am Ende dieses Leitfadens verfügen Sie über das Wissen und die Fähigkeiten, die Konnektivität zwischen Ihren Docker-Containern zu testen und sicherzustellen, dass Ihre Anwendungen nahtlos miteinander innerhalb desselben benutzerdefinierten Netzwerks interagieren können.



