English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Zuvor haben wir die Möglichkeit implementiert, auf Dienste zuzugreifen, die in Docker-Containern ausgeführt werden, über Netzwerkports.
Einige Netzwerkdienste können im Container ausgeführt werden, um diese Anwendungen extern zugänglich zu machen, kann dies durch -P oder -den p-Parameter verwenden, um das Port-Mapping zu spezifizieren.
Nun werden wir zeigen, wie man über einen Port auf einen Docker-Container zugreift.
Wir haben einen Container für eine Python-Anwendung erstellt.
w3codebox@w3codebox:~$ docker run -d -P training/webapp python app.py fce072cc88cee71b1cdceb57c2821d054a4a59f67da6b416fceb5593f059fc6d
Außerdem können wir die Netzwerkadresse der Containerbindung angeben, z.B. binden 127.0.0.1。
Verwenden wir -P Parameter verwenden, um einen Container zu erstellen docker ps Man kann sehen, dass der Containerport 5000 Hostport binden 32768。
w3codebox@w3codebox:~$ docker ps CONTAINER ID IMAGE COMMAND ... PORTS NAMES fce072cc88ce training/webapp "python app.py" ... 0.0.0.0:32768->5000/tcp grave_hopper
können wir auch verwenden -p durch ein Symbol zu kennzeichnen, um die Portbindung des Containers an den Hostport zu spezifizieren.
Der Unterschied zwischen den beiden Methoden ist:
-P :ist der interne Port des ContainersZufälligauf den höheren Hostport gemappt.
-p : ist die interne Portbindung des ContainersBestimmenan die Hostport.
w3codebox@w3codebox:~$ docker run -d -p 5000:5000 training/webapp python app.py 33e4523d30aaf0258915c368e66e03b49535de0ef20317d3f639d40222ba6bc0
w3codebox@w3codebox:~$ docker ps CONTAINER ID IMAGE COMMAND ... PORTS NAMES 33e4523d30aa training/webapp "python app.py" ... 0.0.0.0:5000->5000/tcp berserk_bartik fce072cc88ce training/webapp "python app.py" ... 0.0.0.0:32768->5000/tcp grave_hopper
Außerdem können wir die Netzwerkadresse der Containerbindung angeben, z.B. binden 127.0.0.1。
w3codebox@w3codebox:~$ docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py 95c6ceef88ca3e71eaf303c2833fd6701d8d1b2572b5613b5a932dfdfe8a857c w3codebox@w3codebox:~$ docker ps CONTAINER ID IMAGE COMMAND ... PORTS NAMES 95c6ceef88ca training/webapp "python app.py" ... 5000/tcp, 127.0.0.1:5001->5000/tcp adoring_stonebraker 33e4523d30aa training/webapp "python app.py" ... 0.0.0.0:5000->5000/tcp berserk_bartik fce072cc88ce training/webapp "python app.py" ... 0.0.0.0:32768->5000/tcp grave_hopper
So können wir durch den Zugriff auf 127.0.0.1:5001 um auf den Container zuzugreifen 5000-Port.
Im obigen Beispiel sind alle Standardwerte auf die Bindung von TCP-Ports eingestellt, wenn Sie eine UDP-Portbindung festlegen möchten, können Sie nach dem Port eine Komma hinzufügen /udp。
w3codebox@w3codebox:~$ docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py 6779686f06f6204579c1d655dd8b2b31e8e809b245a97b2d3a8e35abe9dcd22a w3codebox@w3codebox:~$ docker ps CONTAINER ID IMAGE COMMAND ... PORTS NAMES 6779686f06f6 training/webapp "python app.py" ... 5000/tcp, 127.0.0.1:5000->5000/udp drunk_visvesvaraya 95c6ceef88ca training/webapp "python app.py" ... 5000/tcp, 127.0.0.1:5001->5000/tcp adoring_stonebraker 33e4523d30aa training/webapp "python app.py" ... 0.0.0.0:5000->5000/tcp berserk_bartik fce072cc88ce training/webapp "python app.py" ... 0.0.0.0:32768->5000/tcp grave_hopper
docker port Befehl ermöglicht es uns, die Bindung der Ports schnell anzuzeigen.
w3codebox@w3codebox:~$ docker port adoring_stonebraker 5000 127.0.0.1:5001
Portmappings sind nicht der einzige Weg, um Docker mit einem anderen Container zu verbinden.
docker hat ein Verbindungs-System, das es ermöglicht, mehrere Container miteinander zu verbinden und gemeinsame Verbindungsinformationen zu teilen.
docker Verbindungen erstellen, die eine Eltern-Kind-Beziehung darstellen, bei der der Elterncontainer Informationen des Kindcontainers sehen kann.
Wenn wir einen Container erstellen, benennt Docker ihn automatisch. Darüber hinaus können wir auch --name Kennung, um den Container zu benennen, z.B.:
w3codebox@w3codebox:~$ docker run -d -P --name w3codebox training/webapp python app.py 43780a6eabaaf14e590b6e849235c75f3012995403f97749775e38436db9a441
Wir können docker ps Befehl, um den Namen des Containers anzuzeigen.
w3codebox@w3codebox:~$ docker ps -l CONTAINER ID IMAGE COMMAND … PORTS NAMES 43780a6eabaa training/webapp "python app.py" ... 0.0.0.0:32769->5000/tcp w3codebox
Erstellen Sie zunächst ein neues Docker-Netzwerk.
$ docker network create -d bridge test-net
search=test.com ubuntu
-d:Parameter, um den Docker-Netzwerktyp zu spezifizieren, gibt es bridge, overlay.
Dabei wird der Netzwerktyp overlay für Swarm mode verwendet, den Sie in diesem Abschnitt ignorieren können.
Führen Sie einen neuen Container aus und verbinden Sie ihn mit dem neu erstellten test-net Netzwerk:
$ docker run -itd --name test1 --network test-net ubuntu /bin/bash
Öffnen Sie einen neuen Terminal und führen Sie einen neuen Container aus und fügen Sie ihn zu test hinzu-net Netzwerk:
$ docker run -itd --name test2 --network test-net ubuntu /bin/bash
Klicken Sie auf das Bild, um eine größere Ansicht zu sehen:
Um zu beweisen, dass test1 Container und test2 Die Container haben eine Verbindung hergestellt.
Wenn test1、test2 Wenn im Container keine ping-Befehl vorhanden ist, führen Sie folgende Befehle im Container aus, um ping zu installieren (Anwendungsszenario: Sie können ping in einem Container installieren, das Image des Containers submitten und mit dem neuen Image die beiden Container neu starten).
apt-get update apt install iputils-ping
In test1 Geben Sie den folgenden Befehl im Container ein:
Klicken Sie auf das Bild, um eine größere Ansicht zu sehen:
Gleiches gilt für den Container test2 Der Container wird erfolgreich verbunden mit:
Klicken Sie auf das Bild, um eine größere Ansicht zu sehen:
So wird test1 Container und test2 Die Container haben eine Verbindung hergestellt.
Wenn Sie mehrere Container benötigen, die miteinander verbunden sind, wird empfohlen, Docker Compose zu verwenden, was später erläutert wird.
Wir können die DNS-Konfiguration auf dem Hostsystem /etc/docker/Fügen Sie den folgenden Inhalt zum Datei "daemon.json" hinzu, um die DNS für alle Container zu konfigurieren:
{ "dns" : [ "114dns=114dns=114dns=114", "8dns=8dns=8dns=8" ] }
Nach der Konfiguration wird die DNS-Konfiguration des Containers automatisch konfiguriert als 114dns=114dns=114dns=114 und 8dns=8dns=8dns=8。
Nach der Konfiguration muss Docker neu gestartet werden, damit die Änderungen wirksam werden.
Um zu überprüfen, ob die DNS-Konfiguration des Containers erfolgreich ist, können Sie den folgenden Befehl verwenden, der die DNS-Informationen des Containers ausgibt:
$ docker run -$ docker run --rm ubuntu cat etc/resolv.conf
Klicken Sie auf das Bild, um eine größere Ansicht zu sehen:
Manuelle Konfiguration des Containers
Wenn Sie nur die DNS in einem bestimmten Container konfigurieren möchten, können Sie den folgenden Befehl verwenden:
$ docker run -$ docker run --Parameterbeschreibung: -it --h host_ubuntu114dns=114dns=114dns=114 --dns-.
search=test.com ubuntu
--Parameterbeschreibung:rm
-: Reinigen Sie den Dateisystem des Containers automatisch, wenn der Container beendet wird --h HOSTNAME oderhostname=HOSTNAME /etc/: Definieren Sie den Hostnamen des Containers, der in den Container geschrieben wird /etc/hostname und
--hosts.dns=IP_ADDRESS /etc/: Fügen Sie einen DNS-Server zum Container hinzu /etc/im hosts. In resolv.conf, lässt der Container diesen Server verwenden, um alle nicht
--dns-search=DOMAIN: Definieren Sie den Suchbereich des Containers. Wenn der Suchbereich auf .example.com gesetzt ist, wird bei der Suche nach einem Host namens host nicht nur host, sondern auch host.example.com durchsucht.
Klicken Sie auf das Bild, um eine größere Ansicht zu sehen:
Wenn keine Angabe während des Startens des Containers gemacht wird --dns und --dns-search,Docker verwendet standardmäßig den DNS des Host-Rechners /etc/resolv.conf, um die DNS-Konfiguration des Containers zu konfigurieren.