189 8069 5689

SpringBoot(2.3)应用制作Docker镜像的方法是怎样的

SpringBoot(2.3)应用制作Docker镜像的方法是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、虚拟空间、营销软件、网站建设、沅江网站维护、网站推广。

SpringBoot应用源码

本次实战用的是普通的SpringBoot工程,如果您不想写代码,源码可在GitHub下载到,地址和链接信息如下表所示:

名称链接备注
项目主页https://github.com/zq2599/blog_demos该项目在GitHub上的主页
git仓库地址(https)https://github.com/zq2599/blog_demos.git该项目源码的仓库地址,https协议
git仓库地址(ssh)git@github.com:zq2599/blog_demos.git该项目源码的仓库地址,ssh协议

这个git项目中有多个文件夹,本章的应用在dockerlayerdemo文件夹下,如下图红框所示:

SpringBoot(2.3)应用制作Docker镜像的方法是怎样的

版本信息

  1. SpringBoot:2.3.0.RELEASE

  2. JDK:1.8.0_121

  3. Maven:3.3.9

  4. Docker:19.03.8

  5. 操作系统:MacBook pro 13寸,macOS Catalina 10.15.4

构建镜像实战

  1. 修改pom.xml,给spring-boot-maven-plugin插件的配置增加子节点,enabled的值为true,如下图红框所示:

SpringBoot(2.3)应用制作Docker镜像的方法是怎样的

  1. 在pom.xml文件所在目录新增Dockerfile文件,内容如下:

# 指定基础镜像,这是分阶段构建的前期阶段
FROM openjdk:8u212-jdk-stretch as builder
# 执行工作目录
WORKDIR application
# 配置参数
ARG JAR_FILE=target/*.jar
# 将编译构建得到的jar文件复制到镜像空间中
COPY ${JAR_FILE} application.jar
# 通过工具spring-boot-jarmode-layertools从application.jar中提取拆分后的构建结果
RUN java -Djarmode=layertools -jar application.jar extract

# 正式构建镜像
FROM openjdk:8u212-jdk-stretch
WORKDIR application
# 前一阶段从jar中提取除了多个文件,这里分别执行COPY命令复制到镜像空间中,每次COPY都是一个layer
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-boot-loader/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]
  1. 执行以下命令编译构建工程:

mvn clean package -U -DskipTests
  1. 编译构建完成后确保target目录有jar文件生成;

  2. 在Dockerfile所在目录执行以下命令构建镜像(请按照您的实际情况调整镜像名):

docker build -t dockerlayerdemo:0.0.1 .
  1. 镜像构建成功的提示如下:

SpringBoot(2.3)应用制作Docker镜像的方法是怎样的

验证

  1. 执行以下命令创建并启动容器:

docker run --rm -p 8080:8080 dockerlayerdemo:0.0.1
  1. 启动成功的控制台信息:

SpringBoot(2.3)应用制作Docker镜像的方法是怎样的 3. 浏览器访问:http://localhost:8080/hello ,如下图,一切正常:

SpringBoot(2.3)应用制作Docker镜像的方法是怎样的 4. 看看镜像的分层信息,执行命令:

docker history dockerlayerdemo:0.0.1
  1. 如下图,整个jar的内容,例如class、依赖库、依赖资源等,分多次COPY到镜像空间中,所以今后如果只改了class,在更新镜像的时候,只需要下载class的layer即可(其他layer可以直接用之前缓存到本地的):

SpringBoot(2.3)应用制作Docker镜像的方法是怎样的

至此,SpringBoot-2.3.0.RELEASE官方推荐的镜像构建方式就实践完成了,但是也留下了一些疑问:

  1. 2.3版本推荐的镜像构建方案,和旧版本比有什么不同?

  2. pom.xml中spring-boot-maven-plugin插件新增的参数,到底做了什么?

  3. Dockerfile中,java -Djarmode=layertools -jar application.jar extract这个操作啥意思?

看完上述内容,你们掌握SpringBoot(2.3)应用制作Docker镜像的方法是怎样的的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


名称栏目:SpringBoot(2.3)应用制作Docker镜像的方法是怎样的
当前URL:http://cdxtjz.com/article/isjeci.html

其他资讯