关于docker: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模式

host模式下,容器与宿主机共享一个Network namespace,容器将不会虚构出本人的网卡,而是应用宿主机的IP和端口。

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 ID  IMAGE        COMMAND   CREATED         STATUS        PORTS                      NAMES
eb19088be8a0  nginx:1.9.1  nginx -g  3 minutes ago   Up 3 minutes  0.0.0.0:32769->80/tcp,0.0.0.0:32768->443/tcp    admiring_engelbart

$ docker exec -it admiring_engelbart ip addr
8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> 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在宿主机的iptables上做了DNAT规定,实现了端口转发:

//创立ngingx容器,宿主机8080,容器80
# docker run -p 8080:80 -d nginx

//查看iptables DNAT
# iptables -t nat -vnL
....
Chain DOCKER (2 references)
pkts  bytes  target     prot opt in               out                  source               destination
0     0      DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:172.17.0.2:80

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理