spring eureka集群+spring boot 微服务,容器化部署示例

1.搭建eureka docker集群

eureka微服务搭建方法可百度(例如 https://www.cnblogs.com/gudi/p/8645869.html)。这里给出一些eureka在docker 中部署的重要配置。

(1)创建eureka容器

参考如下指令,在不同的服务器上创建eureka容器。(提前在docker hup 上下载好java:8的镜像)

 docker run -d --name registry1 -p 8762:8080 --log-opt max-size=10m --log-opt max-file=3 -v /usr/local/project/docker/registry:/usr/src/myapp -w /usr/src/myapp -v /etc/localtime:/etc/localtime:ro --restart=always  java:8 sh start.sh
 docker run -d --name registry1 -p 8762:8080 --log-opt max-size=10m --log-opt max-file=3 -v /usr/local/project/docker/registry:/usr/src/myapp -w /usr/src/myapp -v /etc/localtime:/etc/localtime:ro --restart=always  java:8 sh start.sh

注意:

-p 8762:8080:该docker 容器网络默认采用桥接方式。对外暴露8762端口。docker 会为容器虚拟一个网卡,在容器内部使用该虚拟IP以及对应端口(8080).若配置 --net=host则使用宿主机的IP及端口。

-w /usr/src/myapp :docker运行各种指令的默认路径

-v /etc/localtime:/etc/localtime:ro :同步系统时间到容器

(2)在jar包挂载点的目录(/usr/local/project/docker/registry)下放一个启动脚本,例如 start.sh 。原因是启动时可以配置各种参数,如堆内存,这两灵活一些。

start.sh

#!/bin/sh
java -Xms128m -Xmx150m -Duser.timezone=GMT+8 -jar app.jar --server.port=8080 --spring.profiles.active=test

--server.port=8080:对应 -p 里的8080端口

-Duser.timezone=GMT+8 :修改jvm的运行时间。因为有时候发现系统时间已同步到容器,容器内部用date命令查时间也对,但是程序内部取时间总是不对,经常是查8个小时。

(2)eureka重要配置参数

之前在将eureka服务放入docker 时遇到一些问题,主要是因为进入容器后环境变了,一些参数需要做出调整。贴出排至参数以供参考。

#eureka服务名称(DS Replicas)
eureka.instance.hostname=registry1
#要注册的集群服务地址
eureka.client.service-url.defaultZone=http://192.168.1.102:8762/eureka/
#重要:注册服务时 指定IP地址
eureka.instance.ip-address=192.168.1.101
#重要:注册服务时手动指定该服务的IP地址
eureka.instance.prefer-ip-address= true
#如下两个参数要配置成ture否则不会被注册
eureka.client.registerWithEureka=true
eureka.client.fetchRegistry=true
#服务名称(Instances currently registered with Eureka)
spring.application.name=spring-cloud-eureka
#指定该eureka注册时对方访问自己时使用的端口号
eureka.instance.nonSecurePort=9001

其他配置参数参考:https://www.jianshu.com/p/e2bebfb0d075  https://www.cnblogs.com/fangfuhai/p/7070325.html

(3)启动服务

成功注册到另一个eureka

获取要注册的目标eureka服务中的微服务注册信息。

2.添加微服务容器并注册到对应eureka

(1)创建docker 容器

这里提供两个创建容器命令,一个是java环境的,提供运行微服务jar包的环境,如安装的了指定版本的jdk。另一个是创建tomcat容器的。

java

docker pull java:8 #下载java8的docker镜像

docker run -d --name member -p 9000:8080 --log-opt max-size=10m --log-opt max-file=3 -v /usr/local/project/docker/member:/usr/src/myapp -w /usr/src/myapp -v /etc/localtime:/etc/localtime:ro --restart=always  java:8 sh start.sh

注意:

tomcat

docker pull tomcat:8.0.53-jre8 #下载内置jre 8的tomcat运行环境(如果是 tomcat:8的话里面的jre版本是7!!从启动log里可以看出,如果你的程序是居于更高版本的,则你的war包只解压不启动,似乎也没什么提示。。)。

 

docker run -d -p 9111:8080 --restart=always -v /usr/local/project/docker/tomcat/cms/webapps:/usr/local/tomcat/webapps -v /usr/local/project/docker/tomcat/cms/logs:/usr/local/tomcat/logs  -v /etc/localtime:/etc/localtime:ro -e JAVA_OPTS='-Dsome.property=value' -e  Xmx=256m   --name=cms tomcat:8.0.53-jre8

-e JAVA_OPTS='-Dsome.property=value' -e  Xmx=256m :据说这个命令可以限制堆内存。

-v /usr/local/project/docker/tomcat/cms/webapps:/usr/local/tomcat/webapps:设置war包的挂载点。

(2)配置微服务注册eureka参数

eureka.client.service-url.defaultZone=http://192.168.1.101:8762/eureka/
eureka.instance.instance-id=192.168.1.101:9001
eureka.instance.ip-address=192.168.1.101
eureka.instance.prefer-ip-address= true
eureka.instance.nonSecurePort=9001

这里还是要手动指定 通过eureka访问本微服务时使用的IP和端口号。因为咱们的容器使用的是桥接方式,默认情况下,容器里的微服务会自动获取容器内部的ip和端口,而取出来的是docker 容器的虚拟网卡的IP和用户定义的内部端口号,到时别的服务找不到自己。

 

到此就实现的eureka集群搭建以及spring boot 微服务的容器化管理。这样做确实不够优雅,但是在需要管理的服务不是特别多,且服务的位置环境相对固定的情况下还是能用的。

 

 

一些参考

https://blog.csdn.net/tianyaleixiaowu/article/details/78184793

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值