1. Docker 单主机容器通信的四种方式
(1).host 模式
![](https://img-blog.csdnimg.cn/092eb33451134df0b29c213dc9897870.png)
(2) bridge 模式
![](https://img-blog.csdnimg.cn/82f00c6dcd244d79b728d0528c5c3b7f.png)
(3) none 模式
(4) container 模式
![](https://img-blog.csdnimg.cn/bf51ca04f9aa42c3a297cc7f8373d110.png)
2. Docker 跨主机容器通信
(1) 基于隧道的 overlay 网络:
(2) 基于包封装的 overlay 网络:
(3) 基于三层实现 SDN 网络:
利用 busybox 镜像建立容器,容器名称为 test_busybox1 和 test_busybox2,将网络模式设置为 none,将容器 test_busybox1 和 test_busybox2 的 IP 分别设置为 172.17.0.101 和 172.17.0.102,并实现两容器互通。
1. 建立容器 test_busybox1,设置网络模式为 none
进入容器 test_busybox1,查知该容器无 IP 地址。
Busybox 是一个集成了 100 多个最常用 Linux 命令的软件工具箱,他在单一的可执行文件中提供了精简
的 UNIX 工具集。该工具箱中包含了常见简单实用的工具如 cat、echo、grep、find、mount、telnet 等。
Busybox 是 Linux 系统的瑞士军刀。
(2) 建立容器 test_busybox2,设置网络模式为 none。
进入容器 test_busybox2,查知该容器无 IP 地址。
2. 配置容器 IP 地址
(1) 为容器 test_busybox1 设置 IP 地址 172.17.0.101(此处无需按学号要求更改 IP)。
① 查看虚拟网桥
② 安装网桥工具包
③ 添加一个 veth 对,指定 veth0 的对端是 veth1
④ 将 veth0 加入网桥
说明:从上述显示结果看出,veth0 已经加入网桥 docker0
⑤ 启动新端口 veth0
⑥ 查看容器 test_busybox1 的进程号
⑦ 制作软连接
⑧ 将 veth1 端口连接容器网络
⑨ 将端口 veth1 重命名为 eth0
⑩ 启用端口 eth0
⑪ 在 namespace 中指定 IP 地址及网关
在宿主机和容器内分别创建一个虚拟接口,并让它们彼此连通,这样的一对接口叫做 veth pair。它的 作用就是要把从一个 network namespace 发出的数据包转发到另一个 network namespace。而仅有 veth pair 设备,容器还是无法访问网络的。因为容器发出的数据包,实质上直接进入了 veth 设备的协议栈里。如果 容器需要访问网络,需要使用 bridge 等技术,将 VETH 接收到的数据包通过某种方式转发出去。
(2) 为容器 test_busybox2 设置 IP 地址 172.17.0.102(此处无需按学号要求更改 IP)。
① 添加一个 veth 对,指定 veth2 的对端是 veth3
② 将 veth2 加入网桥
说明:从上述显示结果看出,veth2 已经加入网桥 docker0
③ 启动新端口 veth2
④ 查看容器 test_busybox2 的进程号
⑤ 制作软连接
⑥ 将 veth3 端口连接容器网络
⑦ 将端口 veth3 重命名为 eth0
⑧ 启用端口 eth0
⑨ 在 namespace 中指定 IP 地址及网关
3. 测试容器网络互通情况
(1) 进入容器 test_busybox1,测试容器与容器、容器与宿主机、容器与外部之间是否互通。
(2) 进入容器 test_busybox2,测试容器与容器、容器与宿主机、容器与外部之间是否互通。