springboot项目docker分层构建的配置方式

 更新时间:2024年03月11日 11:26:05   作者:chenzfp  
在使用dockerfile构建springboot项目时,速度较慢,用时比较长,为了加快构建docker镜像的速度,采用分层构建的方式,这篇文章主要介绍了springboot项目docker分层构建,需要的朋友可以参考下

一、需求场景

在使用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 Bootlayertools来提取Jar包中的层(layer),然后删除app.jar文件。

第二阶段:最终镜像:在这个阶段,它再次设置工作目录为/app,并从构建阶段复制不同的层到当前工作目录。通过这种方式,可以在代码或依赖变更时只重新构建变更的层,从而加速构建过程。

环境变量和时区设置:设置时区为Asia/Shanghai,并配置Java虚拟机选项JAVA_OPTS

端口和入口点:暴露9091端口,并设置容器启动时的入口点为运行Spring Boot应用的命令。

到此这篇关于springboot项目docker分层构建的文章就介绍到这了,更多相关springboot项目docker分层构建内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MyBatis-Plus数据权限插件的简单使用

    MyBatis-Plus数据权限插件的简单使用

    在MyBatis-Plus中,通过DataPermissionInterceptor插件实现数据权限控制,首先需要创建自定义注解和处理类,利用JSQLParser库动态修改SQL,实现按角色权限过滤数据,配置类中注册拦截器,确保只有授权用户能访问指定数据,感兴趣的可以了解一下
    2024-10-10
  • Java注解中@Component和@Bean的区别

    Java注解中@Component和@Bean的区别

    这篇文章主要介绍了@Component和@Bean的区别,在这给大家简单介绍下作用对象不同:@Component 注解作用于类,而 @Bean 注解作用于方法,具体实例代码参考下本文
    2024-03-03
  • springboot通用分支处理超级管理员权限逻辑

    springboot通用分支处理超级管理员权限逻辑

    这篇文章主要为大家介绍了springboot通用分支处理超级管理员的权限逻辑,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Java面试题冲刺第九天--MyBatis

    Java面试题冲刺第九天--MyBatis

    这篇文章主要为大家分享了最有价值的三道MyBatis框架面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • 在Java中FreeMarker 模板来定义字符串模板

    在Java中FreeMarker 模板来定义字符串模板

    这篇文章主要介绍了在Java中FreeMarker 模板来定义字符串模板,文章基于Java的相关资料展开详细内容,需要的小伙伴可以参考一下
    2022-04-04
  • 示例解析java重载Overloading与覆盖Overriding

    示例解析java重载Overloading与覆盖Overriding

    这篇文章主要介绍了java重载Overloading与覆盖Overriding的示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Java并发编程中的ReentrantLock类详解

    Java并发编程中的ReentrantLock类详解

    这篇文章主要介绍了Java并发编程中的ReentrantLock类详解,ReentrantLock是juc.locks包中的一个独占式可重入锁,相比synchronized,它可以创建多个条件等待队列,还支持公平/非公平锁、可中断、超时、轮询等特性,需要的朋友可以参考下
    2023-12-12
  • Java算法题常用函数详解

    Java算法题常用函数详解

    这篇文章主要介绍了Java中常用的字符串操作、字符串转换、字符串处理、字符串缓冲区、栈、数组、列表、队列、优先队列、Map和HashMap的常用函数和操作,感兴趣的朋友跟随小编一起看看吧
    2025-11-11
  • Spring boot自定义加密解密数据库连接配置示例代码

    Spring boot自定义加密解密数据库连接配置示例代码

    在Spring Boot项目中,为了保护数据库连接信息的安全,通常需要对敏感信息进行加密,这篇文章主要介绍了Spring boot自定义加密解密数据库连接配置的相关资料,需要的朋友可以参考下
    2026-05-05
  • 浅谈Java StringBuilder为什么线程不安全

    浅谈Java StringBuilder为什么线程不安全

    这篇文章主要介绍了浅谈Java StringBuilder为什么线程不安全,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09

最新评论