Dieser Beitrag zeigt drei Methoden zum Verknüpfen von Docker-Containern.
Ports und Portbindung offen legen
Ports verfügbar machen
Diese Methode wird innerhalb desselben Netzwerks oder des Docker-Hosts verwendet. Container im selben Netzwerk können über ihre offengelegten Ports miteinander kommunizieren, und Sie können die Ports mit einer der folgenden Methoden offenlegen.
– Fügen Sie EXPOSE 80 (oder einen beliebigen Port) in Ihre Docker-Datei ein, die Docker mitteilt, dass der Dienst Ihres Containers mit Port 80 verbunden werden kann Docker-Container durch 'run –expose [port number]':
# docker run --expose=[port number] test
Portbindung
Diese Methode wird außerhalb desselben Netzwerks verwendet. Um die Kommunikation über die definierten Ports mit Containern außerhalb desselben Netzwerks zu ermöglichen, müssen Sie die Ports veröffentlichen, indem Sie beim Docker-Lauf das Flag -p verwenden, um einen oder mehrere Ports zu veröffentlichen und zuzuordnen, oder das Flag -P, um alle exponierten Ports und die Zuordnung zu veröffentlichen sie zu höherwertigen Häfen. Sie können die Portierung auf eine der folgenden Arten durchführen:
-Stellen Sie einen Port über Dockerfile durch –expose bereit und mit dem -P veröffentlichen Flagge. Es bindet den exponierten Port an den Docker-Host an einem zufälligen Port.
-Stellen Sie einen Port über Dockerfile durch –expose bereit und veröffentlichen Sie es mit dem -p 21:21 Flag, dies bindet den Expose-Port an den Docker-Host auf bestimmten Port 21 mit Gast 21.
– Binden Sie den Port mit dem Docker-Container-Ausführungsbefehl:
# docker run -p [port number on docker host]:[port number on container]/tcp -p [port number on docker host]:[port number on container]/udp test
Beispiel:
# docker run -p 80:80/tcp -p 500:500/udp test
Unix-Domain-Socket innerhalb eines einzelnen Hosts
Um zwischen Containern innerhalb eines einzelnen Hosts zu kommunizieren, können Sie unter Linux IPC-Mechanismen verwenden, die denselben Socket verwenden. Starten Sie die beiden Docker vom Docker-Host, der ein Volume gemeinsam nutzt, das auf dem Host-Computer erstellt werden soll:
# docker run -d -it --name dvc1 -v /var/tmp:/host oraclelinux:7 /bin/bash # docker run -d -it --name dvc2 -v /var/tmp:/host oraclelinux:7 /bin/bash
Nach dem obigen Befehl können Container dvc1 und dvc2 Sockets als /var/tmp/SocketX verwenden zur Zusammenschaltung.
Verwenden Sie den Docker-Link-Mechanismus, um einen Link zwischen Containern einzurichten
Docker kann einen Tunnel zwischen zwei Containern erstellen, indem es Umgebungsvariablen verwendet, um Informationen vom übergeordneten Container an den untergeordneten Container zu übergeben. Um einen Link zu erstellen, verwenden Sie den –link Flagge:
# docker run -itd --name=[child container] --link [parent container] [child container image] /bin/bash
Beispiel:
-Überprüfen Sie das Netzwerk des übergeordneten Containers:
# docker ps|grep dvc 7d5ad19de678 j_web:v1 "/bin/sh -c '/usr/bi…" 2 days ago Up 5 hours dvc1
# docker exec -it dvc1 /bin/bash # ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:04 inet addr:172.17.0.4 Bcast:172.17.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
-Verknüpfen Sie die beiden neuen Container mit dem übergeordneten Container:
# docker run -it --name dvc1_dup1 --rm --link dvc1 j_web:v1 /bin/bash
-Überprüfen Sie den verknüpften Container:
# docker inspect -f "{{ .HostConfig.Links }}" dvc1_dup1 [/dvc1:/dvc1_dup1/dvc1]
-Überprüfen Sie die Hostdatei des neuen Containers, sie enthält die Informationen des übergeordneten Containers:
# docker exec -it dvc1_dup1 /bin/bash
[root@b56d465976bc /]# cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.4 dvc1 7d5ad19de678 172.17.0.5 b56d465976bc [root@b56d465976bc /]#Warnung :Das Flag –link ist eine Legacy-Funktion von Docker. Es kann schließlich entfernt werden. Sofern Sie es nicht unbedingt weiter verwenden müssen, empfehlen wir Ihnen, benutzerdefinierte Netzwerke zu verwenden, um die Kommunikation zwischen zwei Containern zu erleichtern, anstatt –link zu verwenden. Eine Funktion, die von benutzerdefinierten Netzwerken nicht unterstützt wird und die Sie mit –link tun können, ist die gemeinsame Nutzung von Umgebungsvariablen zwischen Containern. Sie können jedoch andere Mechanismen wie Volumes verwenden, um Umgebungsvariablen kontrollierter zwischen Containern auszutauschen.