docker源码分析 pdf_体验SpringBoot(2.3)应用制作Docker镜像(官方方案)

如果您使用了SpringBoot-2.3.0,可以按照官方推荐的方案来制作Docker镜像,接下来通过实战学习SpringBoot官方推荐的镜像制作方案;

demo源码

本次实战用的是普通的SpringBoot工程,如果您不想写代码,整个系列的源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blog_demos):

b7a918b01326069e4829b2ffa630287d.png

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

1c6747c8263dc138afedfa233af0ec8f.png

版本信息

  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,如下图红框所示:
2c650b4bbb14870896ef393a967aaf87.png
  • 在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-stretchWORKDIR application# 前一阶段从jar中提取除了多个文件,这里分别执行COPY命令复制到镜像空间中,每次COPY都是一个layerCOPY --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"]
  • 执行以下命令编译构建工程:
mvn clean package -U -DskipTests
  • 编译构建完成后确保target目录有jar文件生成;
  • 在Dockerfile所在目录执行以下命令构建镜像(请按照您的实际情况调整镜像名):
docker build -t dockerlayerdemo:0.0.1 .
  • 镜像构建成功的提示如下:
4069b81ddc3ef1b772f59d721debff11.png

验证

  • 执行以下命令创建并启动容器:
docker run --rm -p 8080:8080 dockerlayerdemo:0.0.1
  • 启动成功的控制台信息:
56c71c083568cede3730b108b5af02c1.png
  • 浏览器访问:http://localhost:8080/hello ,如下图,一切正常:
0e4c7cba1ac1e28b609edf787a3a3651.png
  • 看看镜像的分层信息,执行命令:
docker history dockerlayerdemo:0.0.1
  • 如下图,整个jar的内容,例如class、依赖库、依赖资源等,分多次COPY到镜像空间中,所以今后如果只改了class,在更新镜像的时候,只需要下载class的layer即可(其他layer可以直接用之前缓存到本地的)
416e2503866732e413950e47a7e4f1aa.png

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

  1. 2.3.0.RELEASE推荐的镜像构建方案和旧版本相比有什么不同?
  2. pom.xml中spring-boot-maven-plugin插件新增的参数,到底做了什么?
  3. Dockerfile中,java -Djarmode=layertools -jar application.jar extract这个操作啥意思?

这些问题留待下一篇文章一起深入研究。

参考信息

官方文档地址:https://docs.spring.io/spring-boot/docs/2.3.0.RELEASE/reference/pdf/spring-boot-reference.pdf ,4.31章节

欢迎关注我的公众号:程序员欣宸

774d8709492d4ecf5232c715879fc910.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值