Verwenden Sie den Docker Network Host-Befehl
-
Erstellen Sie ein
Nginx
-Projekt - Führen Sie einen Container im Standardnetzwerktreiber aus
- Führen Sie einen Container im Hostnetzwerk aus
- Abschluss
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
VON
– Legt das Basisbild fest, auf dem unser benutzerdefiniertes Bild mithilfe der nachfolgenden Anweisungen erstellt werden soll.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 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