扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
今天就跟大家聊聊有关Docker中怎么部署eureka集群,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站设计、网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的西湖网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
centos7下的安装:https://www.jianshu.com/p/ec02810d6a2b
docker常用命令:https://www.jianshu.com/p/af7977b1075c
没有用过docker的最好先熟悉一下docker,后续内容已经省略docker的相关解释
博客地址:https://my.oschina.net/devilsblog/blog/3114468
码云地址:https://gitee.com/devilscode/cloud-practice/tree/eureka-test/
如果想动手的可以按照帖子来,如果不想动手的可以直接down代码
执行命令 :
yum install docker-compose -y
以上环境是使用在docker中配置eureka集群的最小内容,提前准备最好
Idea运行ServerApplication.main(),打开浏览器输入 http://localhost:9000 可以看到如下图即可
编译成jar运行
在项目根目录下执行 mvn install,在target下能看到eureka-server-1.0-SNAPSHOT.jar
跳转目录到target下,输入 java -jar eureka-server-1.0-SNAPSHOT.jar > tmp.log
打开刷新浏览器窗口依然能看到界面就正常
此处有个坑,就是不要用Idea自带的jar命令,会报错没有主清单列表
# docker image for eureka-server # version 1.0.0 # author Calvin # 代表基础环境 FROM java:8 # 代表映射文件夹 VOLUME /tmp # 将文件复制到镜像 ADD eureka-server-1.0-SNAPSHOT.jar eureka-server.jar # 映射出来的端口 EXPOSE 9000 # 脚本 RUN bash -c 'touch eureka-server.jar' # 启动命令 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/eureka-server.jar"]
编译$ docker build -t eureka-server .
-t 表示指定镜像名称
别忽略最后的英文点号.
执行的目录必须有Dockerfile
第一次执行可能需要下载java8的base镜像,耗时较久
查看结果$ docker images
启动镜像 docker run -d -p 9000:9000 --name eureka-server eureka-server
页面查看
源码修改
复制application.yml文件为两份,分别为application-slave1.yml,application-slave2.yml 内容分别如下
# slave1 server: port: 9000 eureka: instance: hostname: eureka-server1 client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://eureka-server2:9000/eureka # ------------------------------------------------------- # slave2 server: port: 8080 eureka: instance: hostname: eureka-server1 client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://eureka-server1:9000/eureka
增加docker-compose配置
version: '2' services: eureka-server1: image: eureka-server container_name: eureka-server1 hostname: eureka-server1 networks: - eureka-net ports: - 9000:9000 environment: - spring.profiles.active=slave1 eureka-server2: image: eureka-server container_name: eureka-server2 hostname: eureka-server2 networks: - eureka-net ports: - 9001:9001 environment: - spring.profiles.active=slave2 networks: eureka-net: driver: bridge
重新编译docker镜像
#停用原来的服务 docker stop eureka-server #删除服务历史,避免后续启动的时候服务名重复 docker rm eureka-server #删除原有镜像 docker rmi eureka #重新生成镜像, 此处依然生成一个镜像,和之前步骤一致 docker build -t eureka-server
启动多个服务
# 目录为Dockerfile和 docker-compose.yml文件夹 docker-compose up -d
验证结果
#查看服务 docker ps | grep eureka-server #查看日志,等待启动成功 docker logs eureka-server1 -f #查看端口 netstat -nltp
图中已经可以看到,eureka-server注册了两个
此部分属于课题之外,吃瓜群众们可以撤了
把本地的一个注册中心再注册进集群中,从远程的集群中可以看到注册进来的eureka-server
结果
向本地的注册中心注册common-service服务,然后把feign-service注册向远程中心9001端口,再调用处理
远程9000端口
远程9001端口
用feign-service调用common-service
现象
结论
如果注册集群,集群之间的注册应该有相互通知,单方面注册会导致服务不同步
即使有一个中间的能看到三个服务的注册中心,也会由于部分实例信息没有同步而导致找不到对应的服务
远程9000端口上可以看到有三个服务,远程9001上只有两个服务
feign-service调用common-service发生异常
把common-service重新注册到远程中,注册成功以后先调用一次,然后停用所有注册中心
结果:
结论:
feign-service已经将注册进来的服务实例信息拉取到本地缓存,即使注册中心挂掉,短时间(具体时间节点应该是注册中心重启成功之前)不会影响服务的调用
实践docker启动微服务,企业常用操作练习
在docker中部署注册中心的集群,以及批量部署其他服务,暂时是手动,后续研究k8s
探究eureka集群时候的三个问题,算是尝试eureka的特性场景,加固记忆
看完上述内容,你们对Docker中怎么部署eureka集群有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流