Docker的網(wǎng)絡(luò)

Docker bridge


docker bridge network是怎么映射到主機IP地址上網(wǎng)的呢?通過本機 ip a命令我們可以看到如下內(nèi)容:
其中docker0 的networkspace是本機舰涌,veth26d281@if13有自己的networkspace,同時也是docker0網(wǎng)卡的一個接口蠢古。

image.png

通過docker exec test1 ip a 進(jìn)入查看dokcer容器的ip network水由,其中eth0@if14和veth26d281@if13是一對,


image.png

通過brctl show 可以看到它們之間的關(guān)聯(lián)關(guān)系挥吵,因為veth26d281是docker0的一個接口,又因為上面的eth0@if14和veth26d281@if13是一對花椭,忽匈,所以可以通過這個接口轉(zhuǎn)換成本機宿主的ip去訪問Internt


image.png

image.png

容器之間的link


我們在使用Docker的時候,經(jīng)掣龃樱可能需要連接到其他的容器脉幢,比如:web服務(wù)需要連接數(shù)據(jù)庫。按照往常的做法嗦锐,需要先啟動數(shù)據(jù)庫的容器嫌松,映射出端口來,然后配置好客戶端的容器奕污,再去訪問萎羔。其實針對這種場景,Docker提供了--link 參數(shù)來滿足碳默。
docker run -d --name test2 --link test1 busybox


容器的端口映射


在啟動容器時贾陷,如果不配置宿主機器與虛擬機的端口映射,外部程序是無法訪問虛擬機的嘱根,因為沒有端口髓废。
端口映射的指令是docker run -p ip:hostPort:containerPort redis
使用-p參數(shù)會分配宿主機的端口映射到虛擬機。
IP表示主機的IP地址该抒。
hostPort表示宿主機的端口慌洪。
containerPort表示虛擬機的端口 。
容器的4種網(wǎng)絡(luò)模式。

我們在使用docker run創(chuàng)建Docker容器時冈爹,可以用--net選項指定容器的網(wǎng)絡(luò)模式涌攻,Docker有以下4種網(wǎng)絡(luò)模式:

  • host模式,使用--net=host指定频伤。
  • container模式恳谎,使用--net=container:NAME_or_ID指定。
  • none模式憋肖,使用--net=none指定因痛。
  • bridge模式,使用--net=bridge指定瞬哼,默認(rèn)設(shè)置婚肆。

下面分別介紹一下Docker的各個網(wǎng)絡(luò)模式:

  • host模式
    眾所周知,Docker使用了Linux的Namespaces技術(shù)來進(jìn)行資源隔離坐慰,如PID Namespace隔離進(jìn)程,Mount Namespace隔離文件系統(tǒng)用僧,Network Namespace隔離網(wǎng)絡(luò)等结胀。一個Network Namespace提供了一份獨立的網(wǎng)絡(luò)環(huán)境,包括網(wǎng)卡责循、路由糟港、Iptable規(guī)則等都與其他的Network Namespace隔離。一個Docker容器一般會分配一個獨立的Network Namespace院仿。但如果啟動容器的時候使用host模式秸抚,那么這個容器將不會獲得一個獨立的Network Namespace,而是和宿主機共用一個Network Namespace歹垫。容器將不會虛擬出自己的網(wǎng)卡剥汤,配置自己的IP等,而是使用宿主機的IP和端口排惨。
    例如吭敢,我們在10.10.101.105/24的機器上用host模式啟動一個含有web應(yīng)用的Docker容器,監(jiān)聽tcp80端口暮芭。當(dāng)我們在容器中執(zhí)行任何類似ifconfig命令查看網(wǎng)絡(luò)環(huán)境時鹿驼,看到的都是宿主機上的信息。而外界訪問容器中的應(yīng)用辕宏,則直接使用10.10.101.105:80即可畜晰,不用任何NAT轉(zhuǎn)換,就如直接跑在宿主機中一樣瑞筐。但是凄鼻,容器的其他方面,如文件系統(tǒng)、進(jìn)程列表等還是和宿主機隔離的野宜。
  • container模式
    在理解了host模式后扫步,這個模式也就好理解了。這個模式指定新創(chuàng)建的容器和已經(jīng)存在的一個容器共享一個Network Namespace匈子,而不是和宿主機共享河胎。新創(chuàng)建的容器不會創(chuàng)建自己的網(wǎng)卡,配置自己的IP虎敦,而是和一個指定的容器共享IP游岳、端口范圍等。同樣其徙,兩個容器除了網(wǎng)絡(luò)方面胚迫,其他的如文件系統(tǒng)、進(jìn)程列表等還是隔離的唾那。兩個容器的進(jìn)程可以通過lo網(wǎng)卡設(shè)備通信访锻。
  • none模式
    這個模式和前兩個不同。在這種模式下闹获,Docker容器擁有自己的Network Namespace期犬,但是,并不為Docker容器進(jìn)行任何網(wǎng)絡(luò)配置避诽。也就是說龟虎,這個Docker容器沒有網(wǎng)卡、IP沙庐、路由等信息鲤妥。需要我們自己為Docker容器添加網(wǎng)卡、配置IP等拱雏。
  • bridge模式
    bridge模式是Docker默認(rèn)的網(wǎng)絡(luò)設(shè)置棉安,此模式會為每一個容器分配Network Namespace、設(shè)置IP等古涧,并將一個主機上的Docker容器連接到一個虛擬網(wǎng)橋上垂券。下面著重介紹一下此模式。

Overlay和Underlay的通俗解釋

  • 跨主機網(wǎng)絡(luò)意味著將不同主機上的容器用同一個虛擬網(wǎng)絡(luò)連接起來羡滑。這個虛擬網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)和實現(xiàn)技術(shù)就是網(wǎng)絡(luò)模型菇爪。
  • Docker overlay 如名稱所示,是 overlay 網(wǎng)絡(luò)柒昏,建立主機間 VxLAN 隧道凳宙,原始數(shù)據(jù)包在發(fā)送端被封裝成 - - VxLAN 數(shù)據(jù)包,到達(dá)目的后在接收端解包职祷。
  • Macvlan 網(wǎng)絡(luò)在二層上通過 VLAN 連接容器氏涩,在三層上依賴外部網(wǎng)關(guān)連接不同 macvlan届囚。數(shù)據(jù)包直接發(fā)送,不需要封裝是尖,屬于 underlay 網(wǎng)絡(luò)意系。
  • Flannel 我們討論了兩種 backend:vxlan 和 host-gw。vxlan 與 Docker overlay 類似饺汹,屬于 overlay 網(wǎng)絡(luò)蛔添。host-gw 將主機作為網(wǎng)關(guān),依賴三層 IP 轉(zhuǎn)發(fā)兜辞,不需要像 vxlan 那樣對包進(jìn)行封裝迎瞧,屬于 underlay 網(wǎng)絡(luò)。
  • Weave 是 VxLAN 實現(xiàn)逸吵,屬于 overlay 網(wǎng)絡(luò)凶硅。

Docker Overlay網(wǎng)絡(luò)和etcd實現(xiàn)多機容器通信

image.png

image.png

命令

當(dāng)前機器上docker有哪些網(wǎng)絡(luò)
docker network ls
#查看指定的網(wǎng)絡(luò)詳情
docker network inspect [networkId]
docker run -d --name test2 --link test1 busybox
docker network create -d bridge my-bridge
docker run -d --name test3 --network my-bridge busybox
docker network connect my-bridge test2
docker run --name web -d nginx
docker network inspect bridge
docker run --name nginx  -d -p 80:80 nginx
docker run -p ip:hostPort:containerPort redis
##-e 設(shè)置環(huán)境變量
docker run -d --link redis --name flask-redis -e REDIS_HOST=redis [image]
#實時查看docker容器日志
$ sudo docker logs -f -t --tail #行數(shù) 容器名
docker network create -d overlay demo
#實時查看docker容器名為s12的最后10行日志
$ sudo docker logs -f -t --tail 10 s12
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市扫皱,隨后出現(xiàn)的幾起案子足绅,更是在濱河造成了極大的恐慌,老刑警劉巖啸罢,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件编检,死亡現(xiàn)場離奇詭異,居然都是意外死亡扰才,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門厕怜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衩匣,“玉大人,你說我怎么就攤上這事粥航±拍螅” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵递雀,是天一觀的道長柄延。 經(jīng)常有香客問我,道長缀程,這世上最難降的妖魔是什么搜吧? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮杨凑,結(jié)果婚禮上滤奈,老公的妹妹穿的比我還像新娘。我一直安慰自己撩满,他們只是感情好蜒程,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布绅你。 她就那樣靜靜地躺著,像睡著了一般昭躺。 火紅的嫁衣襯著肌膚如雪忌锯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天领炫,我揣著相機與錄音偶垮,去河邊找鬼。 笑死驹吮,一個胖子當(dāng)著我的面吹牛针史,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碟狞,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼啄枕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了族沃?” 一聲冷哼從身側(cè)響起频祝,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脆淹,沒想到半個月后常空,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡盖溺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年漓糙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烘嘱。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡昆禽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蝇庭,到底是詐尸還是另有隱情醉鳖,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布哮内,位于F島的核電站盗棵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏北发。R本人自食惡果不足惜纹因,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鲫竞。 院中可真熱鬧辐怕,春花似錦、人聲如沸从绘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至陕截,卻和暖如春驳棱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背农曲。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工社搅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人乳规。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓形葬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親暮的。 傳聞我的和親對象是個殘疾皇子笙以,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

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