Containerkommunikation im selben benutzerdefinierten Netzwerk testen

DockerDockerBeginner
Jetzt üben

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

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.