Docker 網(wǎng)絡(luò) - none 模式
容器與主機(jī)、容器與容器之間是互相隔離的。同時(shí),我們可以通過配置 docker 網(wǎng)絡(luò),為容器創(chuàng)建完全獨(dú)立的網(wǎng)絡(luò)命名空間,或者使容器共享主機(jī)或者其他容器的網(wǎng)絡(luò)命名空間,以應(yīng)對(duì)不同場(chǎng)景的需要。
這里有4 種常用的單宿主機(jī)網(wǎng)絡(luò)模式:
- bridge 模式;
- host 模式;
- container 模式;
- none 模式。
本小節(jié)我們將了解網(wǎng)絡(luò)模式中的 none 模式。
1. none 模式
容器有自己的網(wǎng)絡(luò)命名空間,但不做任何配置,它與宿主機(jī)、與其他容器都不連通的。我們新建一個(gè) none 模式的 busybox 鏡像 b0:
docker run -d -t --network none --name b0 busybox
使用 docker exec b0 ip a
查看它的網(wǎng)絡(luò)狀態(tài), 驗(yàn)證它僅有 lo 接口,不能與容器外通信:
兩個(gè)容器之間可以直連通信,但不通過主機(jī)網(wǎng)橋進(jìn)行橋接。解決的辦法是創(chuàng)建一對(duì) peer 接口,分別放到兩個(gè)容器中,配置成點(diǎn)到點(diǎn)鏈路類型即可。
?? 以下操作需要在 Linux 下進(jìn)行:
首先啟動(dòng) 2 個(gè)容器:
docker run -it -d --net=none --name=none1 busybox
docker run -it -d --net=none --name=none2 busybox
找到這兩個(gè)容器的進(jìn)程號(hào):
docker inspect -f '{{.State.Pid}}' none1 #6545
docker inspect -f '{{.State.Pid}}' none2 #6606
然后創(chuàng)建網(wǎng)絡(luò)命名空間的跟蹤文件:
sudo mkdir -p /var/run/netns
sudo ln -s /proc/6545/ns/net /var/run/netns/6545
sudo ln -s /proc/6606/ns/net /var/run/netns/6606
創(chuàng)建一對(duì) peer 接口,然后配置路由:
sudo ip link add A type veth peer name B
sudo ip link set A netns 6545
sudo ip netns exec 6545 ip addr add 10.1.1.1/32 dev A
sudo ip netns exec 6545 ip link set A up
sudo ip netns exec 6545 ip route add 10.1.1.2/32 dev A
sudo ip link set B netns 6606
sudo ip netns exec 6606 ip addr add 10.1.1.2/32 dev B
sudo ip netns exec 6606 ip link set B up
sudo ip netns exec 6606 ip route add 10.1.1.1/32 dev B
現(xiàn)在這 2 個(gè)容器就可以相互 ping 通,并成功建立連接。點(diǎn)到點(diǎn)鏈路不需要子網(wǎng)和子網(wǎng)掩碼:
測(cè)試完畢刪除無(wú)用的容器:
docker rm -f none1 none2
2. 小結(jié)
none 模式提供了一種空白的網(wǎng)絡(luò)配置,方便用戶排除其他干擾,用于自定義網(wǎng)絡(luò)。