Docker高級篇-網(wǎng)絡(luò)驅(qū)動

通信場景

本章我們繼續(xù)講解docker網(wǎng)絡(luò)驅(qū)動脱盲,在學(xué)習(xí)docker網(wǎng)絡(luò)驅(qū)動之前我們先思考下面幾個docker容器之間常見的通信場景:

1炕置、同一dockerd守護進程內(nèi)容器和容器之間如何通信

2硫戈、同一dockerd守護進程容器和主機其它服務(wù)進程之間如何通信

3、不同dockerd守護進程容器和容器之間如何通信

4、不同dockerd守護進程容器之間如何通信

回顧我們前面章節(jié)的myhelloworld例子,myhelloworld可以正常通過容器名稱訪問到myredis卿啡,這正是docker網(wǎng)絡(luò)驅(qū)動發(fā)揮的作用。在講解compose章節(jié)時我們似乎并沒有手動配置過網(wǎng)絡(luò)菱父,而是compose幫我們配置好了颈娜。本章著重講解網(wǎng)絡(luò)驅(qū)動,接下來我們自己手動來管理和配置網(wǎng)絡(luò)驅(qū)動浙宜。


網(wǎng)絡(luò)模式

docker可以通過創(chuàng)建虛擬網(wǎng)卡官辽,通過虛擬網(wǎng)卡轉(zhuǎn)發(fā)到宿主機網(wǎng)卡和外部進行通信。除此之外粟瞬,也可以不創(chuàng)建自己的虛擬網(wǎng)卡而是直接和宿主機共用網(wǎng)卡直接占用宿主機IP和端口的方式和外部進行通信同仆。docker網(wǎng)絡(luò)驅(qū)動是可插拔的默認(rèn)情況下存在以下幾種網(wǎng)絡(luò)模式:

1亩钟、橋接網(wǎng)絡(luò)模式(bridge:這是docker默認(rèn)的網(wǎng)絡(luò)驅(qū)動程序乓梨,如果在創(chuàng)建驅(qū)動程序時未指定驅(qū)動程序類型,默認(rèn)便是bridge模式清酥。當(dāng)你的應(yīng)用程序是在同一個主機部署獨立容器時,推薦使用橋接網(wǎng)絡(luò)模式蕴侣。連接到同一橋接網(wǎng)絡(luò)的容器可以互相通信焰轻,對不同橋接網(wǎng)絡(luò)的容器則無法直接相互通信。

2昆雀、覆蓋網(wǎng)絡(luò)模式(overlay:覆蓋網(wǎng)絡(luò)模式可以將不同的Dockerd守護進程連接在一起辱志,該網(wǎng)絡(luò)模式支持集群容器之間相互通信,以及集群和某個單機版獨立容器直接相互通信狞膘,或不同Dockerd守護進程的獨立容器之間進行通信揩懒。該網(wǎng)絡(luò)模式使用場景比較廣泛,通常集群部署時會使用該模式挽封。

3已球、主機網(wǎng)絡(luò)模式(host:如果某個容器需要訪問主機的某個服務(wù),那么需要配置主機網(wǎng)絡(luò)模式,該模式直接占用主機的網(wǎng)絡(luò)端口和網(wǎng)卡資源智亮。也就是說docker網(wǎng)絡(luò)并非隔離而是直接和宿主機共享資源忆某,就好像應(yīng)用是直接在宿主機上運行一樣。但是其它(例如存儲阔蛉,進程命名空間和用戶命名空間)相對宿主機隔離的弃舒。該模式僅適用于Docker 17.06及更高版本的swarm服務(wù)

4状原、MAC網(wǎng)絡(luò)模式(macvlan):Macvlan網(wǎng)絡(luò)允許您為容器分配MAC地址聋呢,使其顯示為網(wǎng)絡(luò)上的物理設(shè)備。Docker守護程序通過其MAC地址將流量路由到容器颠区。macvlan?使用場景在于如果希望直接連接到物理網(wǎng)絡(luò)時削锰,使用驅(qū)動程序有時是最佳選擇,而不是通過Docker宿主機的網(wǎng)絡(luò)堆棧進行路由瓦呼。

5喂窟、禁用網(wǎng)絡(luò)模式(none:?禁用容器所有網(wǎng)絡(luò)。通常與自定義網(wǎng)絡(luò)驅(qū)動程序一起使用央串。none不適用于群組服務(wù)磨澡。

6、其它模式(網(wǎng)絡(luò)插件):可以使用Docker安裝和使用第三方網(wǎng)絡(luò)插件质和。這些插件可從?Docker Hub或第三方供應(yīng)商處獲得稳摄。有關(guān)安裝和使用給定網(wǎng)絡(luò)插件的信息,請參閱供應(yīng)商的文檔饲宿。


使用場景

下面我們總結(jié)下不同場景建議使用的網(wǎng)絡(luò)模式:

1厦酬、當(dāng)您需要多個容器在同一個Docker宿主機上進行通信時,使用自定義的橋接網(wǎng)絡(luò)模式(bridge是最佳選擇瘫想。

2仗阅、當(dāng)容器網(wǎng)絡(luò)堆棧不應(yīng)與Docker主機隔離但希望隔離容器的其他方面cgroup,unix file system時,使用主機網(wǎng)絡(luò)模式(host最佳選擇国夜。

3减噪、當(dāng)您需要在不同Docker守護進程上運行的容器進行通信時,或者當(dāng)多個應(yīng)用程序使用swarm服務(wù)協(xié)同工作時车吹,覆蓋網(wǎng)絡(luò)模式(overlay是最佳選擇筹裕。

4當(dāng)您從VM設(shè)置遷移或需要容器看起來像網(wǎng)絡(luò)上的物理主機時窄驹,Macvlan網(wǎng)絡(luò)是最佳的朝卒,這樣每個主機都具有唯一的MAC地址。

5乐埠、另外如果以上模式都不能滿足您的需求是抗斤,可以查找第三方網(wǎng)絡(luò)插件進行集成囚企。

?

使用方式

下面我們操練下網(wǎng)絡(luò)相關(guān)的命令,在沒有說明情況下豪治,默認(rèn)我們在node3節(jié)點上執(zhí)行洞拨。

在練習(xí)之前我們先在節(jié)點3安裝好docker ce且配置好daemon.json加速配置

1、查看網(wǎng)絡(luò)列表

docker network ls

當(dāng)我們安裝好docker之后默認(rèn)就已經(jīng)創(chuàng)建好了3個不同網(wǎng)絡(luò)模式驅(qū)動负拟。當(dāng)我們直接執(zhí)行docker run xxxx沒有通過-network指定網(wǎng)絡(luò)驅(qū)動時烦衣,默認(rèn)使用的是bridge。這種方式不建議在生產(chǎn)級使用掩浙,一般我們都會使用自定義網(wǎng)絡(luò)花吟。自定義網(wǎng)橋的優(yōu)勢在于:

a、自定義網(wǎng)橋可以將某些容器加入到同一個網(wǎng)橋厨姚,這些容器在該網(wǎng)橋內(nèi)部互相暴露所有端口衅澈。對外只會暴露指定映射出來的端口。

b谬墙、自定義網(wǎng)橋可以在容器之間提供DNS(通過容器名稱相互解析)解析今布,而默認(rèn)網(wǎng)橋只能通過ip地址相互訪問,如果想在默認(rèn)網(wǎng)橋上支持類型的功能需要使用--link選項

c拭抬、可以動態(tài)將運行中的容器與自定義網(wǎng)絡(luò)連接或斷開部默,不需要重啟。如果使用默認(rèn)網(wǎng)橋造虎,則需要停止容器傅蹂,再通過不同選項重新創(chuàng)建容器。

d算凿、可以針對自定義網(wǎng)橋進行個性化配置份蝴,而不會影響其它使用該網(wǎng)橋的容器。

?

2氓轰、查看bridge網(wǎng)橋詳細(xì)信息

docker network inspect bridge
//查看有哪些容器使用該網(wǎng)橋docker network inspect bridge | grep Containers -A 10


3婚夫、創(chuàng)建自定義橋接模式網(wǎng)絡(luò)my-bridge

docker?network?create?my-bridgedocker network create -d bridge my-bridge?


?

將前面演示的myhelloworld拉取到本地,然后使用自定義驅(qū)動my-bridge啟動:

node1:

docker login registry.laizhiy.cndocker tag?myhelloworld:latest?registry.laizhiy.cn/myhelloworld:latestdocker push?registry.laizhiy.cn/myhelloworld:latest

node3:

docker login registry.laizhiy.cndocker pull?registry.laizhiy.cn/myhelloworld:latestdocker psdocker run -d --rm \--name?myhelloworld?-p?8100:8100?\--network my-bridge \registry.laizhiy.cn/myhelloworld//查看my-bridge容器連接信息docker network inspect my-bridge | grep Container -A 10


可以看到署鸡,myhelloworld容器已經(jīng)加入到我們自定義的網(wǎng)絡(luò)驅(qū)動my-bridge请敦。

?

?

此時我們訪問:http://node3:8100/visitor


我們繼續(xù)在node3部署redis容器,然后測試使用默認(rèn)bridge網(wǎng)絡(luò)和加入到自定義網(wǎng)絡(luò)my-bridgemyhelloworld連接myredis的情況储玫。

docker run -d --rm --name myredis redisdocker network inspect bridge | grep Containers -A 10

?

現(xiàn)在myhelloworld通過--network 連接到my-bridge網(wǎng)橋,myredis連接到默認(rèn)的bridge網(wǎng)橋萤皂,它們連接的是不同的網(wǎng)絡(luò)驅(qū)動(myhelloworld )撒穷,我們訪問

http://node3:8100/visitor

結(jié)果如下:

?

可以看到,不同的網(wǎng)絡(luò)網(wǎng)橋無法通信●晌酰現(xiàn)在停止myredis容器端礼,通過--network方式使用my-bridge網(wǎng)橋再次啟動容器禽笑,此時使用的和myhelloworld是同一個橋接模式的網(wǎng)橋:

docker stop myredisdocker run -d --rm --name myredis --network my-bridge redis//myredis已經(jīng)不存在默認(rèn)bridge網(wǎng)橋列表docker network inspect bridge | grep Containers -A 10

?

//確認(rèn)自定義網(wǎng)橋my-bridge包含myredis和myhelloworld容器docker network inspect my-bridge | grep Containers -A 10

?

我們訪問

http://node3:8100/visitor

結(jié)果如下

?

可以看到,myhelloworld連上了myredis了蛤奥。

通過自定義方式佳镜,可以自由斷開或重新連接網(wǎng)絡(luò)驅(qū)動,命令如下:

docker network disconnect my-bridge myredisdocker network connect my-bridge myredis


可以通過訪問

http://node3:8100/visitor

進行測試斷開和連上的情況凡桥。

如果要刪除某個網(wǎng)絡(luò)驅(qū)動可以執(zhí)行命令:

docker network rm my-bridge

刪除之前需要停止該網(wǎng)絡(luò)關(guān)聯(lián)的所有容器蟀伸。


4、創(chuàng)建自定義主機模式網(wǎng)絡(luò)

docker network create -d host my-host

注意缅刽,一個宿主機只能有一個host網(wǎng)絡(luò)模式實例啊掏,不能創(chuàng)建多個。下面我們來演示一下主機模式網(wǎng)絡(luò)的使用衰猛。演示思路如下:

a迟蜜、停止node3部署的myredis容器

docker stop myredis

b、node3上直接部署redis到宿主機上啡省,具體部署方法自行百度

?

c娜睛、配置/etc/hosts,添加如下內(nèi)容(因為myhelloworld配置文件配置的redis主機是myredis卦睹,所以要配置本地dns解析):

127.0.0.1 myredis

d畦戒、測試通過docker橋接模式網(wǎng)絡(luò)是否可以訪問到宿主機上的服務(wù)

目前myhelloworld使用的仍然是my-bridge橋接網(wǎng)絡(luò),所以我們直接瀏覽器訪問:

http://node3:8100/visitor

?

可以看到使用橋接模式是訪問不了宿主機redis

e分预、測試主機模式是否可以訪問宿主機服務(wù)兢交,停掉myhelloworld,通過--network指定網(wǎng)絡(luò)驅(qū)動為host(主機模式)重新啟動myhelloworld

docker stop myhelloworlddocker run -d --rm \--name myhelloworld \--network?host?-p?8100:8100?\ registry.laizhiy.cn/myhelloworld?//筆者為了方便笼痹,直接關(guān)閉防火墻配喳,生產(chǎn)建議通過開放8100端口方式systemctl stop firewalld

此時我們訪問:

http://node3:8100/visitor

?

可以看到只有使用主機網(wǎng)絡(luò)模式才可以訪問宿主服務(wù)。

//確認(rèn)myhelloworld的確是使用host(主機模式)網(wǎng)絡(luò)驅(qū)動docker network inspect host | grep Container -A 10

?

5凳干、創(chuàng)建自定義覆蓋模式網(wǎng)絡(luò)

docker network create -d overlay my-overlaydocker network ls

執(zhí)行該命令前我們需要先初始化集群管理者(哪臺機子執(zhí)行init晴裹,哪臺就會成為集群管理者):

docker swarm init

關(guān)于覆蓋網(wǎng)絡(luò)的更多使用我們后面講解集群swarm時再講解。

6救赐、創(chuàng)建自定義MAC模式網(wǎng)絡(luò)

docker network create -d macvlan  my-macvlan

7涧团、創(chuàng)建禁用模式網(wǎng)絡(luò)

docker network create -d null my-none

注意,一個宿主機只能有一個null網(wǎng)絡(luò)模式實例经磅,不能創(chuàng)建多個泌绣。


關(guān)于docker網(wǎng)絡(luò)驅(qū)動相關(guān)的知識我們暫時就講解到這里,更多關(guān)于docker網(wǎng)絡(luò)配置建議可以參考官方文檔或網(wǎng)絡(luò)資料進行學(xué)習(xí)预厌。


-------------------- 正文結(jié)束 ------------------------

歡迎微信掃碼關(guān)注個人公眾號阿迈,更多資源分享給您。您的支持是我分享的最大動力轧叽。



?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苗沧,一起剝皮案震驚了整個濱河市刊棕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌待逞,老刑警劉巖甥角,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異识樱,居然都是意外死亡嗤无,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門牺荠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來翁巍,“玉大人,你說我怎么就攤上這事休雌≡詈” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵杈曲,是天一觀的道長驰凛。 經(jīng)常有香客問我,道長担扑,這世上最難降的妖魔是什么恰响? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮涌献,結(jié)果婚禮上胚宦,老公的妹妹穿的比我還像新娘。我一直安慰自己燕垃,他們只是感情好枢劝,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著卜壕,像睡著了一般您旁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上轴捎,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天鹤盒,我揣著相機與錄音,去河邊找鬼侦副。 笑死侦锯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秦驯。 我是一名探鬼主播率触,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了葱蝗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤细燎,失蹤者是張志新(化名)和其女友劉穎两曼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體玻驻,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡悼凑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了璧瞬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片户辫。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嗤锉,靈堂內(nèi)的尸體忽然破棺而出渔欢,到底是詐尸還是另有隱情,我是刑警寧澤瘟忱,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布奥额,位于F島的核電站,受9級特大地震影響访诱,放射性物質(zhì)發(fā)生泄漏垫挨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一触菜、第九天 我趴在偏房一處隱蔽的房頂上張望九榔。 院中可真熱鬧,春花似錦涡相、人聲如沸哲泊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽攻旦。三九已至,卻和暖如春生逸,著一層夾襖步出監(jiān)牢的瞬間牢屋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工槽袄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烙无,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓遍尺,卻偏偏與公主長得像截酷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子乾戏,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

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