Docker核心技术
Docker底层依赖的核心技术主要包括Linux操作系统的命名空间(Namespace)、控制组(ControlGroup)、联合文件系统(UnionFileSystem)和Linux网路虚拟化支持。
Docker网路管理
VethPair(VirtualEthernetPair)是一个虚拟网路通道,就是将来自通道一端的数据传输到另外一端。
docker0并不是正常的网路插口,它只是一个在绑定到这里面的其他网卡间手动转发数据包的虚拟以太集线器。
它可以使容器与主机相互通信。每次Docker创建一个容器,它还会创建一对对等插口(peerinterface),类似于一个管子的两端-在那边可以收到另一边发送的数据包。Docker会将对等插口中的一个做为eth0插口联接到容器上,并使用类似于vethAQI2QT这样的唯一名称来持有另一个linux服务器维护,该名称取决于主机的命名空间。通过将所有veth*插口绑定到docker0桥接网卡上,Docker在主机和所有Docker容器间创建一个共享的虚拟子网。
Docker默认的3种网路:
其中默认的是bridge驱动网路,也是容器创建时默认的网路管理方法。
都是非集群环境下Docker提供的默认网路。
dockernetworkls
bridge(桥接)网路和overlay(覆盖)网路
在DockerSwarm集群环境下linux网络分层,不仅这3中默认网路之外,Docker还提供了docker_gwbridge和ingress两种默认网路。
DockerEngine本地支持bridge(桥接)网路和overlay(覆盖)网路。
1).桥接网路仅限于运行DockerEngine的单个主机。
2).覆盖网路可以包含多个主机,是一个更中级的主题。
overlay网路下的不同主机之间就才能互相访问linux网络分层,但显然出口还是在docker_gwbridge集线器。
Overlay网路是在现有的网路构架之上建立一个不同主机容器间的二层虚拟网路,以实现容器跨主机的通讯,多用于规模比较大的容器集群环境。
Docker的Overlay网路须要基于通配符储存来实现,K-V储存上面储存了各个主机上容器和网路相关的信息。
如上图,Overlay将多主机中的容器界定到一个虚拟的二层网路中linux多线程,以实现容器的跨主机通讯。
DockerOverlay网路的建立支持VxLAN技术,将二层的MAC地址封装到4层的UDP数据包中,只要传输层端到端可达,则可以基于VxLAN隧洞实现容器间大二层网路的建立,这也彰显了Overlay网路与底层网路基础构架的相对无关性。