Verwenden Sie den Docker Network Host-Befehl

David Mbochi Njonge 20 Juni 2023
  1. Erstellen Sie ein Nginx-Projekt
  2. Führen Sie einen Container im Standardnetzwerktreiber aus
  3. Führen Sie einen Container im Hostnetzwerk aus
  4. Abschluss
Verwenden Sie den Docker Network Host-Befehl

Docker-Container funktionieren, indem sie Netzwerktreiber nutzen, die während der Installation von Docker erstellt wurden. Zu den uns zur Verfügung stehenden Standardtreibern gehören die Netzwerke bridge und host.

Wenn wir Container erstellen, ohne das Netzwerk anzugeben, werden sie dem bridge-Netzwerk hinzugefügt, und wenn wir einen network-Befehl zum host-Netzwerk oder einem benutzerdefinierten Netzwerk hinzufügen möchten, verwenden wir den --network-Befehl .

In diesem Tutorial lernen wir, wie man mit dem Befehl --network einen Container zum Netzwerk host hinzufügt. Wir werden auch lernen, wie Container zum Standardnetzwerk hinzugefügt werden, wenn wir mit diesem Befehl kein Netzwerk angeben.

Erstellen Sie ein Nginx-Projekt

Öffnen Sie WebStorm IDEA und wählen Sie Datei > Neu > Projekt. Wählen Sie im sich öffnenden Fenster Empty Project und ändern Sie den Projektnamen von untitled in docker-network-host oder verwenden Sie einen beliebigen Namen.

Drücken Sie abschließend die Schaltfläche Erstellen, um das Projekt zu generieren.

Erstellen Sie im aktuellen Ordner eine Datei namens index.html und kopieren Sie den folgenden Code und fügen Sie ihn in die Datei ein.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>Welcome to docker networking !</h1>
</body>
</html>

In dieser Datei haben wir eine einfache Webseite erstellt, die eine Überschrift anzeigt, wenn wir auf die Anwendung zugreifen, die in unserem Container ausgeführt wird. Dies hilft zu überprüfen, ob unser Container die Anwendung Nginx ausführt.

Definiere ein Bild

Erstellen Sie eine Datei namens Dockerfile und kopieren Sie die folgende Anleitung und fügen Sie sie in die Datei ein. Beachten Sie, dass wir normalerweise eine Datei mit diesem Namen verwenden, um unser benutzerdefiniertes Bild aus vorhandenen Bildern zu erstellen.

FROM nginx:alpine
ADD . /usr/share/nginx/html
  1. VON – Legt das Basisbild fest, auf dem unser benutzerdefiniertes Bild mithilfe der nachfolgenden Anweisungen erstellt werden soll.
  2. HINZUFÜGEN – Kopiert die Dateien und Ordner im aktuellen Ordner in das Bilddateisystemziel /usr/share/nginx/html.

Erstellen Sie ein Bild

Um unser benutzerdefiniertes Image mit dem oben definierten Dockerfile zu erstellen. Öffnen Sie ein neues Terminalfenster mit der Tastenkombination ALT+F12 und verwenden Sie diesen Befehl, um das Image zu erstellen.

~/WebstormProjects/docker-network-host$ docker build --tag docker-network-host:latest .

Dieser Befehl führt die Dockerfile nacheinander aus, um ein Image mit dem Tag zu erstellen, und wir können jede der ausgeführten Anweisungen im Terminalfenster anzeigen, wie unten gezeigt.

=> [1/2] FROM docker.io/library/nginx:alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23c37408642bf5d               0.1s
 => => resolve docker.io/library/nginx:alpine@sha256:082f8c10bd47b6acc8ef15ae61ae45dd8fde0e9f389a8b5cb23c37408642bf5d               0.1s
 => CACHED [2/2] ADD . /usr/share/nginx/html

Führen Sie einen Container im Standardnetzwerktreiber aus

Um einen Container unserer Anwendung im Standardnetzwerk auszuführen, führen Sie den folgenden Befehl im Terminalfenster aus. Beachten Sie, dass dieser Container dem bridge-Netzwerk hinzugefügt wird.

~/WebstormProjects/docker-network-host$ docker run --name docker-network-bridge-test -d -p 8000:80 docker-network-host:latest

Dieser Befehl führt einen Container namens docker-network-bridge-test aus, der auf Port 80 im Container lauscht und Port 8000 auf dem Host verfügbar macht. Um zu überprüfen, ob dieser Container zum bridge-Netzwerk hinzugefügt wurde, führen Sie den folgenden Befehl aus, um das bridge-Netzwerk zu untersuchen.

~/WebstormProjects/docker-network-host$ docker network inspect bridge

Ausgang:

[
    {
        "Name": "bridge",
        "Id": "45773c7633cf28baa742ceca9c054a8dd6b4ea609dd9944d7ae12bdb57e86bcd",
        "Created": "2022-10-06T07:53:45.935633743Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "5e452da9b047ce94ff23b4841d1cb3358f34b037ef566c2f12a9eb57012a5f85": {
                "Name": "docker-network-bridge-test",
                "EndpointID": "d3491eb0c518d91be71b170e8ca0a077e07781bffbe20f3e1a1fd415eef9c288",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

Auf dem zurückgegebenen JSON hat die Eigenschaft Containers einen Container namens docker-network-bridge-test und ihm sind eine MacAddress und eine IPv4Address zugewiesen. Dies ist derselbe Container, der zu Beginn dieses Abschnitts erstellt wurde.

Um diese Anwendung im Browser bereitzustellen, senden Sie eine Anfrage an localhost:8000 (http://localhost:8000/) und stellen Sie sicher, dass sie eine Überschrift zurückgibt, die den Text Welcome to docker networking ! enthält.

Führen Sie einen Container im Hostnetzwerk aus

Der Begriff Hostnetzwerk bedeutet, dass der Container im Netzwerk unseres Hostcomputers ausgeführt wird, da das Hostnetzwerk das Containernetzwerk nicht containerisieren kann. Um den Container im Hostnetzwerk auszuführen, führen Sie den folgenden Befehl im Terminalfenster aus.

~/WebstormProjects/docker-network-host$ docker run --rm -d --network host --name docker-network-host-test docker-network-host:latest

Dieser Befehl verwendet den Befehl --network mit dem Wert host, um einen Container namens docker-network-host-test im Host-Netzwerk auszuführen. Um zu überprüfen, ob dieser Container zum Hostnetzwerk hinzugefügt wurde, führen Sie den folgenden Befehl im Terminalfenster aus.

~/WebstormProjects/docker-network-host$ docker network inspect host

Ausgang:

[
    {
        "Name": "host",
        "Id": "4ce9d3806cd88f9d9ea446272f4338f7b1f5e7098d4d0bc2a11090c1759d1880",
        "Created": "2022-09-19T07:51:50.247290701Z",
        "Scope": "local",
        "Driver": "host",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": []
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "22d15c7eee861ec7fdfd22936c30dfe1d17b2dde52ada93256f3e30943a3ed80": {
                "Name": "docker-network-host-test",
                "EndpointID": "7bd01907c8b86a881b86ae9e9c8ad8c1d3aa9f0583adebb7d41ae15bd565fabe",
                "MacAddress": "",
                "IPv4Address": "",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

Auf dem zurückgegebenen JSON hat die Eigenschaft Containers einen Container namens docker-network-host-test und beachten Sie, dass dem Container in diesem Fall keine MacAddress oder IPv4Adress zugewiesen wurde, da er ausgeführt wird das Host-Netzwerk. Dies ist derselbe Container, der zu Beginn dieses Abschnitts erstellt wurde.

Um diese Anwendung im Browser bereitzustellen, senden Sie eine Anfrage an localhost:80 (http://localhost:80/) und stellen Sie sicher, dass eine Überschrift mit dem Text Willkommen beim Docker-Netzwerk! zurückgegeben wird. Stellen Sie jedoch sicher, dass Port 80 im Host-Netzwerk offen ist, um Anfragen anzunehmen.

Abschluss

In diesem Tutorial haben wir gelernt, wie Container sowohl auf dem Standardnetzwerktreiber bridge als auch auf dem Netzwerktreiber host ausgeführt werden. Beachten Sie, dass wir den Befehl --network verwenden, um einen Container in einem anderen Netzwerk als dem Standardnetzwerk hinzuzufügen.

Um sicherzustellen, dass Ihre Anwendung im neuen Netzwerk funktioniert, stellen Sie sicher, dass der verwendete Port für Verbindungen geöffnet ist und dass kein anderer Prozess den Port verwendet.

David Mbochi Njonge avatar David Mbochi Njonge avatar

David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.

LinkedIn GitHub