详解通过docker和docker-compose实现eureka高可用

最近新项目有使用到springcloud 和docker,关于这两个技术就不分别介绍了,现在分享一下通过docker,docker-compose实现eureka高可用的方案。

1. eureka server项目目录结构:

2. eureka 配置文件配置:

server:
 port: 8900

spring:
 application:
  name: eureka-server
 profiles:
  active: dev

management:
 security:
  enabled: false
 health:
  rabbit:
   enabled: false

---
spring:
 profiles: dev

eureka:
 client:
  serviceUrl:
   defaultZone: http://localhost:${server.port}/eureka/
  register-with-eureka: false
  fetch-registry: false
 instance:
  hostname: localhost
  prefer-ip-address: true

---
spring:
 profiles: test_ha_1

eureka:
 client:
  serviceUrl:
   defaultZone: http://eurekaserver2:${server.port}/eureka/
 instance:
  hostname: eurekaserver1
#  prefer-ip-address: true 该配置为true表示注册到eureka上的是IP,如果这样的化,eureka服务器就不能通过服务器发现Replicas。
#               故如果想通过Docker实现eureka高可用,该配置最好使用默认值(false)
#               此处配置为true且实现高可用也不是没有办法,就是每个eureka服务需映射到Docker环境外,且知道ip。
---
spring:
 profiles: test_ha_2

eureka:
 client:
  serviceUrl:
   defaultZone: http://eurekaserver1:${server.port}/eureka/
 instance:
  hostname: eurekaserver2
#  prefer-ip-address: true

3. docker maven插件配置:

 <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>0.4.13</version>
        <configuration>
          <imageName>${docker.image.prefix}/${project.artifactId}:${project.version}</imageName>
          <dockerDirectory>src/main/docker</dockerDirectory>
          <forceTags>true</forceTags>
          <resources>
            <resource>
              <targetPath>/</targetPath>
              <directory>${project.build.directory}</directory>
            </resource>
          </resources>
        </configuration>
        <!--<groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>0.4.13</version>
        <configuration>
          <imageName>itmuch/${project.artifactId}:${project.version}</imageName>
          <forceTags>true</forceTags>
          <baseImage>java</baseImage>
          <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
          <resources>
            <resource>
              <targetPath>/</targetPath>
              <directory>${project.build.directory}</directory>
              <include>${project.build.finalName}.jar</include>
            </resource>
          </resources>
        </configuration>-->
      </plugin>
    </plugins>
  </build>

4. Docker file 文件内容:

FROM java:8

ADD eureka-server-1.0.0.jar eurekaserver.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/eurekaserver.jar"]

5. 生成 eureka server 镜像:

通过执行 mvn clean package docker:build 命令,生成eurekaserver镜像,如下:

6. 通过docker-compose 编排:

version: '2'
services:
 eurekaserver1:
  image: raynspace/eureka-server:1.0.0
  ports:
   - "7900:8900"
  environment:
   - spring.profiles.active=test_ha_1

 eurekaserver2:
  image: raynspace/eureka-server:1.0.0
  #hostname: eurekaserver2
  ports:
   - "7800:8900"
  environment:
   - spring.profiles.active=test_ha_2

7. 跳转至项目目录下,执行docker-compose up 命令,自动生成eureka server 两个容器:

8. 由于已经把eureka 端口映射出来,所以本地通过端口访问eureka,查看eureka 服务状态:

通过上图可知,在registered-replicas和available-replicas两项均能看见另外一个eureka服务,至此eureka 集群搭建完成。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Docker-compose的安装和设定详细步骤

    Docker-compose的安装和设定详细步骤 docker的1.12版本中,swarm已经合体,docker-engine/swarm/docker-compose的三件套装已经变成两件.后续会不会将docker-compose进一步合体呢,想做的话应该是顺手的事情吧,不想做的话再简单也不会做.考虑到docker-compose可能以独立的方式消失在docker的舞台之后,先写一个安装的文档作纪念吧. 最简单的方式 下载下来二进制的docker-compose,放到你想放的地方,设定可执行的

  • 浅析docker-compose部署mysql无法访问的问题

    什么是Docker-Compose Compose项目来源于之前的fig项目,使用python语言编写,与docker/swarm配合度很高.Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器,使用Docker Compose不再需要使用shell脚本来启动容器. Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用

  • 详解Docker-compose networks 的例子

    今天实验了下 docker 下的网络设置,记录一下过程,以免后面忘记. (系统:Centos 7.4 ,docker 版本:18.03.1-ce, docker-compose version 1.18.0) cat docker-compose.yml version: '3' services: test1: image: busybox:latest # 镜像为 busybox entrypoint: # 容器启动后执行 top 命令,使容器没法立即退出 - top networks: b

  • linux使用docker-compose部署软件配置详解

    前言 本篇将分享一些 docker-compose 的配置,可参考其总结自己的一套基于docker的开发/生产环境配置.下面话不多说了,来一起看看详细的介绍吧 安装docker及docker-compose install docker curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun install docker-compose sudo curl -L https://github.com/docker/co

  • 利用docker-compose搭建AspNetCore开发环境

    使用docker-compose搭建AspNetCore开发环境 1 使用docker-compose搭建开发环境 我们的目标很简单:使用docker-compose把若干个docker容器组合起来就成了. 首先使用Nginx代理所有的Web程序,这样只需要在主机上监听一个端口就可以了,不污染主机.再组合各Web程序.Redis/Memcached.SqlServerOnLinux. 新建一个目录sites,所有和集群相关的都放在这里,目录结构如下所示 sites     nginx      

  • 浅谈docker-compose网络设置之networks

    networks使用方式之官网教程 官网的docker-compose.yml参考文档:Compose file version 3 reference 较为准确的中文翻译版:Compose file version 3 reference networks通常应用于集群服务,从而使得不同的应用程序得以在相同的网络中运行,从而解决网络隔离问题.这种应用在swarm部署中,非常常见.不过,本文并不做讨论. 一般对于集群服务,常常通过docker-compose.yml文档快速编排.部署应用服务.官

  • Docker-Compose的使用示例详解

    Docker Compose是一个用来定义和运行复杂应用的Docker工具.使用Compose,你可以在一个文件中定义一个多容器应用,然后使用一条命令来启动你的应用,完成一切准备工作. - github.com/docker/compose docker-compose是用来在Docker中定义和运行复杂应用的工具,比如在一个yum文件里定义多个容器,只用一行命令就可以让一切就绪并运行. 使用docker compose我们可以在Run的层面解决很多实际问题,如:通过创建compose(基于YU

  • Docker-compose部署gitlab的方法步骤

    Docker-compose部署gitlab 1.安装Docker 安装必要工具 复制代码 代码如下: [root@vm_10_14_centos ~]# yum -y install yum-utils device-mapper-persistent-data lvm2 添加Docker-ce镜像源并安装 [root@vm_10_14_centos ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/li

  • docker-compose 详解及示例代码

    docker-compose使用示例 利用docker搭建一个mysql + java service + nginx,总共4个docker容器,如果采用docker run的方式一个一个容器去创建十分麻烦.为了能更高效的批量创建容器,docker推出了docker-compose工具,只需要定义一个docker-compose.yml文件即可快速搞定一组容器的创建, mysql: image: daocloud.io/yjmyzz/mysql-osx:latest volumes: - ./m

  • Ubuntu15.10安装docker和docker-compose教程

    1.查看Linux内核版本(3.8以上)和操作系统位数64位 uname -a 结果: Linux jiaxiaoniu-jnq 4.2.0-16-generic #19-Ubuntu SMP Thu Oct 8 15:35:06 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux 查看Ubuntu版本号命令:cat /etc/issue 2.安装Docker sudo apt-get install docker.io 3.安装后查看Docker版本 sudo do

随机推荐