Docker #none #host #bridge网络

文章2021-03-26
Docker #none #host #bridge网络-下一朵云

#Docker安装的时候会自动在host上创建三种网络,可以用docker network ls 查看,如下图

Docker #none #host #bridge网络-下一朵云

##none 网络

none网络就是什么网路都没有的网络,挂在这个网络下的容器除了lo,没有其他任何网卡。创建容器的时候可以用 – – network=none 指定试用none网络。

我们不禁会问,这样一个网络封闭的容器有什么用呢?其实真的有真实场景的,封闭意味着隔离,一些对安全要求高且不需要访问网络的应用可以用none网络,比如某个容器的用途是生成随机密码,就可以放到none网络避免生成的密码被窃取。

##host网络

连接到host网络的容器共享host的网络栈,容器的网络配置与host的完全一样。可以通过– – network=host指定容器使用host网络。

直接试用host网络的最大好处就是性能,如果容器对网络传输效率有较高的要求则可以选择host网络,不便之处就是牺牲灵活性,比如要考虑端口冲突问题,host已经使用的端口容器就不能再使用了

host网络的另一个用处就是让容器可以直接配置host的网络,不如某些跨host的网络解决方案,其本身也是以容器的方式运行的,这些方案需要容器对网络进行配置,比如管理iptables。

##bridge网络

Docker安装的时候会创建一个名为docker0的linux bridge。如果不指定- – network,创建的容器默认都会挂到docker0上,如下图

Docker #none #host #bridge网络-下一朵云
#如果 brctl show提示command not found,请安装bridge-utils软件包

一个网络接口veth32aa6b0 被挂到了docker0上, veth32aa6b0 就是容器的虚拟网卡。

让我们通过docker network inspect bridge看一下bridge网络的配置信息,如下图

Docker #none #host #bridge网络-下一朵云

bridge网络配置的subnet是172.17.0.0/16并且网关是172.17.0.1。那么这个网关在哪里呢?就是docker0,ifconfig docker0查看信息如下图

Docker #none #host #bridge网络-下一朵云

容器创建时,docker会自动从172.17.0.0/16中分配一个IP。

##user-defined网络

除了none、host、bridge,用户也可以根据业务需要穿建user-defined网络。

传送门《Docker user-defined网络》