一、理论:Docker 如何实现跨主机网络?
1、认识 Docker Overlay
Overlay 网络
是为特定目的在物理(底层)网络之上创建的逻辑网络。Docker
可以创建容器之间的 Overlay 网络
,从而实现跨主机的容器之间的沟通
也就是说,只要几台物理机之间本身是可以通信的,那么只要在这些机器上建立好一个 Overlay 网络
把需要相互通讯的容器,直接部署在这个网络之上,最终的效果就类似于将这些容器部署在同一台物理机一样,进行任意通信啦
比如说我们需要实现一个 Elasticsearch
集群,那么我们只需要把各个节点部署在预先创建好的一个 Overlay 网络
上就可以实现通信啦
2、稍微具体一点
你可能还会有疑惑,为什么 Overlay 网络
就可以实现多台物理机之间的网络互通呢?实际上它是在 Docker
集群节点间的加入了一层虚拟网络,它有独立的虚拟网段。Docker
容器发送的请求,会先发送到虚拟子网,再由虚拟子网包装为宿主机的真实网址进行发送
3、Swarm 是什么?
而今天要介绍的 Docker Swarm
,则是 Docker Overlay
网络的一种简易实现方式,它是 Docker
开发的容器集群管理工具, 与 Docker API
兼容性很好
并且 Linux
中安装了 Docker
,也默认会安装 Swarm
。 因此,在这里,我们采用 Swarm
实现 集群间的网络通信
接下来,让我们通过实战真正了解一下使用Docker Swarm
如何实现Docker 容器的跨主机通信吧
二、实战一:实现集群之间的通信
还是拿那个老例子来讲一下
在文章Docker篇(五):容器之间该如何通讯?中,我们分别将 Spring Boot 后端程序 druid_demo
和 mariadb
分别运行在不同容器中,成功实现了他们之间的通讯
那么,接下来,我们将他们分别部署在两台机器上
机器配置如下:
序号 | 节点角色 | ip地址 | 容器名称 |
---|---|---|---|
说明:使用 Swarm 建立跨主机的网络,实际上总共分为如下几步:
-
在 manager 创建一个
Swarm
集群 -
将其他集群分别加进来
-
在 manager 创建一个
Overlay
网络 -
启动各个容器时,指定这个
Overlay
网络
具体,往下看
1、在 manager 节点创建 Swarm 集群
执行命令:
docker swarm init --advertise-addr=10.10.10.100
效果如下:
docker swarm init --advertise-addr=10.10.10.100 [root@localhost ~]# docker swarm init --advertise-addr=10.10.10.100 Swarm initialized: current node (maw28ll7mlxuwp47z5c5vo2v1) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-2bdwwlo8xvdskil05itg66l63dpi931oqnt5gvehlnf1it1auo-2uvypbiu0hpcn1e06hrhctbe8 10.10.10.100:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
显示了 worker节点加入到该集群的命令,只需要执行
docker swarm join --token SWMTKN-1-2bdwwlo8xvdskil05itg66l63dpi931oqnt5gvehlnf1it1auo-2uvypbiu0hpcn1e06hrhctbe8 10.10.10.100:2377
即可
2、在 worker 节点上执行命令,将自己加入集群
docker swarm join --token SWMTKN-1-2bdwwlo8xvdskil05itg66l63dpi931oqnt5gvehlnf1it1auo-2uvypbiu0hpcn1e06hrhctbe8 10.10.10.100:2377
3、在 manager 节点,查看当前网络集群的节点情况
执行 docker node ls
4、在 manager 节点,创建 overlay 网络
docker network create -d overl