Docker容器的跨主机通讯

作者: 虎虎 分类: devops 发布时间: 2023-04-18 17:48 阅读次数:528

一、理论: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容器的跨主机通信

操作步骤如下:

1.在manager节点创建Swarm集群

执行命令:

docker swarm init --advertise-addr=10.10.10.1

2.在worker节点上执行命令,将自己加入集群

docker swarm join --token 上面生成的token 10.10.10.10.1:2377

3.在manager节点查看当前网络集群的节点情况

docker node ls

4.在manager节点,创建overlay网络

#说明:--attachable声明当前创建的网络为:其他节点可以访问的网络
docker network create -d overlay --attachable demo-net

5.在worker节点的网络列表,是否多了这个网络

#说明:正常情况,执行完第4步之后 ,这里就会在原来的基础上多一个demo-net网络
docker network ls

6.在worker节点启动mariadb容器,指定该overlay网络

#说明:--net=demo:指定该集群间的网络(overlay):demo
docker run -itd -v /usr/local/mysqldata:/var/lib/mysql -h mariadb --name=mariadb --net=demo-net --priviledged=true mariadb:latest /sbin/init

7.在manager节点,启动durid_demo程序

接下来,在manager节点,启动Spring boot后端程序druid_demo的容器,并指定demo网络

#说明如果网站接口返回正常,说明我们已经实现了druid_demo应用程序容器与mariadb容器之间的通讯
docker run -it -p 8888:8080 -h druid_demo --name druid_demo --net=demo --privileged=true druid_demo:0.0.1-SNAPSHOT /sbin/init

8.退出集群

要使某个节点退出集群网络的操作:

docker swarm leave
不足之处望指正

发表评论

邮箱地址不会被公开。 必填项已用*标注

标签云