Grundlagen für ein einfaches Netzwerk auf einem einzelnen Host

Erfahren Sie, wie Sie grundlegende und erweiterte Netzwerktools zur Verwaltung von Docker-Containern verwenden können. Die Netzwerkfunktion ermöglicht es Benutzern, ihre eigenen Netzwerke zu definieren und Container mit ihnen zu verbinden.

Sie können ein Netzwerk auf einem einzelnen oder aus mehreren Hosts mit der Docker-Netzwerk-Funktion erstellen. Dieser Artikel behandelt die Vernetzung von Docker-Containern auf einem einzelnen Host. Informationen und Anweisungen zur Vernetzung von Docker-Containern über mehrere Hosts hinweg finden Sie in unserem Artikel zu diesem Thema.

Anforderungen

  • IONOS Linux Cloud Server
  • Docker wurde auf Ihrem System installiert und läuft dort.

Sicheres Arbeiten mit Docker ohne Sudo

Der Docker-Daemon läuft als root, was bedeutet, dass Benutzer sudo verwenden müssen, um Docker-Befehle auszuführen.

Um nicht für jeden Docker-Befehl sudo verwenden zu müssen, fügen Sie einfach Ihre Benutzer mit folgendem Befehl zur Docker-Gruppe hinzu:

usermod -aG docker [username]

Wenn Sie beispielsweise den Benutzer jdoe zur Docker-Gruppe hinzufügen, muss dieser Benutzer nicht mehr sudo für jeden Docker-Befehl verwenden. Um den Benutzer zur Gruppe hinzuzufügen, verwenden Sie den Befehl:

usermod -aG docker jdoe

Dockers Standard-Netzwerke

Jede Docker-Installation erstellt automatisch drei Standard-Netzwerke. Sie können diese Netzwerke mit folgendem Befehl auflisten:

sudo docker network ls

Die Ausgabe dieses Befehls sieht in etwa so aus:

Networking with Docker 1

Das Bridge-Netzwerk ist das Standardnetzwerk. Wenn nicht anders angegeben, ist Bridge das Netzwerk, in dem Docker jeden neuen Container startet.

Docker-Netzwerk: Bridge vs. Overlay

Docker unterstützt nativ zwei Arten von Netzwerken: Bridge und Overlay.

  • Ein Bridge-Netzwerk ist auf einen einzelnen Host (Server) beschränkt.
  • Ein Overlay-Netzwerk kann mehrere Hosts (Server) umfassen.

Da Overlay-Netzwerke komplizierter sind, werden wir sie in einem weiteren Artikel behandeln.

Überprüfen eines Netzwerks

Die Überprüfung eines Docker-Netzwerks gibt Informationen über dieses Netzwerk zurück, einschließlich der Informationen darüber, welche Container an das Netzwerk angeschlossen sind, und ihrer IP-Adressen. Dies ist ein wertvolles Testwerkzeug und eine einfache Möglichkeit, die IP-Adresse Ihres Containers zu finden.

Sie können ein Netzwerk mit folgendem Befehl inspizieren:

sudo docker network inspect [network name]

Um beispielsweise das Bridge-Netzwerk zu inspizieren, lautet der Befehl:

sudo docker network inspect bridge

Die Ausgabe dieses Befehls sieht in etwa so aus:

Networking with Docker 2: Inspect network

Wie Sie im obigen Screenshot sehen können, läuft auf diesem Bridge-Netzwerk nur ein Container. Der Name des Containers lautet test_centos_container und die ihm zugewiesene IP-Adresse lautet 172.17.0.0.3.

Hinweis: Container können nur miteinander kommunizieren, wenn sie im selben Netzwerk laufen. Wenn Sie beispielsweise eine Webanwendung in einem Container hatten, die sich mit einer Datenbank in einem anderen Container verbinden musste, müssten sich diese beiden Container im selben Netzwerk befinden.

Erstellen eines neuen Bridge-Netzwerks

Um ein eigenes Netzwerk zu erstellen, lautet der Befehl:

sudo docker network create -d [driver] [new network name]

Mit dem Flag -d können Sie den Treiber für das Netzwerk angeben. Für ein Bridge-Netzwerk verwenden Sie den Bridge-Treiber.

Um beispielsweise ein Bridge-Netzwerk namens new_test_network zu erstellen, verwenden Sie den Befehl:

sudo docker network create -d bridge new_test_network

Sie können sudo docker network ls verwenden, um die Netzwerke auf Ihrem Host aufzulisten und zu überprüfen, ob Ihr Netzwerk erstellt wurde.

Starten eines Containers und Hinzufügen desselben zu einem Netzwerk

Wenn Sie beim Starten eines Containers kein Netzwerk angeben, wird er automatisch dem Standard-Bridge-Netzwerk hinzugefügt.

Um einen Container zu starten und ihn zu einem bestimmten Netzwerk hinzuzufügen, verwenden Sie den Befehl:

sudo docker run -it --net=[network name] --name [container name] [image]

Um beispielsweise einen Container mit dem Namen test_python_container aus dem Python-Image zu starten und ihn zu einem Netzwerk mit dem Namen new_test_network hinzuzufügen, lautet der Befehl:

sudo docker run -it --net=new_test_network --name test_centos_container centos

Verwenden Sie STRG-p STRG-q, um den Container zu verlassen.

Sie können sudo docker network inspect [network name] verwenden, um das Netzwerk zu überprüfen und sicherzustellen, dass der Container angehängt ist.

Hinzufügen eines laufenden Containers zu einem Netzwerk

Mit folgendem Befehl können Sie einen laufenden Container zu einem Netzwerk hinzufügen:

sudo docker network connect [network name] [container name]

Um beispielsweise einen laufenden Container namens test_centos_container zu einem Netzwerk namens another_test_network hinzuzufügen, lautet der Befehl:

sudo docker network connect another_test_network test_centos_container

Sie können sudo docker network inspect[network name] verwenden, um das Netzwerk zu überprüfen und sicherzustellen, dass der Container angehängt ist.

Hinweis: Mit Docker können Sie Container zu mehreren Netzwerken hinzufügen. Es ist nicht erforderlich, einen Container von einem Netzwerk zu trennen, bevor er zu einem anderen hinzugefügt wird.

Trennen eines Containers von einem Netzwerk

Um einen Container von einem Netzwerk zu trennen, verwenden Sie den Befehl:

sudo docker network disconnect [network name] [container ID or name]

Um beispielsweise einen Container mit dem Namen test_centos_container vom neuen_test_network-Netzwerk zu trennen, lautet der Befehl:

sudo docker network disconnect new_test_network test_centos_container

Sie können den Befehl sudo docker network inspect [network name] verwenden, um das Netzwerk zu überprüfen und festzustellen, ob der Container getrennt wurde.

Hinweis: Mit dem Docker können Sie Container zu mehreren Netzwerken hinzufügen. Es ist nicht erforderlich, einen Container von einem Netzwerk zu trennen, bevor er zu einem anderen hinzugefügt wird.

Löschen eines Netzwerks

Hinweis: Sie können die Standard-Netzwerke, die Docker beim Start erstellt, nicht löschen.

Nachdem alle Container, die zu einem Netzwerk hinzugefügt wurden, gestoppt oder getrennt wurden, können Sie das Netzwerk mit folgendem Befehl löschen:

sudo docker network rm [network ID or name]

Um beispielsweise das Netzwerk new_test_network zu entfernen, lautet der Befehl:

sudo docker network rm new_test_network

Sie können mit dem Befehl sudo docker network ls überprüfen, ob das Netzwerk entfernt wurde.

Beispiel: Ping zwischen zwei Containern im gleichen Netzwerk

Für dieses Beispiel werden wir ein benutzerdefiniertes Bridge-Netzwerk erstellen, zwei Container in diesem Netzwerk starten, an den ping_sender-Container anhängen und von dort aus den anderen Container ping_receiver pingen.

Hinweis: In diesem Beispiel wird das offizielle CentOS 7-Image centos verwendet, das Sie mit folgendem Befehl von der Docker-Website herunterladen können:

sudo docker pull centos

Wenn Sie es vorziehen, Ubuntu zu verwenden, ersetzen Sie stattdessen einfach ein Ubuntu-Image.

Erstellen Sie zunächst ein Bridge-Netzwerk namens ping_test_network mit dem Befehl:

sudo docker network create -d bridge ping_test_network

Wenn Sie Ubuntu bevorzugen, verwenden Sie einfach ein Ubuntu-Image und starten Sie dann einen Container mit dem Namen ping_receiver und hängen Sie diesen mit folgendem Befehl an das Bridge-Netzwerk ping_test_network an:

Erstellen Sie zunächst ein Bridge-Netzwerk namens ping_test_network mit dem Befehl:

sudo docker run -it --net=ping_test_network  --name ping_receiver centos /bin/bash

Verwenden Sie STRG-p STRG-q, um den ping_receiver-Container zu verlassen.

Inspizieren Sie das ping_test_network mit folgendem Befehl, um die IP-Adresse des ping_receiver-Containers zu erhalten:

sudo docker network inspect ping_test_network

Notieren Sie sich die IP-Adresse des Containers.

Networking with Docker 5: Get the IP address

In diesem Fall lautet die IP-Adresse 172.19.0.2.

Starten Sie einen Container namens ping_sender und hängen Sie ihn mit folgendem Befehl an das ping_test_network Bridge-Netzwerk an:

sudo docker run -it --net=ping_test_network  --name ping_sender centos bin/bash

Sobald Sie mit dem Container verbunden sind und eine Eingabeaufforderung erscheint, rufen Sie den anderen Container mit folgendem Befehl auf:

ping [IP address of ping_receiver]

In diesem Fall werden wir die IP-Adresse 172.19.0.0.2 pingen. Die Ergebnisse eines erfolgreichen Pings werden in etwa so aussehen:

Networking with Docker 4

Verlassen Sie Ping mit STRG-c und verwenden Sie dann STRG-p STRG-q, um den Container zu verlassen.