前言

   本文记录怎么搭建服务注册中心eureka,然后打包成docker镜像,用docker swarm部署eureka集群

1、环境

环境 版本及说明 参考地址
docker v1.13.1,Docker是一个能够把开发的应用程序自动部署到容器的开源引擎 http://www.cnblogs.com/520playboy/p/7910357.html
doker-compose v1.11,Docker 官方编排(Orchestration)项目之一,负责快速在集群中部署分布式应
docker swarm v1.13.1,Docker Engine 1.12或更高版本中内置了swarm(不用额外安装) http://www.cnblogs.com/520playboy/p/7873903.html
docker registry registry:latest,用于存储docker镜像的私有仓库 http://www.cnblogs.com/520playboy/p/7889647.html
spring boot 1.5.1.RELEASE,是开箱即用,提供一系列大型项目常用的非功能性特征的快速度开发工具 spring boot官网
spring cloud Camden SR5,Spring Cloud 为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性 Token、全局锁、决策竞选、分布式会话和集群状态)操作的开发工具集 spring cloud官网
开发工具 jdk1.8/IntelliJ idea2016/maven3.3

2、创建父空项目 microservice-spring-cloud

3、父项目的pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4..RELEASE</version>
</parent>
<modelVersion>4.0.</modelVersion>
<groupId>com.jacky</groupId>
<artifactId>microservice-spring-cloud</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version> <modules>
<module>microservice-discovery-eureka-ha</module>
</modules> <properties>
<project.build.sourceEncoding>UTF-</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<docker.image.prefix>jacky</docker.image.prefix><!--配置镜像仓库的属性-->
<docker.repostory>192.168.6.132:</docker.repostory><!--配置镜像仓库的对应的地址与端口-->
</properties> <dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<!--添加利用maven插件构建docker镜像的插件依赖-->
<pluginManagement>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.</version>
</plugin>
</plugins>
</pluginManagement>
</build> </project>

4、创建子项目microservice-discovery-eureka-ha

5、microservice-discovery-eureka-ha工程的pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>microservice-spring-cloud</artifactId>
<groupId>com.jacky</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.</modelVersion> <artifactId>microservice-discovery-eureka-ha</artifactId>
<packaging>jar</packaging> <properties>
<project.build.sourceEncoding>UTF-</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<executions>
<!--设置在执行maven 的install时构建镜像-->
<execution>
<id>build-image</id>
<phase>install</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--安装了docker的主机,并且打开了api remote接口设置-->
<dockerHost>http://192.168.6.130:5678</dockerHost>
<pushImage>true</pushImage><!--设置上传镜像到私有仓库,需要docker设置指定私有仓库地址-->
<!--镜像名称-->
<imageName>${docker.repostory}/${docker.image.prefix}/${project.artifactId}:${project.version}</imageName>
<!--镜像的基础版本-->
<baseImage>java:openjdk--jdk-alpine</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>
</project>

5、microservice-discovery-eureka-ha工程的application.yml文件

spring:
application:
name: EUREKA-HA
security:
basic:
enabled: true
user:
name: jacky
password: admin
---
server:
port:
spring:
profiles: peer1
eureka:
instance:
hostname: peer1 #Eureka实例的主机名
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
client:
serviceUrl:
defaultZone: http://jacky:admin@peer2:8762/eureka/,http://jacky:admin@peer3:8763/eureka/ #Eureka节点相互注册
register-with-eureka: true
---
server:
port:
spring:
profiles: peer2
eureka:
instance:
hostname: peer2 #Eureka实例的主机名
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
client:
serviceUrl:
defaultZone: http://jacky:admin@peer1:8761/eureka/,http://jacky:admin@peer3:8763/eureka/
register-with-eureka: true
---
server:
port:
spring:
profiles: peer3
eureka:
instance:
hostname: peer3 #Eureka实例的主机名
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
client:
serviceUrl:
defaultZone: http://jacky:admin@peer1:8761/eureka/,http://jacky:admin@peer2:8762/eureka/
register-with-eureka: true

6、创建EurekaHaApplication.java文件

package com.jacky.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication
@EnableEurekaServer
public class EurekaHaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaHaApplication.class, args);
}
}

7、在父目录下创建docker-compose.yml文件

version: ""
services:
peer1: # 默认情况下,其他服务可以使用服务名称连接到该服务。因此,对于eurekaService1的节点,它需要连接http://eurekaService2/3:951X/eureka/,因此需要配置该服务的名称是eurekaService1。
image: 192.168.6.132:/jacky/microservice-discovery-eureka-ha:1.0-SNAPSHOT
deploy:
replicas: #定义 replicated 模式的服务的复本数量
update_config:
parallelism: #每次更新复本数量
delay: 2s #每次更新间隔
restart_policy:
condition: on-failure #定义服务的重启条件
networks:
- eureka-net
ports:
- "8761:8761"
environment:
- spring.profiles.active=peer1
peer2: # 高可用eureka注册节点2
image: 192.168.6.132:/jacky/microservice-discovery-eureka-ha:1.0-SNAPSHOT
deploy:
replicas: #定义 replicated 模式的服务的复本数量
update_config:
parallelism: #每次更新复本数量
delay: 2s #每次更新间隔
restart_policy:
condition: on-failure #定义服务的重启条件
networks:
- eureka-net
ports:
- "8762:8762"
environment:
- spring.profiles.active=peer2
peer3: # 高可用eureka注册节点3
image: 192.168.6.132:/jacky/microservice-discovery-eureka-ha:1.0-SNAPSHOT
deploy:
replicas: #定义 replicated 模式的服务的复本数量
update_config:
parallelism: #每次更新复本数量
delay: 2s #每次更新间隔
restart_policy:
condition: on-failure #定义服务的重启条件
networks:
- eureka-net
ports:
- "8763:8763"
environment:
- spring.profiles.active=peer3
networks:
eureka-net: #网络名称
driver: overlay

8、打包

双击install

9、在192.168.6.130机器上查看镜像

表示上传成功

10、把的docker-compose.yml文件上传到拥有swarm环境下,执行命令如下

[root@node1 docker-compose]# docker stack deploy -c docker-compose.yml eureka
Creating service eureka_peer2
Creating service eureka_peer3
Creating service eureka_peer1
[root@node1 docker-compose]# docker stack ps eureka
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
njhk2gkh7b6r eureka_peer1. 192.168.6.132:/jacky/microservice-discovery-eureka-ha:1.0-SNAPSHOT node3.jacky.com Running Running seconds ago
y5xwabq42zx4 eureka_peer3. 192.168.6.132:/jacky/microservice-discovery-eureka-ha:1.0-SNAPSHOT node3.jacky.com Running Running seconds ago
468xoiu6lv6l eureka_peer2. 192.168.6.132:/jacky/microservice-discovery-eureka-ha:1.0-SNAPSHOT node2.jacky.com Running Running seconds ago

说明eureka集群部署成功

说明:swarm集群192.168.6.130;192.168.6.131;192.168.6.132;8761,8762,8763端口都可以访问

喜欢本文的朋友,欢迎关注,本人的微信公众号,“咖啡牧羊人”

微服务之springCloud和docker-Eureka(一)的更多相关文章

  1. 我对微服务、SpringCloud、k8s、Istio的一些杂想

    一.微服务与SOA “微服务”是一个名词,没有这个名词之前也有“微服务”,一个朗朗上口的名词能让大家产生一个认知共识,这对推动一个事务的发展挺重要的,不然你叫微服务他叫小服务的大家很难集中到一个点上. ...

  2. 微服务、SpringCloud、k8s、Istio杂谈

    一.微服务与SOA “微服务”是一个名词,没有这个名词之前也有“微服务”,一个朗朗上口的名词能让大家产生一个认知共识,这对推动一个事务的发展挺重要的,不然你叫微服务他叫小服务的大家很难集中到一个点上. ...

  3. 微服务之SpringCloud基础

    SpringCloud微服务基础 微服务架构--SpringCloud网站架构模式 单点应用/分布式系统面向于服务架构(SOA) /微服务架构web项目三层架构1.控制层2.业务逻辑层3.数据访问层传 ...

  4. .NET Core微服务之基于Steeltoe使用Eureka实现服务注册与发现

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 =>  Steeltoe目录快速导航: 1. 基于Steeltoe使用Spring Cloud Eureka 2. 基于Steelt ...

  5. 微服务的发现与注册--Eureka

    目录 服务提供者.服务消费者.服务发现组件三者之间的关系 Eureka 简介 Eureka Server Eureka Client 编写Eureka Server 将微服务注册到Eureka Ser ...

  6. 后台管理微服务(二)——docker的使用

    1. docker概述 1.1 Docker是什么 Docker 是软件工业的集装箱技术 Docker 是一个容器引擎,docker提供了一套完整的容器解决方案. Docker 是一个能将开发的程序自 ...

  7. 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...

    原文:手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 本文你将学到什么? 本文将以原理+实战的方式,首先对& ...

  8. 微服务和SpringCloud入门

    微服务和SpringCloud入门 微服务是什么 微服务的核心是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底去耦合,每个微服务提供单个业务功能的服务,一个服务做一件事情,从技术角度看就是一种 ...

  9. F版本SpringCloud1—大白话为啥要有微服务?啥是微服务?SpringCloud为什么有那么多组件?

    前言 为什么要有微服务呢? 什么是微服务? SpringCloud 中为什么会有那么多的组件? ...... 作为SpringCloud教程的第一篇,不讲解具体的技术使用,通过一个通俗易懂的小故事,来 ...

  10. 庐山真面目之九微服务架构 NetCore 基于 Docker 基础镜像和挂载文件部署

    庐山真面目之九微服务架构 NetCore 基于 Docker 基础镜像和挂载文件部署 一.简介      我们在上一篇文章<庐山真面目之八微服务架构 NetCore 基于 Dockerfile ...

随机推荐

  1. MongoDB学习笔记(11) --- 聚合

    MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*) aggregate() 方法 MongoDB中聚 ...

  2. 记github上搭建独立域名的免费博客的方法过程

    前提:拥有github帐号,linux上安装好了git. 全局路线: 1. 设计一个你想要的二级域名,并在git上创建一个以[二级域名.github.com]作为项目名的repository. 过程详 ...

  3. Caffe搭建:常见问题解决办法和ubuntu使用中遇到问题(持续更新)

    严正声明: 在linux下面使用命令行操作时,一定要懂得命令行的意思,然后再执行,要不然在不知道接下来会发生什么的情况下输入一通命令,linux很有可能崩掉. 因为在linux下面,使用sudo以及r ...

  4. 【Android API】Android 4.1 API官方文档详解

    原文:http://android.eoe.cn/topic/summary 翻译:[eoeAndroid原创团队]kris.流风而逝.贼寇在何方.snowxwyo.lsy4833406 更新日期:2 ...

  5. 检查本机显卡的cuda信息及适配cuda-sdk版本

    1.按照本机显卡的最新版本,一般用驱动精灵安装,省事. 2.右击桌面->nvidia控制版本->"帮助"->"系统信息“ 3.这里有”显示“,主要记录了 ...

  6. IOC的实现原理—反射与工厂模式的结合

    反射机制概念   我们考虑一个场景,如果我们在程序运行时,一个对象想要检视自己所拥有的成员属性,该如何操作?再考虑另一个场景,如果我们想要在运行期获得某个类的Class信息如它的属性.构造方法.一般方 ...

  7. FPM打包工具 可以把源码包制定为rpm包 是自动化部署的环节

    注意部FPM时的环境一定要跟生产环境的系统版本最好是保持一至,我第一次测试没通过,(我在CENTOS7和部属FPM打好的包在Centos6.x和安装,结果失败) 1:安装 FPM打包工具的依赖包: [ ...

  8. (原创)拨开迷雾见月明-剖析asio中的proactor模式(一)

    使用asio之前要先对它的设计思想有所了解,了解设计思想将有助于我们理解和应用asio.asio是基于proactor模式的,asio的proactor模式隐藏于大量的细节当中,要找到它的踪迹,往往有 ...

  9. C++ struct 和 Class的区别

    C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能. struct能包含成员函数吗? 能!!! struct能继承吗? 能!! ...

  10. vim学习笔记(9):vim显示文件名

    如何让vim在编辑模式下显示文件名 在根目录下:~/.vimrc 中追加一行: set laststatus=2 shell 下执行命令: echo "set laststatus=2&qu ...