1. 桥接网络模式与端口映射模式
桥接模式,多个宿主机位于同一个局域网,将每一个宿主机上的容器网络桥接到宿主机网络中,容器和宿主机同在一个局域网中互相通信。每台宿主机上的容器都直接从局域网中获取IP地址,容易导致IP地址冲突。
端口映射模式,是将容器的服务所运行的端口映射到宿主机的某一个端口,然后其他的容器通过宿主机的对应端口进行访问。只要宿主机间能互相通信,容器之间就能通过宿主机的指定端口进行通信。但是这种方式需要对每一个容器都映射端口,而且宿主机的端口也有限。
2. Docker 网络驱动
2.1 Overlay 网络
Overlay网络依赖额外的服务和配置,配置较为复杂,我们在后续容器云平台一节会再次提到它的应用。
2.2 Macvlan 网络
macvlan 是 Linux 的内核模块,是一种网卡虚拟化技术,功能是允许在同一个物理网卡上虚拟出多个网卡,通过不同的MAC地址在数据链路层进行网络数据的转发,一块网卡上配置多个 MAC 地址,每个interface 可以配置自己的 IP。
Docker 的 macvlan 网络使用了 macvlan 驱动。 在物理网络拓扑结构上看,每张虚拟网卡都是一个单独的网口。
我们需要两台装好 Docker 服务的 Linux 虚拟机,并且虚拟机的网络要互通。
- 创建 macvlan 网络,在两个节点上都进行此操作:
- 1
- macvlan 是 kernel 的模块名;
- 192.168.2.0/24是宿主机所在网络的网段;
- 192.168.2.1是网关;
- eth1 是 Docker 宿主机(两台虚拟机)接入192.168.1.0/24 的物理网口。
- 创建容器并指定 IP:
容器b1:
- 1
容器b2:
- 1
- 测试容器通信
容器b1:
- 1
容器b2:
- 1
3. 小结
Docker 的容器跨主机通信功能是比较薄弱的,如果有需要,将上面的方案大致了解一下即可。在实际生产中,跨宿主机节点的 Docker 容器通信都依托在容器编排平台(如 k8s)网络配置,大家学完 Docker 之后一定有机会去深入了解的。