Wie man den docker network connect-Befehl verwendet, um Container-Netzwerke zu verwalten

DockerDockerBeginner
Jetzt üben

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

Einführung

In diesem Lab lernen Sie, wie Sie Container-Netzwerke effektiv mit dem Befehl docker network connect verwalten können. Sie werden untersuchen, wie Sie einen laufenden Container an ein bestehendes Netzwerk anschließen, einen Container während seines ersten Starts an ein Netzwerk anschließen, eine statische IP-Adresse für einen Container in einem Netzwerk festlegen und Netzwerk-Aliase für Container erstellen, um die Kommunikation zu erleichtern.

Durch praktische Übungen gewinnen Sie praktische Erfahrungen bei der Manipulation von Container-Netzwerkkonfigurationen, sodass Sie robuster und besser vernetzte Docker-Anwendungen erstellen können.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/run -.-> lab-555173{{"Wie man den docker network connect-Befehl verwendet, um Container-Netzwerke zu verwalten"}} docker/ps -.-> lab-555173{{"Wie man den docker network connect-Befehl verwendet, um Container-Netzwerke zu verwalten"}} docker/rm -.-> lab-555173{{"Wie man den docker network connect-Befehl verwendet, um Container-Netzwerke zu verwalten"}} docker/network -.-> lab-555173{{"Wie man den docker network connect-Befehl verwendet, um Container-Netzwerke zu verwalten"}} end

Einen laufenden Container an ein Netzwerk anschließen

In diesem Schritt lernen Sie, wie Sie einen laufenden Docker-Container an ein bestehendes Netzwerk anschließen können. Dies ist nützlich, wenn Sie einen Container haben, der bereits läuft und der mit anderen Containern oder Diensten in einem bestimmten Netzwerk kommunizieren muss.

Zunächst erstellen wir ein neues Netzwerk, das wir für diese Demonstration verwenden werden. Wir werden ein Bridge-Netzwerk namens my-network erstellen.

docker network create my-network

Sie sollten eine Ausgabe ähnlich dieser sehen, die darauf hinweist, dass das Netzwerk erfolgreich erstellt wurde:

<network_id>

Jetzt lassen wir einen einfachen Container laufen, der zunächst nicht mit my-network verbunden ist. Wir werden einen alpine-Container im detached-Modus (-d) ausführen und ihn my-container nennen.

docker run -d --name my-container alpine sleep infinity

Die Ausgabe wird die Container-ID sein:

<container_id>

Um zu überprüfen, dass der Container läuft und nicht mit my-network verbunden ist, können Sie die Netzwerkeinstellungen des Containers überprüfen.

docker inspect my-container --format '{{json .NetworkSettings.Networks}}'

Die Ausgabe zeigt das Standard-Bridge-Netzwerk, aber nicht my-network:

{
  "bridge": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 16,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  }
}

Jetzt verbinden wir den laufenden my-container mit dem my-network mithilfe des Befehls docker network connect.

docker network connect my-network my-container

Es wird keine Ausgabe angezeigt, wenn der Befehl erfolgreich ist.

Um zu überprüfen, dass der Container jetzt mit my-network verbunden ist, überprüfen Sie erneut die Netzwerkeinstellungen des Containers.

docker inspect my-container --format '{{json .NetworkSettings.Networks}}'

Diesmal sollte die Ausgabe sowohl das Standard-Bridge-Netzwerk als auch my-network anzeigen:

{
  "bridge": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 16,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  },
  "my-network": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 24,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  }
}

Abschließend bereinigen wir den Container und das Netzwerk, das wir erstellt haben.

docker stop my-container
docker rm my-container
docker network rm my-network

Einen Container beim Starten an ein Netzwerk anschließen

In diesem Schritt lernen Sie, wie Sie einen Docker-Container beim Starten an ein bestimmtes Netzwerk anschließen können. Dies ist die gängigste Methode, um sicherzustellen, dass Ihre Container von Anfang an im richtigen Netzwerk sind.

Zunächst erstellen wir ein neues Netzwerk namens app-network, das wir verwenden werden.

docker network create app-network

Sie sollten eine Ausgabe ähnlich dieser sehen, die darauf hinweist, dass das Netzwerk erfolgreich erstellt wurde:

<network_id>

Jetzt führen wir einen einfachen nginx-Container aus und verbinden ihn direkt beim Starten mit dem app-network. Wir verwenden die Option --network gefolgt vom Netzwerknamen. Wir werden ihn auch im detached-Modus (-d) ausführen und ihn web-server nennen.

docker run -d --name web-server --network app-network nginx

Die Ausgabe wird die Container-ID sein:

<container_id>

Um zu überprüfen, dass der Container mit app-network verbunden ist, können Sie die Netzwerkeinstellungen des Containers überprüfen.

docker inspect web-server --format '{{json .NetworkSettings.Networks}}'

Die Ausgabe sollte zeigen, dass der Container mit app-network verbunden ist:

{
  "app-network": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 24,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  }
}

Beachten Sie, dass der Container diesmal nur mit app-network verbunden ist und nicht mit dem Standard-Bridge-Netzwerk, da wir das Netzwerk während des docker run-Befehls angegeben haben.

Abschließend bereinigen wir den Container und das Netzwerk.

docker stop web-server
docker rm web-server
docker network rm app-network

Die IP-Adresse für einen Container in einem Netzwerk festlegen

In diesem Schritt lernen Sie, wie Sie einem Container beim Verbinden mit einem Netzwerk eine bestimmte statische IP-Adresse zuweisen können. Standardmäßig weist Docker IP-Adressen dynamisch aus dem Subnetz des Netzwerks zu. In einigen Fällen benötigen Sie jedoch möglicherweise, dass ein Container eine vorhersagbare IP-Adresse hat.

Zunächst erstellen wir ein neues Netzwerk mit einem festgelegten Subnetz. Wir werden ein Bridge-Netzwerk namens static-net mit dem Subnetz 172.20.0.0/16 erstellen.

docker network create --subnet 172.20.0.0/16 static-net

Sie sollten eine Ausgabe ähnlich dieser sehen, die darauf hinweist, dass das Netzwerk erfolgreich erstellt wurde:

<network_id>

Jetzt führen wir einen alpine-Container aus und verbinden ihn mit dem static-net, wobei wir mithilfe der Option --ip eine statische IP-Adresse angeben. Wir weisen die IP-Adresse 172.20.0.10 zu. Wir werden ihn im detached-Modus (-d) ausführen und ihn static-ip-container nennen.

docker run -d --name static-ip-container --network static-net --ip 172.20.0.10 alpine sleep infinity

Die Ausgabe wird die Container-ID sein:

<container_id>

Um zu überprüfen, dass der Container auf static-net die zugewiesene statische IP-Adresse hat, überprüfen Sie die Netzwerkeinstellungen des Containers.

docker inspect static-ip-container --format '{{json .NetworkSettings.Networks}}'

Die Ausgabe sollte zeigen, dass der Container mit der angegebenen IP-Adresse mit static-net verbunden ist:

{
  "static-net": {
    "IPAMData": null,
    "IPAddress": "172.20.0.10",
    "IPPrefixLen": 16,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "DriverOpts": null
  }
}

Abschließend bereinigen wir den Container und das Netzwerk.

docker stop static-ip-container
docker rm static-ip-container
docker network rm static-net

Netzwerk-Aliase für einen Container erstellen

In diesem Schritt lernen Sie, wie Sie Netzwerk-Aliase für einen Container erstellen können. Netzwerk-Aliase bieten alternative Namen, die andere Container im gleichen Netzwerk verwenden können, um den Container aufzulösen und sich mit ihm zu verbinden. Dies ist nützlich für die Service-Ermittlung (Service Discovery) innerhalb eines Docker-Netzwerks.

Zunächst erstellen wir ein neues Netzwerk namens alias-network.

docker network create alias-network

Sie sollten eine Ausgabe ähnlich dieser sehen, die darauf hinweist, dass das Netzwerk erfolgreich erstellt wurde:

<network_id>

Jetzt führen wir einen nginx-Container aus und verbinden ihn mit dem alias-network, wobei wir mithilfe der Option --network-alias einen Netzwerk-Alias zuweisen. Wir weisen den Alias web zu. Wir werden ihn im detached-Modus (-d) ausführen und ihn alias-container nennen.

docker run -d --name alias-container --network alias-network --network-alias web nginx

Die Ausgabe wird die Container-ID sein:

<container_id>

Um zu überprüfen, dass der Container den Netzwerk-Alias hat, überprüfen Sie die Netzwerkeinstellungen des Containers.

docker inspect alias-container --format '{{json .NetworkSettings.Networks}}'

Die Ausgabe sollte zeigen, dass der Container mit alias-network verbunden ist und den Netzwerk-Alias auflistet:

{
  "alias-network": {
    "IPAMData": null,
    "IPAddress": "<ip_address>",
    "IPPrefixLen": 24,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "<mac_address>",
    "Aliases": ["web", "alias-container"],
    "DriverOpts": null
  }
}

Beachten Sie den Teil "Aliases":["web","alias-container"] in der Ausgabe. Docker fügt automatisch auch den Containernamen als Alias hinzu.

Jetzt führen wir einen anderen Container im gleichen Netzwerk aus und versuchen, den alias-container mithilfe seines Netzwerk-Aliases web zu pingen. Wir werden einen alpine-Container interaktiv (-it) im alias-network ausführen.

docker run -it --rm --network alias-network alpine ping -c 3 web

Sie sollten eine Ausgabe sehen, die darauf hinweist, dass die Pings an den alias-container mithilfe des Alias web erfolgreich waren:

PING web (<ip_address>): 56 data bytes
64 bytes from <ip_address>: seq=0 ttl=64 time=0.xxx ms
64 bytes from <ip_address>: seq=1 ttl=64 time=0.xxx ms
64 bytes from <ip_address>: seq=2 ttl=64 time=0.xxx ms

--- web ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.xxx/0.xxx/0.xxx/0.xxx ms

Dies zeigt, dass Container im gleichen Netzwerk sich mithilfe von Netzwerk-Aliasen auflösen und miteinander kommunizieren können.

Abschließend bereinigen wir die Container und das Netzwerk.

docker stop alias-container
docker rm alias-container
docker network rm alias-network

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie Docker-Container-Netzwerke mit dem Befehl docker network connect verwalten können. Sie haben geübt, einen laufenden Container mit einem bestehenden Netzwerk zu verbinden, was zeigt, wie Sie einem Container nach seinem Start dynamisch Netzwerkverbindung hinzufügen können.

Darüber hinaus haben Sie untersucht, wie Sie einen Container zum Zeitpunkt seiner Erstellung mit einem bestimmten Netzwerk verbinden, eine statische IP-Adresse für einen Container in einem Netzwerk festlegen und Netzwerk-Aliase erstellen können, um einem Container innerhalb eines Netzwerks alternative Namen zu geben. Dies verbessert die Entdeckbarkeit (Discoverability) und Kommunikation zwischen Containern.