Docker网络之单host网络及使用案例

2020-06-17 06:55:23易采站长站整理

前言

前面总结了Docker基础以及Docker存储相关知识,今天来总结一下Docker单主机网络的相关知识。毋庸置疑,网络绝对是任何系统的核心,他在Docker中也占有重要的作用。

一、Docker默认网络

在新安装docker的主机上执行


docker network ls

便能看到docker默认安装的所有网络,分别是none网络、host网络和bridge网络。

1.1 none 网络

none网络就是什么都没有的网络。挂在这个网络下的容器除了lo,没有其他任何网卡。容器run时,可以通过添加–network=none参数来指定该容器使用none网络。那么这样一个只有lo的网络有什么用呢?此处CloudMan指出:

none网络应用与隔离场景,一些对安全性要求高并且不需要联网的应用可以使用none网络。

比如某个容器的唯一用途是生成随机密码,就可以放到none网络中避免密码被窃取。

我可以理解none网络肯定是用于隔离的,然而我好奇的是生成的随机密码如何发送到外部呢?如何被外部调用呢?这是我没有想明白的问题。有知道的希望不吝赐教!谢谢!

1.2 host 网络

连接到host网络的容器共享Docker宿主机的网络栈,即容器的网络配置与host宿主机完全一样。可以通过添加–network=host参数来指定该容器使用host网络。

在容器中可以看到host的所有网卡,并且连hostname也是host的。host网络的使用场景又是什么呢?

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

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

相当于该容器拥有了host主机的网络,那么其ip等配置也相同,相当于主机中套了一个与外部一模一样的容器,可以直接通过host的ip地址来访问该容器。

1.3 bridge 网络

在不指定–network参数或者–network=bridge的情况下创建的容器其网络类型都是bridge。

Docker在安装时会在宿主机上创建名为docker0的网桥,所谓网桥相当于一个虚拟交换机,如果使用上述两种方式run的容器都会挂到docker0上。

容器和docker0之间通过veth进行连接,veth相当于一根虚拟网线,连接容器和虚拟交换机,这样就使得docker0与容器连通了。

二、自定义容器网络

理论上有了上述三种网络已经足够满足普通用户的需求,但是有时候可能用户需要指定自己的网络,以此来适应某些配置,如ip地址规划等等。