“深入浅出深入浅出”来解读来解读Docker网络核心原理网络核心原理
前言
之前笔者写了有些关于dokcer的各种相关技术的文章,唯独Docker网络这一块没有具体的来分享。后期笔者会陆续更新
Docker集群以及Docker高级实践的文章,所以在此之前必须要和大家一起来解读一下Docker网络原理。
就好比中国武术一样:学招数,会的只是一时的方法;练内功,才是受益终生长久之计。认真看下去你会有收获的,我们一起
来把docker的内功修练好。
在深入Docker内部的网络原理之前,我们先从一个用户的角度来直观感受一下Docker的网络架构和基本操作是怎么样的。
Docker网络架构
Docker在1.9版本中(现在都1.17了)引入了一整套docker network子命令和跨主机网络支持。这允许用户可以根据他们应用
的拓扑结构创建虚拟网络并将容器接入其所对应的网络。
其实,早在Docker1.7版本中,网络部分代码就已经被抽离并单独成为了Docker的网络库,即libnetwork。在此之后,容器的
网络模式也被抽像变成了统一接口的驱动。
为了标准化网络的驱动开发步骤和支持多种网络驱动,Docker公司在libnetwork中使用了CNM(Container Network
Model)。CNM定义了构建容器虚拟化网络的模型。同时还提供了可以用于开发多种网络驱动的标准化接口和组件。
libnetwork和Docker daemon及各个网络驱动的关系可以通过下面的图进行形象的表示。
如上图所示,Docker daemon通过调用libnetwork对外提供的API完成网络的创建和管理等功能。libnetwrok中则使用了CNM来
完成网络功能的提供。而CNM中主要有沙盒(sandbox)、端点(endpoint)、网络(network)这3种组件。