写在前面的话
Hi,小伙伴们。继上期分享了如何用Docker部署自己的第一个SpringBoot应用之后,爱折腾的Storm还是耐不住性子,又折腾了一下SpringCloud应用的部署。在不使用Docker部署的时候呢,在本地模拟搭建一个高可用的Eureka集群是相当简单的。但是使用Docker部署的时候遇到了节点无法通信的问题,折腾半天终于完美解决这个问题,以此记录一下。
原因猜测
在项目中,我使用的是域名来区分不同的Eureka服务,本地Host绑定这些域名解析为127.0.0.1 但是部署到容易当中的时候就无法进行通信了,因此需要使用其他方法来建立通信。更改配置,使用ip并不是我的意图,虽然在实际生产环境是可以的,但是硬编码的风格显然不是最好的方案。
解决方案
经过资料的收集和整理,发现docker-compose能够解决这个问题,它能够自定义编排要发布的容易,包括容器依赖和通信并且统一部署。因此我在此使用它来解决上述的部署问题。
准备工作
首先我们需要构建Eureka服务,使用不同的端口,具体源码见我的开源项目
- SpringBoot-Cloud-Learning:
分别绑定配置文件中的三个域名到host,解析到127.0.0.1
尝试直接启动这单个SpringBoot应用,是可以直接发布成分布式高可用Eureka集群的。
进入http://eureka-server-01:1001/eureka/可以看到相应的监控界面
接下来我们用Docker单独构建这三个应用,具体方法可以看我上一期的文章。 - 使用Docker部署SpringBoot应用:
主要工作
我们需要在项目根目录下新建一个docker文件夹,用于存储Docker部署相关的文件,在此文件夹下新建一个docker-compose.yml文件,内容如下
version: "2.1"
services:
eureka-server-01:
image: eureka-server-01
hostname: eureka-server-01
networks:
- eureka-net
ports:
- "1001:1001"
eureka-server-02:
image: eureka-server-02
hostname: eureka-server-02
networks:
- eureka-net
ports:
- "1002:1002"
eureka-server-03:
image: eureka-server-03
hostname: eureka-server-03
networks:
- eureka-net
ports:
- "1003:1003"
这里的配置主要是编排我们将要发布的三个容器基本信息,包括容器的名称,镜像名称,host名称,端口等等。这样我们统一发布这些应用,应用之间就可以相互通信了,而不是网络隔离的状态。
最后我们在idea中运行这个文件,不出意外的话,我们就可以看到三个容器正常部署并且输出打印日志。同样的,访问http://eureka-server-01:1001/eureka/ 查看是否有挂载3个节点,并且都处于正常状态。到这里高可用Eureka高可用服务注册与发现中心得Docker部署搭建就完成啦,这个也是同样可以用于Feign等Eureka客户端的部署使用过程当中的,大家可以自行尝试。我的项目当中已经为大家准备好了Demo,可以自行查看。我们下期见吧。
来源:CSDN
作者:Aspireforever
链接:https://blog.csdn.net/qq_34975624/article/details/103457841