您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Docker容器跨主机通信

之前的章节中,所有有关数据通信的部分,都是在单一宿主机上,如果不同的容器部署在不同的宿主机,他们之间该如何通信呢?

本节中,我们介绍以下几种方式:

桥接网络;

端口映射;

Docker网络驱动: 1. Overlay,2. Macvlan。

Tips:还有一些第三方的案,如 ,OpenvSwitch 等,有兴趣可以自行查看相关文档。

Tips:桥接宿主机网络与 端口映射模式的设定参考 Docker 网络 部分。

桥接模式,多个宿主机位于同局域网,将每宿主机上的容器网络桥接到宿主机网络中,容器和宿主机同在局域网中互相通信。每台宿主机上的容器都直接从局域网中IP地址,容易导致IP地址冲突。

端口映射模式,是将容器的服务所运行的端口映射到宿主机的某端口,然后其他的容器通过宿主机的对应端口进行访问。只要宿主机间能互相通信,容器之间就能通过宿主机的指定端口进行通信。但是这种方式需要对每容器都映射端口,而且宿主机的端口也有限。

Overlay网络依赖额外的服务和配置,配置较为复杂,我们在后续容器云平台一节会再次提到它的应用。

macvlan 是 Linux 的内核模块,是一种网卡虚拟化技术,是允许在同物理网卡上虚拟出多个网卡,通过不同的MAC地址在数据链路层进行网络数据的转发,一块网卡上配置多个 MAC 地址,每个interface 可以配置自己的 IP。

Docker 的 macvlan 网络使用了 macvlan 驱动。 在物理网络拓扑结构上看,每张虚拟网卡都是单独的网口。

我们需要两台装好 Docker 服务的 Linux 虚拟机,并且虚拟机的网络要互通。

docker network create -d macvlan --=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth1 -o macvlan_mode=bridge macvlan_net 

容器b1:

docker run -it -d --net macvlan_net --ip=192.168.1.101 --name b1 busy@R_581_2@

容器b2:

docker run -it -d --net macvlan_net --ip=192.168.1.102 --name b2 busy@R_581_2@

容器b1:

docker exec -it b1 ping 192.168.1.102

容器b2:

docker exec -it b2 ping 192.168.1.101

Docker 的容器跨主机通信是比较薄弱的,如果有需要,将上面的方案大致了解一下即可。在实际生产中,跨宿主机节点的 Docker 容器通信都依托在容器编排平台(如 k8s)网络配置,大家学完 Docker 之后一定有机会去深入了解的。


联系我
置顶