文档章节

SpringCloud——Docker部署eureka集群

d
 devils_os
发布于 2019/10/23 23:13
字数 1144
阅读 140
收藏 0

Docker部署eureka集群

一、环境准备

1.docker环境

2.springcloud-eureka项目

3.docker-compose环境

  • 执行命令 :yum install docker-compose -y
  • 以上环境是使用在docker中配置eureka集群的最小内容,提前准备最好

二、本机运行

  • Idea运行ServerApplication.main(),打开浏览器输入 http://localhost:9000 可以看到如下图即可
  • 编译成jar运行
    1. 在项目根目录下执行 mvn install,在target下能看到eureka-server-1.0-SNAPSHOT.jar
    2. 跳转目录到target下,输入 java -jar eureka-server-1.0-SNAPSHOT.jar > tmp.log
    3. 打开刷新浏览器窗口依然能看到界面就正常
    4. 此处有个坑,就是不要用Idea自带的jar命令,会报错没有主清单列表

三、Docker单节点试运行

step1:上传文件

   

step2:创建Dockerfile

# 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"]

step3:编译docker镜像

  1. 编译
    $ docker build -t eureka-server .
    • -t 表示指定镜像名称
    • 别忽略最后的英文点号.
    • 执行的目录必须有Dockerfile
    • 第一次执行可能需要下载java8的base镜像,耗时较久
  2. 查看结果
    $ docker images

step4:启动镜像验证结果

  1. 启动镜像 docker run -d -p 9000:9000 --name eureka-server eureka-server
  2. 页面查看

四、在Docker中多个节点运行

  1. 源码修改

复制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

  1. 增加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
  1. 重新编译docker镜像
#停用原来的服务
docker stop eureka-server
#删除服务历史,避免后续启动的时候服务名重复
docker rm eureka-server
#删除原有镜像
docker rmi eureka
#重新生成镜像, 此处依然生成一个镜像,和之前步骤一致
docker build -t eureka-server
  1. 启动多个服务
# 目录为Dockerfile和 docker-compose.yml文件夹
docker-compose up -d
  1. 验证结果
#查看服务
docker ps | grep eureka-server 
#查看日志,等待启动成功
docker logs eureka-server1 -f 
#查看端口
netstat -nltp

图中已经可以看到,eureka-server注册了两个

五、三组测试

此部分属于课题之外,吃瓜群众们可以撤了

  1. 把本地的一个注册中心再注册进集群中,从远程的集群中可以看到注册进来的eureka-server
    • 结果
  2. 向本地的注册中心注册common-service服务,然后把feign-service注册向远程中心9001端口,再调用处理
    • 远程9000端口
    • 远程9001端口
    • 用feign-service调用common-service
    • 现象
      1. 远程9000端口上可以看到有三个服务,远程9001上只有两个服务
      2. feign-service调用common-service发生异常
    • 结论
      1. 如果注册集群,集群之间的注册应该有相互通知,单方面注册会导致服务不同步
      2. 即使有一个中间的能看到三个服务的注册中心,也会由于部分实例信息没有同步而导致找不到对应的服务
  3. 把common-service重新注册到远程中,注册成功以后先调用一次,然后停用所有注册中心
    • 结果:
    • 结论:

      feign-service已经将注册进来的服务实例信息拉取到本地缓存,即使注册中心挂掉,短时间(具体时间节点应该是注册中心重启成功之前)不会影响服务的调用

六、总结

  1. 实践docker启动微服务,企业常用操作练习
  2. 在docker中部署注册中心的集群,以及批量部署其他服务,暂时是手动,后续研究k8s
  3. 探究eureka集群时候的三个问题,算是尝试eureka的特性场景,加固记忆

© 著作权归作者所有

d
粉丝 0
博文 19
码字总数 33268
作品 0
昌平
后端工程师
私信 提问
加载中

评论(0)

使用rancher界面化管理docker并部署springCloud项目的其中一个服务

一、先来个简单的 1.安装docker 2.安装eureka——运行docker命令安装 3.安装eureka——运行dokcer镜像安装 (1)构建eureka的镜像,网易云的docker镜像比较全一些,也可以去https://hub.docke...

MonroeCode
2018/09/25
1.9K
0
微服务 SpringCloud 的eureka部署在Docker上的网络问题

使用Spring Cloud 的eureka 做服务注册和发现,多个eureka注册中心实例组成集群(http://blog.didispace.com/springcloud6/),使用Maven 将项目打成Docker镜像,使用Docker部署运行,如何解决doc...

FTR
2016/12/06
1.4W
3
EurekaServer高可用

前言 之前一篇文章文章《服务注册与发现---eureka》介绍了单点EurekaServer。但是实际环境中,这种单点的的模式可能会有很多隐形的问题。比如EurekaServer发生宕机,或者某些意外情况发生,很...

dalaoyang
2018/06/15
0
0
史上最简单的 SpringCloud 教程

《史上最简单的 SpringCloud 教程》系列: 史上最简单的 SpringCloud 教程 | 第一篇: 服务的注册与发现(Eureka) 史上最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon) 史上最...

外星人et59
2018/04/21
0
0
Spring Cloud-Honghu Cloud分布式微服务云系统(一)

简介 鸿鹄云Cloud是基于SpringCloud来封装的,是一系列框架的有序集合。利用Spring Boot的开发模式简化了分布式系统基础设施的开发,如服务发现、注册、配置中心、消息总线、负载均衡、断路器...

明理萝
2018/09/07
258
1

没有更多内容

加载失败,请刷新页面

加载更多

充值订单

充值订单 充值订单 1、用户登录到前台,可对个人账户充值2、点击充值进入支付页面,选择其中一种方式进行支付 3、打开后台-订单-充值订单,可根据下单时间、订单编号、充值用户来进行搜索。...

Geek-Chic
17分钟前
24
0
2.1 思科操作系统入门

cisco ios系统入门 IOS的存储和使用 IOS存储在Flash中,Flash属于非易失性存储,断电时不会丢失。 一台设备可用于存储多个版本的IOS,可以根据需要更改或者覆盖。 设备开机时,将IOS从Flash...

theyhq
21分钟前
23
0
String.format()占位符替换

作用:使用指定的格式字符串和参数返回一个格式化字符串。 str=String.format("Hi,%s %ss", "你好","java"); 常用的类型关系:

谷亚彬
38分钟前
34
0
作为HR,校招人才测评用什么工具好?

校招是一个直接面对众多优秀求职者的机会,是企业储备人才的宝地。每年大量的企业投身于校招的队伍中。 以前都是知名大企业进校园 如今....好像不限制了。 一次校招,我们大约能收到200多个简...

蛤蟆丸子
41分钟前
28
0
Dynamic Wallpaper for Mac(精美的动态壁纸) v3.5

Dynamic Wallpaper for Mac是一款功能强大的动态壁纸应用。动态壁纸应用 Mac版为你提供200+精美视频素材,卡通动漫、自然人文、萌宠萌物、游戏世界、创意视频、古风古色等等。 Dynamic Wall...

云不若
52分钟前
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部