springboot项目docker分层构建的配置方式
作者:chenzfp
一、需求场景
在使用dockerfile构建springboot项目时,速度较慢,用时比较长,为了加快构建docker镜像的速度,采用分层构建的方式
二、构建配置
1、pom.xml配置
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <docker.plugin.version>0.43.4</docker.plugin.version> <docker.registry>reg.harborXXX.com</docker.registry> <docker.namespace>order</docker.namespace> </properties> <build> <finalName>order-xxx</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>io.fabric8</groupId> <artifactId>docker-maven-plugin</artifactId> <version>${docker.plugin.version}</version> <configuration> <registry>${docker.registry}</registry> <images> <image> <name>${docker.registry}/${docker.namespace}/${project.build.finalName}:${project.version}</name> <build> <dockerFileDir>${project.basedir}</dockerFileDir> </build> </image> </images> </configuration> </plugin> </plugins> </build>
2、Dockerfile
reg.harborXXX.com为自建harbor私服地址
自建私服参考:Docker仓库管理镜像 – 公共仓库【Docker Hub】和私人仓库【Registry】和【harbor】
# 分层构建, 加速增量构建 # 需配置host:{IP} reg.harborXXX.com FROM reg.harborXXX.com/library/openjdk:8-ub as builder WORKDIR app ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar RUN java -Djarmode=layertools -jar app.jar extract && rm app.jar FROM reg.harborXXX.com/library/openjdk:8-ub ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ENV JAVA_OPTS=" -server -Xmx1024m -Xms256m -Xmn512m -Xss256k" WORKDIR app COPY --from=builder /app/dependencies/ ./ COPY --from=builder /app/spring-boot-loader/ ./ COPY --from=builder /app/snapshot-dependencies/ ./ COPY --from=builder /app/application/ ./ EXPOSE 9091 ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS org.springframework.boot.loader.JarLauncher"]
这个Dockerfile使用了分层构建的方法来构建一个Spring Boot应用的Docker镜像,目的是加速增量构建过程。以下是Dockerfile
的解释和一些可能的优化建议:
分层构建解释
基础镜像:这个Dockerfile
定义了两个阶段的构建过程,都使用了相同的基础镜像reg.harborXXX.com/library/openjdk:8-ub
。这个镜像基于OpenJDK 8
。
第一阶段:构建阶段 (as builder
):在这个阶段,它首先设置工作目录为/app
,然后复制Jar
包到/app
目录并重命名为app.jar
。接着,它使用Spring Boot
的layertools
来提取Jar
包中的层(layer
),然后删除app.jar
文件。
第二阶段:最终镜像:在这个阶段,它再次设置工作目录为/app
,并从构建阶段复制不同的层到当前工作目录。通过这种方式,可以在代码或依赖变更时只重新构建变更的层,从而加速构建过程。
环境变量和时区设置:设置时区为Asia/Shanghai
,并配置Java虚拟机选项JAVA_OPTS
。
端口和入口点:暴露9091
端口,并设置容器启动时的入口点为运行Spring Boot
应用的命令。
到此这篇关于springboot项目docker分层构建的文章就介绍到这了,更多相关springboot项目docker分层构建内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!