5:网络管理
六、网络模式
1、Docker支持的5种网络模式
- bridge:默认网络,docker启动后默认创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。
- host:容器不会获得一个独立的network namespace,而是与宿主机共用一个。
- other container:与指定的容器使用同一个network namespace,网卡配置也都是相同的。
- none:获取独立的network namespace,但不为容器进行任何网络配置。
- 自定义:默认与bridge网络一样。
2、Bridge网络

Docker COntainer的bridge桥接模式可以说是目前docker开发者最常使用的,也是默认的网络模式。Bridge桥接模式为Docker Contaniner创建独立的网络栈,保证容器内的进程组使用独立的网络环境,实现容器内、容器与宿主机之间的网络栈隔离。另外Docker通过宿主机上的网桥(docker0)来连通容器内部的网络栈与宿主机的网络栈,实现容器与宿主机乃至外界的网络通信。另Docker桥接模式和VMware的桥接网络不同,Docker桥接模式使用NAT方式使容器可以访问外部网络。
docker pull busybox #l拉去一个busybox容器
docker container run -itd --name bs1 busybox #以默认bridge网络启动这个容器
docker container exec -it bs1 sh
/ # ifconfig #发现只能看到容器独立的网络
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:04
inet addr:172.17.0.4 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:648 (648.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
3、Host网络

Docker Container中的host模式与bridge桥接模式有很大的不同。最大的区别当属,host模式并没有为容器创建一个隔离的网络环境。而之所以称之为host模式,是因为该模式下的Docker Container会和host宿主机共享同一个网络namespace,故Docker Container可以和宿主机一样,使用宿主机的eth0,实现和外界的通信。换言之,Docker Container的IP地址即为宿主机eth0的IP地址。
docker container run -itd --name bs2 --net host busybox #以host网络启动这个busybox容器
docker container exec -it bs2 sh #进入容器终端
ifconfig #查看容器网络,发现宿主机的网络也可以看见。说明host网络和宿主机同一个namespace
br-cc8c283d0bc8 Link encap:Ethernet HWaddr 02:42:EE:46:1A:B0
inet addr:172.18.0.1 Bcast:172.18.255.255 Mask:255.255.0.0
inet6 addr: fe80::42:eeff:fe46:1ab0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:876 errors:0 dropped:0 overruns:0 frame:0
TX packets:1077 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2261014 (2.1 MiB) TX bytes:632025 (617.2 KiB)
docker0 Link encap:Ethernet HWaddr 02:42:C9:D1:28:F2
inet addr:172.17.0.1 Bcast:172.17.255.255 Mask:255.255.0.0
inet6 addr: fe80::42:c9ff:fed1:28f2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
ens160 Link encap:Ethernet HWaddr 00:50:56:94:9C:A7
inet addr:192.168.1.201 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::f4d7:9ff7:5c05:de61/64 Scope:Link
inet6 addr: fe80::d63b:13e4:bed3:409a/64 Scope:Link
inet6 addr: fe80::f642:b8ec:84b:906a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:466447 errors:0 dropped:34 overruns:0 frame:0
TX packets:207953 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:410820478 (391.7 MiB) TX bytes:18078772 (17.2 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:68 errors:0 dropped:0 overruns:0 frame:0
TX packets:68 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:5592 (5.4 KiB) TX bytes:5592 (5.4 KiB)
vetha135fc9 Link encap:Ethernet HWaddr 16:1E:83:34:6D:6F
inet6 addr: fe80::141e:83ff:fe34:6d6f/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2247 errors:0 dropped:0 overruns:0 frame:0
TX packets:2367 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3256309 (3.1 MiB) TX bytes:1159983 (1.1 MiB)
vetha8d4716 Link encap:Ethernet HWaddr 5A:CA:DC:36:A4:33
inet6 addr: fe80::58ca:dcff:fe36:a433/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1290 errors:0 dropped:0 overruns:0 frame:0
TX packets:1389 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:527958 (515.5 KiB) TX bytes:984411 (961.3 KiB)
vethb829428 Link encap:Ethernet HWaddr 56:4F:74:3E:98:EA
inet6 addr: fe80::544f:74ff:fe3e:98ea/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
4、Other Container网络

Docker Container的other container网络模式是Docker中一种较为特别的网络模式。之所以称为“Other Contaniner”,是因为这个模式下的Docker Container,会使用其他容器的网络环境。之所以称为“特别”,是因为这个模式下容器的网络隔离性会处于bridge桥接模式与host模式之间。
Docker Container共享其他容器的网络环境,则至少这两个容器不存在网络隔离,而这两个容器又与宿主机以及除此之外其他的容器存在网络隔离。
5.none网络
Docker Container的第四种网络模式是none模式。顾名思义,网络环境为none,即不为Docker Container配置网络的网络环境。一旦Docker Container采用了none网络模式,那么容器内部就只能使用loopback网络设备,不会再有其他的网络资源。
docker container run -itd --name bs4 --net none busybox #以none网络启动这个busybox容器
docker container exec -it bs4 sh
/ # ifconfig #只有lo网络设备
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Docker网络详解:http://www.infoq.com/cn/articles/docker-source-code-analysis-part7
七、容器网络访问原理
1、容器bridge网络模式访问实现
Docker主要通过netfilter/iptables实现网络通信。
iptables由netfilter和iptables组成,netfilter组件是linux内核集成的信息包过滤系统,它维护一个信息包过滤表。这个表用于控制信息包过滤处理的规则集。而iptables只是一个在用户空间的工具,用于增删改查这个过滤表的规则

docker run -itd -p 80:80 --name web1 nginx #创建一个nginx容器,将80端口映射出来 iptables -t nat -nL #查看iptables nat转发表 Chain POSTROUTING (policy ACCEPT) #容器访问外部转发项 target prot opt source destination MASQUERADE all -- 172.18.0.0/16 0.0.0.0/0 MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0 MASQUERADE tcp -- 172.17.0.3 172.17.0.3 tcp dpt:80 Chain DOCKER (2 references) #外部访问容器转发项 target prot opt source destination RETURN all -- 0.0.0.0/0 0.0.0.0/0 RETURN all -- 0.0.0.0/0 0.0.0.0/0 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:172.17.0.3:80

浙公网安备 33010602011771号