rancher2+docker+SpringCloud+jenkins+redis集群+mysql主从搭建:八、spring eureka 创建dockerfile并运行
添加(docker/Dockerfile)或修改:springcloud-docker-cluster/spring-base/spring-eureka/src/main/docker/Dockerfile
/root/111/gitee_cangku/rancher_springcloud/为本地仓库的路径:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
由于直接下载java:8镜像jenkins会卡主~这里采取把镜像下载下来传到私有仓库,dockerfile修改从私有仓库获取 docker pull java:8 docker tag java:8 192.168.109.137:5000/java:8 docker push 192.168.109.137:5000/java:8
vim /root/111/gitee_cangku/rancher_springcloud/spring-base/spring-eureka/src/main/docker/Dockerfile
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
FROM 192.168.109.137:5000/java:8 RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone #将本地文件夹挂载到当前容器 #VOLUME /tmp ADD spring-eureka-0.0.1-SNAPSHOT.jar app.jar #RUN ["/bin/bash","-c","touch /app.jar"] #指定JAVA 环境变量 #ENV JAVA_HOME /jdk/jre #ENV PATH $PATH:$JAVA_HOME/bin #ENV CLASSPATH .:$JAVA_HOME/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar #开放8000端口 EXPOSE 8000 #配置容器启动后执行的命令 ENTRYPOINT ["java","-jar","/app.jar"]
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
修改代码中的dockerfile文件(并重新提交、打包,可以和下面的提交一起) 并修改: /root/111/gitee_cangku/rancher_springcloud/spring-base/spring-eureka/src/main/resources/目录下的 相互注册:即application.yml使用的是active: 141(即application-141.yml),如果选择部署机器标签为138,那么application-141.yml中hostname:ip就应该为139机器 这里我的安排是:141 对应 application-141.yml (hostname:192.168.109.138)部署机器为139 application-141.yml application-142.yml 中的hostname:ip 地址
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
spring: profiles: # active: 141 active: 142
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
server: port: 8000 eureka: client: service-url: defaultZone: http://${customConfig.security.username}:${customConfig.security.password}@${customConfig.eureka.server.hostname}:${server.port}/eureka/ register-with-eureka: true fetch-registry: true server: peer-node-read-timeout-ms: 2000 #读取对等节点服务器复制的超时的时间,单位为毫秒,默认为200 spring: application: name: spring-eureka security: user: name: ${customConfig.security.username} password: ${customConfig.security.password} management: endpoint: health: show-details: always #健康情况-展示全部详情,否则只展示status信息 customConfig: eureka: server: #eureka的配置 hostname: 192.168.109.138 security: #security的配置 username: admin password: admin123 #Eureka Server在启动的时候会创建一个定时任务,默认每隔一段时间(默认为60秒)将当前清单中超时(默认为90秒)没有续约的服务剔除出去。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
server: port: 8000 eureka: client: service-url: defaultZone: http://${customConfig.security.username}:${customConfig.security.password}@${customConfig.eureka.server.hostname}:${server.port}/eureka/ register-with-eureka: true fetch-registry: true server: peer-node-read-timeout-ms: 2000 #读取对等节点服务器复制的超时的时间,单位为毫秒,默认为200 spring: application: name: spring-eureka security: user: name: ${customConfig.security.username} password: ${customConfig.security.password} management: endpoint: health: show-details: always #健康情况-展示全部详情,否则只展示status信息 customConfig: eureka: server: #eureka的配置 hostname: 192.168.109.139 security: #security的配置 username: admin password: admin123 #Eureka Server在启动的时候会创建一个定时任务,默认每隔一段时间(默认为60秒)将当前清单中超时(默认为90秒)没有续约的服务剔除出去。
推送依据自我环境修改完的代码到远程:
git add .
git commit -m "说明"
git push origin master #(git push origin 本地分支名:refs/remotes/远程分支名) 将代码推至远程就可以了
在jenkins上构建:
新建一个任务(springcloud-eureka)--构建一个maven项目--确定
源码管理(git,并配置)
构建触发器 去掉勾
spring-base/spring-eureka/pom.xml
clean package -Dmaven.test.skip=true
点击maven的高级按钮
DEFAULT
settings file 选择文件系统中的setting文件
/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/jenkins-in-maven/conf/settings.xml
Add post-build setp 中选择(执行shell)--
cp /var/jenkins_home/workspace/springcloud-eureka/spring-base/spring-eureka/src/main/docker/Dockerfile /var/jenkins_home/workspace/springcloud-eureka/spring-base/spring-eureka/target/
保存
在jenkins里安装 云docker 插件:
系统设置--新增一个云docker(我的版本中Cloud提示The cloud configuration has moved to a separate configuration page.)点击到新页面配置--新增--docker--Docker Cloud details..,把前面挂载的docker.sock 文
件写入Docker Host URL中:unix:///var/run/docker.sock,点击测试,测试成功可以看到版本号;保存
继续配置 springcloud-eureka:配置docker的镜像构建
Post Steps--Add post-build setp--Build/Publish Docker Image
Directory for Dockerfile(工作路径):/var/jenkins_home/workspace/springcloud-eureka/spring-base/spring-eureka/target/
Cloud选择先前添加docker云配置的名称:docker
Image:192.168.109.137:5000/spring-eureka
Push image打钩
Clean local images打钩
保存
然后jenkins构建看看
成功后查看镜像:curl -XGET http://192.168.109.137:5000/v2/_catalog
rancher部署eureka服务,部署工作负载
spring-eureka
192.168.109.137:5000/spring-eureka
端口 8000 TCP HostPort 8000
主机调度 deploy=worker 因为eureka要相互注册,所以这里标签不用前面的,我们改为iprange=138
高级选项 网络 是否选用主机网络(是),后台会在启动时加上--net=host命令,表示不虚拟出网络
138上的eureka启动后,139的我们需要修改代码中的配置文件重新打包;
这里我的安排是:142 对应 application-142.yml (hostname:192.168.109.139)部署机器为138
vim /root/111/gitee_cangku/rancher_springcloud/spring-base/spring-eureka/src/main/resources/application.yml 注释active: 141,启用active: 142
提交代码:
git add .
git commit -m "修改配置部署138"
git push origin master
jenkins重新打包,139因为已经部署了本地有老版本的包,重启不影响,只会改变仓库的镜像包
rancher 克隆一个spring-eureka服务并修改:
spring-eureka-138
主机调度:iprange = 138
删除138机器的上的镜像:docker rmi 192.168.109.137:5000/spring-eureka:latest
然后启动
检查:
1.日志查看
2.rancher访问eureka注册页面可以看到DS Replicas为相互地址,并且俩台都已经注册成功,如下:
SPRING-EUREKA n/a (2) (2) UP (2) - 192.168.109.138:spring-eureka:8000 , 192.168.109.139:spring-eureka:8000
至此eureka集群完毕