Tento příspěvek ukazuje tři způsoby propojení kontejnerů Docker.
Odhalit porty a vazbu portů
Odhalit porty
Tato metoda se používá v rámci stejné sítě nebo hostitele dockeru. Kontejnery ve stejné síti spolu mohou hovořit přes své odkryté porty a porty můžete odhalit jednou z níže uvedených metod.
– Vložte EXPOSE 80 (nebo libovolný port, který chcete) do svého Dockerfile, který Dockeru sdělí, že službu vašeho kontejneru lze připojit na port 80.
– Vystavte port pomocí „–expose [číslo portu]“ z docker kontejner pomocí 'run –expose [číslo portu]':
# docker run --expose=[port number] test
Vazba portu
Tato metoda se používá mimo stejnou síť. Chcete-li povolit komunikaci přes definované porty s kontejnery mimo stejnou síť, musíte porty publikovat pomocí parametru -p při spuštění dockeru pro publikování a mapování jednoho nebo více portů nebo pomocí parametru -P pro publikování všech vystavených portů a mapování. do portů vyššího řádu. Port portování můžete provést jedním z níže uvedených způsobů:
-Vystavit port prostřednictvím Dockerfile pomocí –expose a publikujte jej pomocí -P vlajka. Připojí vystavený port k hostiteli Docker na náhodném portu.
-Vystavení portu prostřednictvím Dockerfile pomocí –expose a publikujte jej pomocí -p 21:21 příznak, toto sváže port vystavení k hostiteli Docker na určitém portu 21 s hostem 21.
– Svažte port příkazem spuštění kontejneru docker:
# 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
Příklad:
# docker run -p 80:80/tcp -p 500:500/udp test
Unixový doménový soket v rámci jednoho hostitele
Chcete-li komunikovat mezi kontejnery v rámci jednoho hostitele, můžete v Linuxu použít mechanismy IPC pomocí stejného soketu. Spusťte dva dockery z hostitele dockeru, který sdílí svazek, který by měl být vytvořen v hostitelském počítači:
# 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
Po výše uvedeném příkazu mohou kontejnery dvc1 a dvc2 používat zásuvky jako /var/tmp/SocketX k propojení.
K nastavení propojení mezi kontejnery použijte mechanismus propojení Docker
Docker může vytvořit tunel mezi dvěma kontejnery pomocí proměnných prostředí k předání informací z nadřazeného kontejneru do podřízeného kontejneru. Chcete-li vytvořit odkaz, použijte –odkaz příznak:
# docker run -itd --name=[child container] --link [parent container] [child container image] /bin/bash
Příklad:
-Zkontrolujte síť nadřazeného kontejneru:
# 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)
-Propojit dva nové kontejnery s nadřazeným kontejnerem:
# docker run -it --name dvc1_dup1 --rm --link dvc1 j_web:v1 /bin/bash
-Zkontrolujte propojený kontejner:
# docker inspect -f "{{ .HostConfig.Links }}" dvc1_dup1 [/dvc1:/dvc1_dup1/dvc1]
-Zkontrolujte hostitelský soubor nového kontejneru, obsahuje informace o nadřazeném kontejneru:
# 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 /]#Upozornění :Příznak –link je starší funkcí Dockeru. Nakonec může být odstraněn. Pokud jej nezbytně nepotřebujete nadále používat, doporučujeme namísto použití –link použít uživatelem definované sítě pro usnadnění komunikace mezi dvěma kontejnery. Jednou funkcí, kterou uživatelsky definované sítě nepodporují a kterou můžete provést pomocí –link, je sdílení proměnných prostředí mezi kontejnery. Můžete však použít jiné mechanismy, jako jsou svazky, ke sdílení proměnných prostředí mezi kontejnery lépe kontrolovaným způsobem.