容器的四種網(wǎng)絡(luò)模式:
bridge橋接模式、host模式切油、container模式和none模式掏缎,啟動容器的時候可以使用 --net 參數(shù)指定箱蝠,默認是橋接模式
網(wǎng)絡(luò)的基本管理
橋接模式:
默認的一種模式。
Host網(wǎng)絡(luò)模式:
host 模式是 bridge 橋接模式很好的補充汇陆。采用 host 模式的 Docker Container,可以直接使用
宿主機的 IP 地址與外界進行通信,若宿主機的 eth0 是一個公有 IP,那么容器也擁有這個公
有 IP怒炸。同時容器內(nèi)服務(wù)的端口也可以使用宿主機的端口,無需額外進行 NAT 轉(zhuǎn)換。當然,
有這樣的方便,肯定會損失部分其他的特性,最明顯的是 Docker Container 網(wǎng)絡(luò)環(huán)境隔離性
的弱化,即容器不再擁有隔離毡代、獨立的網(wǎng)絡(luò)棧阅羹。另外,使用 host 模式的 Docker Container 雖
然可以讓容器內(nèi)部的服務(wù)和傳統(tǒng)情況無差別、無改造的使用,但是由于網(wǎng)絡(luò)隔離性的弱
化,該容器會與宿主機共享競爭網(wǎng)絡(luò)棧的使用;另外,容器內(nèi)部將不再擁有所有的端口資
源,原因是部分端口資源已經(jīng)被宿主機本身的服務(wù)占用,還有部分端口已經(jīng)用以 bridge 網(wǎng)
絡(luò)模式容器的端口映射教寂。
container網(wǎng)絡(luò)模式
None網(wǎng)絡(luò)模式
網(wǎng)絡(luò)環(huán)境為 none,即不為 Docker Container 任何的網(wǎng)絡(luò)環(huán)境捏鱼。一旦 Docker Container 采用了
none 網(wǎng)絡(luò)模式,那么容器內(nèi)部就只能使用 loopback 網(wǎng)絡(luò)設(shè)備,不會再有其他的網(wǎng)絡(luò)資源。
可以說 none 模式為 Docker Container 做了極少的網(wǎng)絡(luò)設(shè)定,但是俗話說得好“少即是多”
在沒有網(wǎng)絡(luò)配置的情況下,作為 Docker 開發(fā)者,才能在這基礎(chǔ)做其他無限多可能的網(wǎng)絡(luò)定制開發(fā)酪耕。
這也恰巧體現(xiàn)了 Docker 設(shè)計理念的開放导梆。在 none 網(wǎng)絡(luò)模式下分配固定 ip:
netns 是在 linux 中提供網(wǎng)絡(luò)虛擬化的一個項目,使用 netns 網(wǎng)絡(luò)空間虛擬化可以在本地虛擬
化出多個網(wǎng)絡(luò)環(huán)境,目前 netns 在 lxc 容器中被用來為容器提供網(wǎng)絡(luò)。
使用 netns 創(chuàng)建的網(wǎng)絡(luò)空間獨立于當前系統(tǒng)的網(wǎng)絡(luò)空間,其中的網(wǎng)絡(luò)設(shè)備以及 iptables 規(guī)則
等都是獨立的,就好像進入了另外一個網(wǎng)絡(luò)一樣迂烁。
創(chuàng)建網(wǎng)絡(luò)環(huán)境刪除網(wǎng)絡(luò)環(huán)境
制作軟鏈接看尼,創(chuàng)建一個網(wǎng)絡(luò)環(huán)境
[root@server1 netns]# ip link add name veth0 type veth peer name veth1
這里我們添加了一對veth設(shè)備,veth設(shè)備是成對出現(xiàn)的婚被,兩個設(shè)備之間的數(shù)據(jù)是相互貫通的
[root@server1 netns]# brctl addif docker0 veth0
添加橋接
查看設(shè)備狀態(tài)為DOWN激活設(shè)備
[root@server1 netns]# ip link set veth1 netns 18295 將eth1加入到創(chuàng)建的網(wǎng)絡(luò)空間狡忙,此時在宿主機里已經(jīng)找不到ethnic
的信息了
[root@server1 netns]# ip netns exec 18295 ip link set veth1 name eth0 給容器設(shè)置新的網(wǎng)卡
[root@server1 netns]# ip netns exec 18295 ip link set up dev eth0 開啟eth0
[root@server1 netns]# ip netns exec 18295 ip addr add 172.17.0.100/24 dev eth0 設(shè)置ip
[root@server1 netns]# ip netns exec 18295 ip route add default via 172.17.0.1 設(shè)置網(wǎng)關(guān)
宿主機里面找不到veth1了
容器間互連
--link 參數(shù)可以在不映射端口的前提下為兩個容器間建立安全連接, --link 參數(shù)可以連接一個
或多個容器到將要創(chuàng)建的容器。
--link 參數(shù)的格式為 --link name:alias,其中 name 是要鏈接的容器的名稱,alias 是這個連
接的別名址芯。