2015-10-30 wcdj


Docker提供了四种网络通信方式,每种方式的特点可以参考:https://docs.docker.com/articles/networking/

(1) bridge, NAT (default)

(2) host
(3) container
(4) none

Docker默认使用bridge方式,网络拓扑如下:


bridge模式

优点:网络配置简单

缺点:由于安全(入侵追溯难度大)的考虑,很多公司禁止使用NAT通信方式,同时网络性能方面的损耗也是一方面


host 模式

优点:容器网络配置简单

缺点:容器与宿主机共用一个网络栈,缺乏安全性

# docker run -it -v /root/gerryyang/bin:/gerry --net=none tlinux-sles10sp2-64bit-1.0.13.20150610.sqfs /bin/bash 

container模式
暂时没有使用

none
模式

优点:自定义网络配置,相对灵活

缺点:网络配置复杂,需要自动化,IP持久化

# dockerrun -it -v /root/gerryyang/bin:/gerry--net=none tlinux-sles10sp2-64bit-1.0.13.20150610.sqfs /bin/bash 

网络方案:使用桥接模式,将Docker容器网络配置到本地主机网络的网段中。以实现节点之间、各节点与宿主机以及跨主机之间的通信。

原理:将宿主机的网卡桥接到虚拟网桥中,再给Docker容器分配一个本地局域网IP(二层通信)。

网络拓扑:


但是,此方案同样存在一些问题:
1,容器占用主机网络的IP地址,私有IP地址可能不够用;
2,大量容器可能引起广播风暴,导致主机所在网络性能的下降;
3,容器连接在主机网络中可能引起安全问题;


网络配置命令:

brctl addbr br0
ip link set br0 up

ip addr add 172.27.208.238/25 dev br0; \
ip addr del 172.27.208.238/25 dev eth1; \
brctl addif br0 eth1; \
ip route del default; \
ip route add default via 172.27.208.129 dev br0

pid=$(docker inspect --format '{{.State.Pid}}' test1)
mkdir -p /var/run/netns
ln -s /proc/$pid/ns/net /var/run/netns/$pid

ip link add veth-a type veth peer name veth-b
brctl addif br0 veth-a
ip link set veth-a up

ip link set veth-b netns $pid
ip netns exec $pid ip link set dev veth-b name eth0
ip netns exec $pid ip link set eth0 up
ip netns exec $pid ip addr add 172.27.208.135/25 dev eth0
ip netns exec $pid ip route add default via 172.27.208.129


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐