在前文,咱们快速体验了官方推荐的docker镜像制作方案,但也产生了几个疑问:
本篇的目标就是解答上述问题,在寻找答案的过程中不断补全知识点,提升自己;
前文多次提到的镜像layer到底是什么,为什么会有多层layer?有必要先把这个知识点夯实了,请参考文章《SpringBoot-2.3镜像方案为什么要做多个layer》
以SpringBoot-2.2.0.RELEASE版本为例,官方文档( https://docs.spring.io/spring-boot/docs/2.2.0.RELEASE/reference/pdf/spring-boot-reference.pdf)给出的做法如下:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=target/dependency
COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY ${DEPENDENCY}/META-INF /app/META-INF
COPY ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","com.example.MyApplication"]
2.3.0.RELEASE版本构建Docker的步骤如下:
因此,2.3.0.RELEASE版本和旧版本相比有如下变化:
搞清楚了新旧版本的区别,咱们继续研究下一个问题吧;
java -Djarmode=layertools -jar dockerlayerdemo-0.0.1-SNAPSHOT.jar list
至此,三个问题都已经找到了答案,小结一下:
spring-boot-maven-plugin插件新增的参数,使得编译构建得到jar中多了两个文件,如下图所示:
至此,问题已全部澄清,相信您对SpringBoot-2.3.0.RELEASE官方的镜像构建方案也足够了解了,最后是我根据自己的认识画的流程图,帮助您快速理解整个构建流程: