docker學(xué)習(xí)筆記——docker網(wǎng)絡(luò)

一、docker網(wǎng)絡(luò)模式

1、單機(jī)網(wǎng)絡(luò)
  • Null模式
    1. 把容器放入獨(dú)立的網(wǎng)絡(luò)空間但不做任何配置
    2. 用戶需要通過(guò)運(yùn)行docker network 命令來(lái)完成網(wǎng)絡(luò)配置
  • Host模式
    1. 使用主機(jī)網(wǎng)絡(luò)空間掌唾,復(fù)用主機(jī)網(wǎng)絡(luò)
  • Container模式
    1. 重用其他容器的網(wǎng)絡(luò)
  • Bridge模式
    1. 使用Linux網(wǎng)橋和iptables提供容器互聯(lián),Docker再每臺(tái)主機(jī)上創(chuàng)建docker0的網(wǎng)橋,通過(guò)veth pair連接每一個(gè)endpoint
2免钻、跨主機(jī)網(wǎng)絡(luò)
  • Overlay
    1. 通過(guò)網(wǎng)絡(luò)封包實(shí)現(xiàn)
  • Underlay
    1. 使用現(xiàn)有底層網(wǎng)絡(luò),為每個(gè)容器配置可路由的網(wǎng)絡(luò)IP(IP資源的消耗大崔拥,需要網(wǎng)段規(guī)劃)

二极舔、基于Null網(wǎng)絡(luò)模式,實(shí)現(xiàn)單主機(jī)下bridge模式網(wǎng)絡(luò)

基于Null網(wǎng)絡(luò)模式容器链瓦,實(shí)現(xiàn)下圖的網(wǎng)絡(luò)結(jié)構(gòu)(單主機(jī)下模擬bridge模式網(wǎng)絡(luò))


啟動(dòng)docker
# 執(zhí)行以下命令啟動(dòng)兩個(gè)docker
$ sudo docker run --network none -d nginx
$ sudo docker run --network none -d nginx
# 查看并獲取docker的pid
$ sudo docker ps -a
CONTAINER ID   IMAGE     COMMAND                  CREATED             STATUS             PORTS     NAMES
48113f09f569   nginx     "/docker-entrypoint.…"   About an hour ago   Up About an hour             serene_sanderson
9907e87fba34   nginx     "/docker-entrypoint.…"   2 hours ago         Up 2 hours                   compassionate_nightingale
$ sudo docker inspect 1cb1cb496de4|grep -i pid
            "Pid": 1703143,
            "PidMode": "",
            "PidsLimit": null,
$ sudo docker inspect 52eaab254d07|grep -i pid
            "Pid": 1702968,
            "PidMode": "",
            "PidsLimit": null,
$ pid_docker0=1703143
$ pid_docker1=1702968
配置docker網(wǎng)絡(luò)namespace
# 查看docker的namespace
$ sudo ls -l /proc/$pid_docker0/ns
total 0
lrwxrwxrwx 1 root root 0 Mar  5 13:18 cgroup -> 'cgroup:[4026531835]'
lrwxrwxrwx 1 root root 0 Mar  5 13:18 ipc -> 'ipc:[4026532302]'
lrwxrwxrwx 1 root root 0 Mar  5 13:18 mnt -> 'mnt:[4026532300]'
lrwxrwxrwx 1 root root 0 Mar  5 13:16 net -> 'net:[4026532305]'
lrwxrwxrwx 1 root root 0 Mar  5 13:18 pid -> 'pid:[4026532303]'
lrwxrwxrwx 1 root root 0 Mar  5 13:18 pid_for_children -> 'pid:[4026532303]'
lrwxrwxrwx 1 root root 0 Mar  5 13:18 user -> 'user:[4026531837]'
lrwxrwxrwx 1 root root 0 Mar  5 13:18 uts -> 'uts:[4026532301]'
# 將docker網(wǎng)絡(luò)的namespace關(guān)聯(lián)到宿主機(jī)的網(wǎng)絡(luò)namespace下
$ sudo ln -s /proc/$pid_docker0/ns/net /var/run/netns/$pid_docker0
$ sudo ln -s /proc/$pid_docker1/ns/net /var/run/netns/$pid_docker1
$ ip netns
1702968
1703143
配置虛擬以太網(wǎng)
# 查看當(dāng)前的bridge
$ brctl show
bridge name bridge id       STP enabled interfaces
docker0     8000.024256ff4aab   no
# 添加虛擬以太網(wǎng)拆魏,供兩個(gè)容器與docker0網(wǎng)橋聯(lián)通
$ sudo ip link add docker0_${pid_docker0} type veth peer name docker_${pid_docker0}
$ sudo ip link add docker0_${pid_docker1} type veth peer name docker_${pid_docker1}
$ ip link
...
17: docker_1703143@docker0_1703143: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 6a:e4:b4:d3:bf:d5 brd ff:ff:ff:ff:ff:ff
18: docker0_1703143@docker_1703143: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 3e:d7:3f:9a:18:2f brd ff:ff:ff:ff:ff:ff
19: docker_1702968@docker0_1702968: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether c6:c1:e9:a5:b5:0a brd ff:ff:ff:ff:ff:ff
20: docker0_1702968@docker_1702968: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 7a:7f:4c:3c:a2:6e brd ff:ff:ff:ff:ff:ff
# 將veth的一端連接到docker0網(wǎng)橋上
$ sudo brctl addif docker0 docker0_${pid_docker0}
$ sudo brctl addif docker0 docker0_${pid_docker1}
# 啟動(dòng)veth連接docker0網(wǎng)橋端設(shè)備
$ sudo ip link set docker0_${pid_docker0} up
$ sudo ip link set docker0_${pid_docker1} up
# 將veth的另一端namespace設(shè)置為對(duì)應(yīng)docker的namespace盯桦,使docker連接veth
$ sudo ip link set docker_${pid_docker0} netns ${pid_docker0}
$ sudo ip link set docker_${pid_docker1} netns ${pid_docker1}
# 查看docker內(nèi)部網(wǎng)絡(luò)設(shè)備信息
$ sudo ip netns exec ${pid_docker0} ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
17: docker_1703143@if18: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 6a:e4:b4:d3:bf:d5 brd ff:ff:ff:ff:ff:ff link-netnsid 0
$ sudo ip netns exec ${pid_docker1} ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
19: docker_1702968@if20: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether c6:c1:e9:a5:b5:0a brd ff:ff:ff:ff:ff:ff link-netnsid 0
配置docker內(nèi)部IP及路由
# 修改docker內(nèi)對(duì)應(yīng)網(wǎng)卡名稱
$ sudo ip netns exec ${pid_docker0} ip link set dev docker_${pid_docker0} name eth0
$ sudo ip netns exec ${pid_docker1} ip link set dev docker_${pid_docker1} name eth0
# 啟用docker內(nèi)網(wǎng)卡
$ sudo ip netns exec ${pid_docker0} ip link set eth0 up
$ sudo ip netns exec ${pid_docker1} ip link set eth0 up
$ sudo ip netns exec ${pid_docker0} ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
17: eth0@if18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 6a:e4:b4:d3:bf:d5 brd ff:ff:ff:ff:ff:ff link-netnsid 0
$ sudo ip netns exec ${pid_docker1} ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
19: eth0@if20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether c6:c1:e9:a5:b5:0a brd ff:ff:ff:ff:ff:ff link-netnsid 0
# 配置docker的ip及路由
$ ip0=172.17.0.2
$ ip1=172.17.0.3
$ mac0=16
$ mac1=17
$ gateway=172.17.0.1
$ sudo ip netns exec ${pid_docker0} ip addr add ${ip0}/${mac0} dev eth0
$ sudo ip netns exec ${pid_docker1} ip addr add ${ip1}/${mac1} dev eth0
$ sudo ip netns exec ${pid_docker0} ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
17: eth0@if18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 6a:e4:b4:d3:bf:d5 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 scope global eth0
       valid_lft forever preferred_lft forever
$ sudo ip netns exec ${pid_docker1} ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
19: eth0@if20: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether c6:c1:e9:a5:b5:0a brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.3/17 scope global eth0
       valid_lft forever preferred_lft forever
$ sudo ip netns exec ${pid_docker0} ip route add default via ${gateway}
$ sudo ip netns exec ${pid_docker1} ip route add default via ${gateway}
$ sudo ip netns exec ${pid_docker0} ip route
default via 172.17.0.1 dev eth0 
172.17.0.0/16 dev eth0 proto kernel scope link src 172.17.0.2
$ sudo ip netns exec ${pid_docker1} ip route
default via 172.17.0.1 dev eth0 
172.17.0.0/17 dev eth0 proto kernel scope link src 172.17.0.3 
測(cè)試docker網(wǎng)絡(luò)連通性
$ curl 172.17.0.2
<!DOCTYPE html>
...
</html>
$ curl 172.17.0.3
<!DOCTYPE html>
...
</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市渤刃,隨后出現(xiàn)的幾起案子拥峦,更是在濱河造成了極大的恐慌,老刑警劉巖卖子,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件略号,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡洋闽,警方通過(guò)查閱死者的電腦和手機(jī)玄柠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)诫舅,“玉大人羽利,你說(shuō)我怎么就攤上這事】福” “怎么了这弧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)虚汛。 經(jīng)常有香客問(wèn)我匾浪,道長(zhǎng),這世上最難降的妖魔是什么泽疆? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任户矢,我火速辦了婚禮,結(jié)果婚禮上殉疼,老公的妹妹穿的比我還像新娘梯浪。我一直安慰自己,他們只是感情好瓢娜,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布挂洛。 她就那樣靜靜地躺著,像睡著了一般眠砾。 火紅的嫁衣襯著肌膚如雪虏劲。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天褒颈,我揣著相機(jī)與錄音柒巫,去河邊找鬼。 笑死谷丸,一個(gè)胖子當(dāng)著我的面吹牛堡掏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刨疼,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼泉唁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鹅龄!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起亭畜,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤扮休,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后拴鸵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體玷坠,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年宝踪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侨糟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瘩燥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出不同,到底是詐尸還是另有隱情厉膀,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布二拐,位于F島的核電站服鹅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏百新。R本人自食惡果不足惜企软,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望饭望。 院中可真熱鬧仗哨,春花似錦、人聲如沸铅辞。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)斟珊。三九已至苇倡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間囤踩,已是汗流浹背旨椒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留堵漱,地道東北人综慎。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像怔锌,于是被迫代替她去往敵國(guó)和親寥粹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子变过,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

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