1、Docker Daemon 网络配置
Docker Daemon 桥接模式示意图如下:
1.1、Docker Daemon 网络配置接口
*** Docker 管理员配置 Docker 的网络环境,可以在 Docker Daemon 启动时,通过 Docker 提供的接口来完成。换言之,可以使用 docker 二进制可执行文件,运行 docker -d 并添加相应的 flag 参数来完成。***
其中涉及的 flag 参数有五个:
- EnableIptables:确保 Docker 对于宿主机上的 iptables 规则拥有添加权限;
- EnableIpForward:确保 net.ipv4.ip_forward 可以使用,使得多网络接口设备模式下,数据报可以在网络设备之间转发;
- BridgeIP:在 Docker Daemon 启动过程中,为网络环境中的网桥配置 CIDR 网络地址;
- BridgeIface:为 Docker 网络环境指定具体的通信网桥,若 BridgeIface 的值为”none”,则说明不需要为 Docker Container 创建网桥服务,关闭 Docker Container 的网络能力;
- InterContainerCommunication:确保 Docker 容器之间可以完成通信。
1.2、Docker Daemon 网络初始化
Docker Daemon 网络初始化的流程总体而言,主要是根据解析 flag 参数来决定到底建立哪种类型的网络环境。
1.3、创建 Docker 网桥
1.3.1、提取环境变量
1.3.2、确定 Docker 网桥设备名
1.3.3、查找 bridgeIface 网桥设备:已创建或未创建两种情况
*** createBridge 函数实现过程的主要步骤为:***
(1) 确定网桥设备 docker0 的 IP 地址;
(2) 通过 createBridgeIface 函数创建 docker0 网桥设备,并为网桥设备分配随机的 MAC 地址;
(3) 将第一步中已经确定的 IP 地址,添加给新创建的 docker0 网桥设备;
(4) 启动 docker0 网桥设备。
1.3.4、获取网桥设备的网络地址
1.3.5、配置 Docker Daemon 的 iptables
1.3.6、配置网络设备间数据报转发功能
1.3.7、注册网络 Handler
*** 注册 4 个与网络相关的 Handler: ***
1)allocate_interface——Docker Container 分配网络设备
2)release_interface——回收 Docker Container 网络设备
3)allocate_port——为 Docker Container 分配端口资源
4)link——以及为 Docker Container 间执行 link 操作