Docker网络模式选择问题


目前,我所知道的Docker有4中网络模式:none、桥接、host、-p映射,其中none,针对企业服务的话,一般不用,-p映射,对性能影响较大,Host又不安全,那么应该更多的选择是桥接了,我也见过很多公司使用的是桥接模式,但是官网上推荐一个服务一个容器,如果使用桥接模式,容器和宿主机都拥有同网段的IP地址,那样的话,是不是对IP地址的浪费会非常大??是这样吗?
已邀请:

tuxknight

赞同来自: 陈柏 glovee hello_liuyi AKAK kazaff


不知道你看过docker run这个命令的文档没,
--net 有 none bridge host container 四种,没有你说的-p映射。
bridge是默认的方式,而且跟你理解的不一样,docker会在host上创建一个网桥设备一般被命名为docker0,在docker run --net bridge的时候,为container创建一个对等接口(peer interface),对等接口的一端加到docker0中,另一端就是container里的eth0。

这样的结果就是同一个host上的container组成了一个与host不冲突的子网。通过NAT的方式与外部通信。

另外,对于IP地址浪费的问题,,私网IP段的容量可不是闹着玩的,A类私网在企业中绝对够你用的。。

MapleWang

赞同来自: hello_liuyi psl77586 kazaff


host模式为什么不安全?bridge为什么又安全了呢?这个是不能这么下结论的,完全取决于你怎么使用它们。docker默认都是使用iptables/netfilter去对ip stack中的包进行处理的,bridge模式下,docker会在iptables中添加规则使得外部不能访问container内部网络,除非container对外映射端口,docker会添加额外规则来放行这些流量,这也许是你觉得它安全的原因,但是host和bridge模式下container都是使用同一个kernel的,所以host模式下你当然可以自己去配置iptables规则来保证网络的安全,当然这个过程是要自己完成的。我见过很多生产环境都是使用host模式的,因为它们的目的是对应用进程及其相应的环境进行隔离,便于运维(比如升级),但是对于网络要求统一管理,所以自然而然使用了host模式。所以生产环境中具体使用什么模式完全取决于部署的需求,没有什么绝对的配置。
另外,bridge模式下,你如果默认使用的是docker0, container的ip网段和宿主机肯定是不同的,上面已经有人解释清楚了这个问题。

同求答案。。。。

要回复问题请先登录注册