Docker -- 四类网络模式
网络模式 | 配置 | 说明 |
---|---|---|
host | -net=host | 容器和宿主机共享Network namspace |
container | -net=container:{Name_or_ID} | 容器和另外一个容器共享Network namespace,典型应用:kubernetes中pod多个容器 |
none | -net=none | 容器有独立的Network namespace,但没有任何网络配置 |
bridge | -net=bridge | 默认模式 |
host模式下,容器可以直接使用宿主机IP地址与外界通信,容器内也可以直接使用宿主机的端口,不需要NAT。
host模式优点是网络性能较好,但网络隔离性不好。
Container模式 container模式下,指定新创建的容器和已存在的另一个容器共享一个Network namespace,新创建的容器不会再创建网卡。
文章图片
kubernetes是container模式的典型应用,pod中的多个容器共享一个Network namespace,可以通过127.0.0.1:port访问彼此。
//bridge模式的容器
$ docker run -d -P --net=bridge nginx:1.9.1
$ docker ps
CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
eb19088be8a0nginx:1.9.1nginx -g3 minutes agoUp 3 minutes0.0.0.0:32769->80/tcp,0.0.0.0:32768->443/tcpadmiring_engelbart$ docker exec -it admiring_engelbart ip addr
8: eth0@if9: mtu 9001 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
inet **172.17.0.3**/16 scope global eth0//新建一个容器,跟之前的容器共享Network namespace,ip相同
$ docker run -it --net=container:admiring_engelbart ubuntu:14.04 ip addr
...
8: eth0@if9: mtu 9001 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:03 brd ff:ff:ff:ff:ff:ff
inet **172.17.0.3**/16 scope global eth0
None模式 none模式下,不会为容器进行网络配置,也就是说,容器没有网卡信息(仅有lo网卡)。
Bridge模式 bridge模式下,docker在宿主机上创建一个docker0的虚拟网桥,该宿主机上的容器连接到docker0上,通过网桥组成一个L2网络。
当新建容器时:
- 从docker0子网中分配1个IP给容器,并设置docker0为容器的默认网关;
- 在宿主机上创建1对虚拟网卡:veth pair,一端在容器中(eth0),另一端在宿主机中(veth-×××),并将veth-×××加入docker0。
文章图片
【Docker -- 四类网络模式】docker在宿主机的iptables上做了DNAT规则,实现了端口转发:
//创建ngingx容器,宿主机8080,容器80
# docker run -p 8080:80 -d nginx//查看iptables DNAT
# iptables -t nat -vnL
....
Chain DOCKER (2 references)
pktsbytestargetprot opt inoutsourcedestination
00DNATtcp--!docker0 *0.0.0.0/00.0.0.0/0tcp dpt:8080 to:172.17.0.2:80
推荐阅读
- parallels|parallels desktop 解决网络初始化失败问题
- Docker应用:容器间通信与Mariadb数据库主从复制
- 猎杀IP
- 自媒体形势分析
- 数学大作战
- 2018.03.18
- 星期天的下午茶(一)
- 08黑龙江迟淑荣弯柳树网络学院第五期学习赵宗瑞老师主讲的(传统文化与身心健康)教育体系心得体会
- 三国谋略22(找准你的定位)
- 何以燃夏