Hi,小伙伴们。继上期分享了如何用Docker部署自己的第一个SpringBoot应用之后,爱折腾的Storm还是耐不住性子,又折腾了一下SpringCloud应用的部署。在不使用Docker部署的时候呢,在本地模拟搭建一个高可用的Eureka集群是相当简单的。但是使用Docker部署的时候遇到了节点无法通信的问题,折腾半天终于完美解决这个问题,以此记录一下。
在项目中,我使用的是域名来区分不同的Eureka服务,本地Host绑定这些域名解析为127.0.0.1 但是部署到容易当中的时候就无法进行通信了,因此需要使用其他方法来建立通信。更改配置,使用ip并不是我的意图,虽然在实际生产环境是可以的,但是硬编码的风格显然不是最好的方案。
经过资料的收集和整理,发现docker-compose能够解决这个问题,它能够自定义编排要发布的容易,包括容器依赖和通信并且统一部署。因此我在此使用它来解决上述的部署问题。
首先我们需要构建Eureka服务,使用不同的端口,具体源码见我的开源项目
我们需要在项目根目录下新建一个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,可以自行查看。我们下期见吧。