docker-compose下的java应用启动顺序两部曲之二:实战

  1. eureka是个maven工程,和SpringCloud环境中的eureka服务一样,唯一不同的是它的pom.xml中使用了jib插件,用来将工程构建成docker镜像:
<?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”>

4.0.0

com.bolingcavalry

eureka

0.0.1-SNAPSHOT

jar

eureka

eureka

com.bolingcavalry

wait-for-it-demo

0.0.1-SNAPSHOT

…/pom.xml

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

<java.version>1.8</java.version>

<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>

org.springframework.cloud

spring-cloud-starter-netflix-eureka-server

org.springframework.boot

spring-boot-maven-plugin

com.google.cloud.tools

jib-maven-plugin

1.7.0

openjdk:8-jdk-stretch

bolingcavalry/ p r o j e c t . a r t i f a c t I d : {project.artifactId}: project.artifactId:{project.version}

-Xms1g

-Xmx1g

8080

true

compile

dockerBuild

上述pom.xml中多了个jib插件,这样在执行mvn compile的时候,插件就会用构建结果制作好docker镜像并放入本地仓库;

2. service是个普通的SpringCloud应用,除了在pom.xml中也用到了jib插件来构建镜像,它的配置文件中,访问eureka的地址要写成eureka容器的名称:

spring:

application:

name: service

eureka:

client:

serviceUrl:

defaultZone: http://eureka:8080/eureka/

  1. 关于如何将java应用制作成docker镜像,如果您想了解更多请参考以下两篇文章:

《Docker与Jib(maven插件版)实战》

《Jib使用小结(Maven插件版)》

制作基础镜像

从上面的pom.xml可见,我们将Java应用制作成docker镜像时,使用的基础镜像是openjdk:8-jdk-stretch,这样做出的应用镜像是不含wait-for-it.sh脚本的,自然就无法实现启动顺序控制了,因此我们要做一个带有wait-for-it.sh的基础镜像给业务镜像用:

  1. 把wait-for-it.sh文件准备好,下载地址:https://raw.githubusercontent.com/zq2599/blog_demos/master/wait-for-it-demo/docker/wait-for-it.sh

  2. 在wait-for-it.sh文件所在目录新建Dockerfile文件,内容如下:

FROM openjdk:8-jdk-stretch

ADD wait-for-it.sh /wait-for-it.sh

RUN sh -c ‘chmod 777 /wait-for-it.sh’

注意:我这里用的是openjdk:8-jdk-stretch,您可以根据自己的实际需要选择不同的openjdk版本,可以参考:《openjdk镜像的tag说明》

  1. 执行命令docker build -t bolingcavalry/jkd8-wait-for-it:0.0.2 .就能构建出名为bolingcavalry/jkd8-wait-for-it:0.0.2的镜像了,请您根据自己的情况设置镜像名称和tag,注意命令的末尾有个小数点,不要漏了;

  2. 如果您有hub.docker.com账号,建请使用docker push命令将新建的镜像推送到镜像仓库上去,或者推送到私有仓库,因为后面使用jib插件构建镜像是,jib插件要去仓库获取基础镜像的元数据信息,取不到会导致构建失败;

使用新的基础镜像构建service镜像

我们的目标是让service服务等待eureka服务就绪,所以应该改造service服务,让它用docker官方推荐的wait-for-it.sh方案来实现等待:

  • 修改service工程的pom.xml,有关jib插件的配置改为以下内容:

com.google.cloud.tools

jib-maven-plugin

1.7.0

bolingcavalry/jkd8-wait-for-it:0.0.2

bolingcavalry/ p r o j e c t . a r t i f a c t I d : {project.artifactId}: project.artifactId:{project.version}

INHERIT

8080

true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值