使用分层打包减少docker镜像体积和构建速度。
首先我们准备个demo项目。 注意springboot的版本需要>2.3.x。
TIP:
版本 < 2.3.x 无法分层打包
版本 > 2.3.x spring-boot-maven-plugin默认分层打包.
编写如下dockerfile
FROM adoptopenjdk:11-jre-hotspot as builder WORKDIR application ARG JAR_FILE=target/*.jar COPY${JAR_FILE} application.jar RUN java -Djarmode=layertools -jar application.jar extract FROM adoptopenjdk:11-jre-hotspot WORKDIR application COPY --from=builder application/dependencies/ ./ COPY --from=builder application/snapshot-dependencies/ ./ COPY --from=builder application/resources/ ./ COPY --from=builder application/application/ ./ ENTRYPOINT["java","org.springframework.boot.loader.JarLauncher"]
WORKDIR: 指定工作目录,保证docker每层都在同一个目录内工作。
RUN java -Djarmode=layertools -jar xx.jar extract: 指定jarmode,解压jar到分层目录。
两个From: Docker分层构建,减少最终的镜像体积。
dependencies,snapshot-dependencies,resources,application : spring-boot-maven-plugin打包的分层目录。
具体说明可以参考spring官网对于SpringBoot多层打包
TIP: 文中关于分层配置 LAYERED_JAR, 在springboot 2.4.x以上版本已经不用配置。
#安装open-jdk-11 (非必须步骤)sudo yuminstall -y java-11-openjdk-devel#构建sudo docker build. --tag demo