Docker容器間通信的三種方式分別是什么,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
創(chuàng)新互聯(lián)建站是一家企業(yè)級云計(jì)算解決方案提供商,超15年IDC數(shù)據(jù)中心運(yùn)營經(jīng)驗(yàn)。主營GPU顯卡服務(wù)器,站群服務(wù)器,四川服務(wù)器托管,海外高防服務(wù)器,機(jī)柜大帶寬租用·托管,動(dòng)態(tài)撥號VPS,海外云手機(jī),海外云服務(wù)器,海外服務(wù)器租用托管等。
容器之間可通過 IP,Docker DNS Server 或 joined 容器三種方式通信。
兩個(gè)容器要能通信,必須要有屬于同一個(gè)網(wǎng)絡(luò)的網(wǎng)卡。
滿足這個(gè)條件后,容器就可以通過 IP 交互了。具體做法是在容器創(chuàng)建時(shí)通過 --network
指定相應(yīng)的網(wǎng)絡(luò),或者通過 docker network connect
將現(xiàn)有容器加入到指定網(wǎng)絡(luò)。
通過 IP 訪問容器雖然滿足了通信的需求,但還是不夠靈活。因?yàn)槲覀冊诓渴饝?yīng)用之前可能無法確定 IP,部署之后再指定要訪問的 IP 會比較麻煩。對于這個(gè)問題,可以通過 docker 自帶的 DNS 服務(wù)解決。
從 Docker 1.10 版本開始,docker daemon 實(shí)現(xiàn)了一個(gè)內(nèi)嵌的 DNS server,使容器可以直接通過“容器名”通信。方法很簡單,只要在啟動(dòng)時(shí)用 --name
為容器命名就可以了。
下面啟動(dòng)兩個(gè)容器 bbox1 和 bbox2:
docker run -it --network=my_net2 --name=bbox1 busybox
docker run -it --network=my_net2 --name=bbox2 busybox
然后,bbox2 就可以直接 ping 到 bbox1 了
使用 docker DNS 有個(gè)限制:只能在 user-defined 網(wǎng)絡(luò)中使用。也就是說,默認(rèn)的 bridge 網(wǎng)絡(luò)是無法使用 DNS 的。下面驗(yàn)證一下:
創(chuàng)建 bbox3 和 bbox4,均連接到 bridge 網(wǎng)絡(luò)。
docker run -it --name=bbox3 busybox
docker run -it --name=bbox4 busybox
bbox4 無法 ping 到 bbox3。
joined 容器是另一種實(shí)現(xiàn)容器間通信的方式。
joined 容器非常特別,它可以使兩個(gè)或多個(gè)容器共享一個(gè)網(wǎng)絡(luò)棧,共享網(wǎng)卡和配置信息,joined 容器之間可以通過 127.0.0.1 直接通信。請看下面的例子:
先創(chuàng)建一個(gè) httpd 容器,名字為 web1。
docker run -d -it --name=web1 httpd
然后創(chuàng)建 busybox 容器并通過 --network=container:web1
指定 jointed 容器為 web1
請注意 busybox 容器中的網(wǎng)絡(luò)配置信息,下面我們查看一下 web1 的網(wǎng)絡(luò)
看!busybox 和 web1 的網(wǎng)卡 mac 地址與 IP 完全一樣,它們共享了相同的網(wǎng)絡(luò)棧。busybox 可以直接用 127.0.0.1 訪問 web1 的 http 服務(wù)。
joined 容器非常適合以下場景:
不同容器中的程序希望通過 loopback 高效快速地通信,比如 web server 與 app server。
希望監(jiān)控其他容器的網(wǎng)絡(luò)流量,比如運(yùn)行在獨(dú)立容器中的網(wǎng)絡(luò)監(jiān)控程序。
關(guān)于Docker容器間通信的三種方式分別是什么問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。