docker 容器間的通訊

需求:后臺(tái)服務(wù)因?yàn)闃I(yè)務(wù)或需求的原因处渣,多少會(huì)用到數(shù)據(jù)層如: mysql 或緩存層如: redis。而為了安全起見,又不想將底層數(shù)據(jù)服務(wù)暴露在主機(jī)上或公網(wǎng)上,docker 的 --link 恰好提供了這樣的服務(wù)

1漫蛔、docker 容器的網(wǎng)絡(luò)模式
  • 容器默認(rèn)有三種網(wǎng)絡(luò)模式
    • host: 容器在 run 的時(shí)候,指定 --net=host, 則該容器使用的網(wǎng)絡(luò)配置和宿主機(jī)是一樣的旧蛾,包括相同的 ip 以及共享端口莽龟,如果主機(jī)有公網(wǎng)可以訪問,則該容器同樣可以在公網(wǎng)訪問锨天。
    • bridge: 容器在 run 的時(shí)候毯盈,默認(rèn)的網(wǎng)絡(luò)配置,如果不指定 --net 參數(shù)病袄,則相當(dāng)于 --net=bridge搂赋,該容器使用 docker 默認(rèn)的網(wǎng)絡(luò)配置幽钢,相比宿主機(jī)會(huì)有獨(dú)立的 ip 和 port 使用样眠,但是此時(shí),該容器只會(huì)在內(nèi)網(wǎng)通過 ip 和 port 訪問雅镊,在公網(wǎng)是無法訪問左刽。
    • none: 容器沒有配置網(wǎng)絡(luò),容器外無法訪問酌媒,需要進(jìn)行網(wǎng)絡(luò)配置欠痴。
    • container:app: 容器使用 app 容器的網(wǎng)絡(luò)配置迄靠,和 app 使用相同的 ip 以及共享端口。
2喇辽、docker 的 link
  • docker run 的時(shí)候支持 --link db:aliasdb掌挚,通過 --link 連接名為 db 的容器,并將其別名設(shè)置為 aliasdb菩咨,此時(shí)即可以在新容器中使用 aliasdb 作為 db 容器的 ip吠式,對(duì) db 容器進(jìn)行訪問。
3抽米、常用通訊方式
  • 需求:
    • 程序 appC特占,需要連接數(shù)據(jù)庫 mysqlC 和 redisC 容器
  • 方式1、通過 --link
    • ① 啟動(dòng) mysql
      docker run -d --name=mysqlC mysql:latest
      注釋:后臺(tái)創(chuàng)建一個(gè) name 是 mysqlC 的容器云茸,這里的 --net 使用的是默認(rèn)模式是目,即 bridge”贽啵可以通過 docker inspect mysqlC 查看該容器的 ip懊纳,在宿主機(jī)上可以通過 ip 訪問該服務(wù)。
    • ② 啟動(dòng) redis
      docker run -d --name=redisC redis:latest
      注釋:同 mysqlC
    • ③ 啟動(dòng) app
      docker run -d --name=appC -p 8080:8080 --link=mysqlC:mysql --link=redisC:redis app:latest
      注釋:后臺(tái)創(chuàng)建一個(gè) name 是 appC 的容器亡容,這里也是使用 bridge 網(wǎng)絡(luò)配置嗤疯。bridge 的詳情可以通過 docker network inspect bridge 查看。特別注意的是闺兢,此處使用 -p 將 appC 程序的啟動(dòng)端口 8080 映射到了宿主機(jī)的 8080茂缚,也即是宿主機(jī)監(jiān)聽 8080 端口,并將收到的連接或請(qǐng)求報(bào)文進(jìn)行轉(zhuǎn)發(fā)列敲,這樣的話通過宿主機(jī)的 8080 端口也可以訪問到 appC 的 8080 端口阱佛,同時(shí)如果宿主機(jī)有公網(wǎng)可以訪問,那么 appC 容器的 8080 端口也可以被公網(wǎng)通過宿主機(jī)的 8080 端口進(jìn)行間接訪問戴而。
      使用 --link=mysqlC:mysql 時(shí)凑术,docker 會(huì)把容器 appC 對(duì) mysql 域名的訪問指向到 mysqlC 容器的 ip,最終相當(dāng)于更改了 appC 容器的 /etc/hosts 配置文件,實(shí)現(xiàn)了容器內(nèi)通訊所意。
    • ④ app 中配置
      app 中設(shè)置連接 mysql 的 host=mysql淮逊,redis 的 host=redis 端口為相應(yīng)的配置端口即可進(jìn)行訪問
  • 方式2、通過 --net=container:app
    • ① 啟動(dòng) app
      docker run -d --name=appC -p 8080:8080 app:latest
    • ② 啟動(dòng) redis
      docker run -d --name=redisC --net=container:appC redis:latest
    • ③ 啟動(dòng) mysql
      docker run -d --name=mysqlC --net=container:appC mysql:latest
    • ④ app 中配置
      app 中設(shè)置連接 mysql 和 redis 的 host=127.0.0.1扶踊,端口為響應(yīng)配置的端口即可訪問
  • 方式3泄鹏、通過 --publish
    • 此處不再詳述,方案是將 mysqlC 和 redisC 容器都通過 -p 將服務(wù)的端口映射到宿主機(jī)上的端口秧耗。此處容器間的通訊安全性比較差备籽,而且公網(wǎng)也可以訪問,不推薦。
  • 方式4车猬、通過 --net=host
    • 此方法相當(dāng)于所有的服務(wù)均使用宿主局的 ip 和 共享端口霉猛,安全性較差。不推薦珠闰。
  • 建議使用第一種惜浅,因?yàn)橛行?yīng)用在項(xiàng)目啟動(dòng)時(shí)就會(huì)讀取 mysql 中數(shù)據(jù)做緩存,所以 mysql 可能需要優(yōu)先配置
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伏嗜,一起剝皮案震驚了整個(gè)濱河市坛悉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌承绸,老刑警劉巖裸影,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異八酒,居然都是意外死亡空民,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門羞迷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來界轩,“玉大人,你說我怎么就攤上這事衔瓮∽腔” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵热鞍,是天一觀的道長(zhǎng)葫慎。 經(jīng)常有香客問我,道長(zhǎng)薇宠,這世上最難降的妖魔是什么偷办? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮澄港,結(jié)果婚禮上椒涯,老公的妹妹穿的比我還像新娘。我一直安慰自己回梧,他們只是感情好废岂,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著狱意,像睡著了一般湖苞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上详囤,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天财骨,我揣著相機(jī)與錄音,去河邊找鬼。 笑死隆箩,一個(gè)胖子當(dāng)著我的面吹牛滑肉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播摘仅,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼问畅!你這毒婦竟也來了娃属?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤护姆,失蹤者是張志新(化名)和其女友劉穎矾端,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卵皂,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秩铆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了灯变。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片殴玛。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖添祸,靈堂內(nèi)的尸體忽然破棺而出滚粟,到底是詐尸還是另有隱情,我是刑警寧澤刃泌,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布凡壤,位于F島的核電站,受9級(jí)特大地震影響耙替,放射性物質(zhì)發(fā)生泄漏亚侠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一俗扇、第九天 我趴在偏房一處隱蔽的房頂上張望硝烂。 院中可真熱鬧,春花似錦狐援、人聲如沸钢坦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爹凹。三九已至,卻和暖如春镶殷,著一層夾襖步出監(jiān)牢的瞬間禾酱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颤陶,地道東北人颗管。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像滓走,于是被迫代替她去往敵國(guó)和親垦江。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容