English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

DockerContainerVerbindung

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.

Netzwerkport-Mapping

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

Docker Container-Interkonnektion

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.

Containerbenennung

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

Neues Netzwerk

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.

Verbinden Sie den Container

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.

DNS-Konfiguration

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.