微服务项目名称 | 项目微服务中的角色 |
---|---|
microservice-discovery-eureka | 服务发现组件 |
microservice-provider-user | 服务提供者 |
microservice-consumer-movie-ribbon-hystrix | 服务消费者 |
microservice-gateway-zuul | API Gateway |
microservice-hystrix-turbine | Hystrix聚合监控工具 |
microservice-hystrix-dashboard | Hystrix监控界面 |
1:使用Maven插件构建镜像,在各个项目的pom.xml中添加如下内容。java
<!-- 添加docker-maven插件 --> <plugin> <groupId>com.sptify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <imageName>itmuch/${project.artifactId}:${project.version}</imageName> <forceTages>true</forceTages> <baseImage>java</baseImage> <entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint> <resoureces> <resourece> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
由配置可知,构建出来的镜像名称是itmuch/各个微服务的artifactId:各个微服务的版本,例如:microservice-discovery-eureka:0.0.1-SNAPSHOT。web
2:为Eureka Server所在容器配置一个主机名(如discover),并让各个微服务使用主机名访问Eureka Server。
将全部微服务eureka.client.serviceUrl.defaultZone修改成以下内容:spring
eureka: client: serviceUrl: defaultZone:http://discovery:8761/eureka/
3:在每一个项目的根目录执行如下命令,构建Docker镜像。docker
mvn clean package docker:build
4:编写docker-compose.yml网络
version: '3' #Version 2 file format的固定写法,为project定义服务 services: #指定服务名称 microservice-discovery-eureka: #指定服务所使用的镜像 image: itmuch/microservice-discovery-eureka:0.0.1-SNAPSHOT #暴露端口信息 ports: - "8761:8761" microservice-provider-user: image: itmuch/microservice-provider-user:0.0.1-SNAPSHOT #链接到microservice-discovery-eureka,这边使用的是SERVICE:ALIAS的形式 links: - microservice-disvoery-eureka:discovery - microservice-consumer-movie-ribbon-hystrix: image: itmuch/microservice-consumer-movie-ribbon-hystrix:0.0.1-SNAPSHOT links: - microservice-disvoery-eureka:discovery microservice-gateway-zuul: image: itmuch/microservice-gateway-zuul:0.0.1-SNAPSHOT links: - microservice-disvoery-eureka:discovery microservice-hystrix-dashboard: image: itmuch/microservice-hystrix-dashboard:0.0.1-SNAPSHOT links: - microservice-disvoery-eureka:discovery microservice-hystrix-turbine: image: itmuch/microservice-hystrix-turbine:0.0.1-SNAPSHOT links: - microservice-disvoery-eureka:discovery
测试,执行docker-compose up启动项目,便可看到Eureka Server上的微服务列表服务发布成功。maven
同一个Compose工程中的全部服务共享一个隔离网络,可以使用服务名称做为主机名来发现其余服务。ide
所以,将docker-compose.yml简化:svg
version: '2' services: discovery: image: itmuch/discovery-eureka:0.0.1-SNAPSHOT ports: - "8761:8761" microservice-provider-user: image: itmuch/microservice-provider-user:0.0.1-SNAPSHOT microservice-consumer-movie-ribbon-hystrix: image: itmuch/microservice-consumer-movie-ribbon-hystrix:0.0.1-SNAPSHOT microservice-gateway-zuul: image: itmuch/microservice-gateway-zuul:0.0.1-SNAPSHOT microservice-hystrix-dashboard: image: itmuch/microservice-hystrix-dashboard:0.0.1-SNAPSHOT microservice-hystrix-turbine: image: itmuch/microservice-hystrix-turbine:0.0.1-SNAPSHOT
使用Compose编排Eureka Server集群。微服务
1.执行如下命令构建Dokcer镜像。工具
mvn clean package docker:build
2.编写docker-compose.yml
version: '3' services: microservice-discovery-eureka-ha1: hostname: peer1 #指定hostname image: itmuch/discovery=eureka-ha:0.0.1:SNAPSHOT links: - discovery-eureka-ha2 ports: - "8761:8761" environment: - spring.profiles.active=peer1 microservice-discovery-eureka-ha2: hostname: peer2 #指定hostname image: itmuch/discovery=eureka-ha:0.0.1:SNAPSHOT links: - discovery-eureka-ha1 ports: - "8762:8762" environment: - spring.profiles.active=peer2
3.执行如下命令启动项目。
docker-compose up
可是,这样并不会成功,终端会输出异常。
由于存在循环依赖,links没法实现双向链接。
如何解决呢? 例如使用 ambassador pattern,使用外部DNS容器等。
微服务项目名称 | 项目微服务中的角色 |
---|---|
microservice-discovery-eureka-ha | 服务发现组件 |
microservice-provider-user | 服务提供者 |
microservice-consumer-movie-ribbon-hystrix | 服务消费者 |
microservice-gateway-zuul | API Gateway |
microservice-hystrix-turbine | Hystrix聚合监控工具 |
microservice-hystrix-dashboard | Hystrix监控界面 |
1.因为使用了microservice-discovery-eureka-ha,须要将全部的微服务eureka.client.serviceUrl.defaultZone属性修改成以下内容:
eureka: client: service-url: defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/
2.在每一个项目的根目录,执行如下命令建立Docker镜像。
mvn clean package docker:build
3.编写docker-compose.yml
version: "2" services: peer1: image: itemuch/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT ports: - "8761:8761" enviroment: - spring.profiles.active=peer1 peer2: image: itemuch/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT hostname: peer2 ports: - "8761:8761" enviroment: - spring.profiles.active=peer2 microservice-provider-user: image: itmuch/microservice-provider-user:0.0.1-SNAPSHOT microservice-consumer-movie-ribbon-hystrix: image: itmuch/microservice-consumer-movie-ribbon-hystrix:0.0.1-SNAPSHOT microservice-gateway-zuul: image: itmuch/microservice-gateway-zuul:0.0.1-SNAPSHOT microservice-hystrix-dashboard: image: itmuch/microservice-hystrix-dashboard:0.0.1-SNAPSHOT microservice-hystrix-turbine: image: itmuch/microservice-hystrix-turbine:0.0.1-SNAPSHOT
测试,执行docker-compose up启动项目。
而后能够在Eureka Server看到微服务列表。
执行如下命令,为各个微服务动态扩容,让除Eureka Server之外的全部微服务都启动3个实例。
docker-compose scale microservice-provider-user=3 microservice-consumer-movie-ribbon-hystrix=3 microservice-gateway-zuul=3 microservice-hystrix-turbine=3