当前位置: 首页 > news >正文

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.comFROM reg.harborXXX.com/library/openjdk:8-ub as builderWORKDIR app
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
RUN java -Djarmode=layertools -jar app.jar extract && rm app.jarFROM reg.harborXXX.com/library/openjdk:8-ubENV 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 appCOPY --from=builder /app/dependencies/ ./
COPY --from=builder /app/spring-boot-loader/ ./
COPY --from=builder /app/snapshot-dependencies/ ./
COPY --from=builder /app/application/ ./EXPOSE 9091ENTRYPOINT ["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分层构建

一、需求场景 在使用dockerfile构建springboot项目时&#xff0c;速度较慢&#xff0c;用时比较长&#xff0c;为了加快构建docker镜像的速度&#xff0c;采用分层构建的方式 二、构建配置 1、pom.xml配置 <properties><project.build.sourceEncoding>UTF-8<…...

深入理解SPA、CSR与SSR的区别及应用

随着Web技术的快速发展&#xff0c;前端开发架构也在不断演进。在现代Web应用中&#xff0c;单页面应用&#xff08;SPA&#xff09;、客户端渲染&#xff08;CSR&#xff09;和服务器端渲染&#xff08;SSR&#xff09;是三种常见的实现方式&#xff0c;它们各自拥有独特的特性…...

基于电鳗觅食优化算法(Electric eel foraging optimization,EEFO)的无人机三维路径规划(提供MATLAB代码)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化飞行…...

将SQL数据库转换为Mysql数据库

一、准备工作 1、SQL server安装包与已经有数据的mdf、ldf数据库文件&#xff1b; 2、.net Framework安装包&#xff1b;&#xff08;用于支持SQL Server安装的组件&#xff09; 3、MySql安装包&#xff1b;&#xff08;用于目标数据库的环境安装&#xff09; 4、navicat安装包…...

Java集合进阶

双列集合 单列集合的特点&#xff1a;一次添加一个。 双列集合的特点&#xff1a;一次添加一对/键值对/键值对对象/Entry。 左键&#xff08;不可重复&#xff09;右值&#xff08;可重复&#xff09;&#xff0c;一一对应。 Map是双列集合的顶层接口&#xff0c;他的功能是…...

一.算法基础

目录 1.算法基础 2.算法概念 3.时间复杂度--用来评估算法运行效率的一个式子 如何简单快速的判断算法复杂度? 4.空间复杂度 1.算法基础 2.算法概念 --静态动态 3.时间复杂度--用来评估算法运行效率的一个式子 ----一个单位!!! 1-在什么配置下运行(机器) 2-问题的规模…...

python自学7

第二章第一节面向对象 程序的格式都不一样&#xff0c;每个人填写的方式也有自己的习惯&#xff0c;比如收集个人信息&#xff0c;可能有人用字典字符串或者列表&#xff0c; 类的成员方法 类和对象 构造方法 挨个传输值太麻烦了&#xff0c;也没有方便点的&#xff0c;有&…...

Umi - 刷新后页面报404

Umi 项目本地运行刷新没问题&#xff0c;但是部署之后刷新页面报404。因为Umi 默认是用 browser 模式&#xff0c;需要做一下处理。 以下是官方给出解决方案。 一、解决方案 1. 方案一&#xff1a;改用hashHistory .umirc.js {history: { type: hash }, }这个方案项目打包…...

图片编辑器tui-image-editor

提示&#xff1a;图片编辑器tui-image-editor 文章目录 前言一、安装tui-image-editor二、新建components/ImageEditor.vue三、修改App.vue四、效果五、遇到问题 this.getResolve is not a function总结 前言 需求&#xff1a;图片编辑器tui-image-editor 一、安装tui-image-ed…...

如何使用“ubuntu移动文件、复制文件到其他文件夹“?

一、移动文件到其他文件夹命令 mv node_exporter-1.5.0.linux-amd64.tar.gz /usr/local/etc/prometheus 二、复制文件到其他文件夹命令 cp node_exporter-1.5.0.linux-amd64.tar.gz /home/master...

python实现B/B+树

python实现–顺序查找 python实现–折半查找 python实现–分块查找 python实现B/B树 B树和B树都是一种多路搜索树&#xff0c;用于对大量数据进行排序和查找。它们在数据库系统中被广泛应用&#xff0c;特别是用于构建索引结构。 B树&#xff08;B-Tree&#xff09; B树&…...

感觉捡到宝了!这究竟是哪位大神出的神器?

你们在制作简历时&#xff0c;是不是基本只关注两件事&#xff1a;简历模板&#xff0c;还有基本信息的填写。 当你再次坐下来更新你的简历时&#xff0c;可能会发现自己不自觉地选择了那个“看起来最好看的模板”&#xff0c;填写基本信息&#xff0c;却没有深入思考如何使简历…...

Vue教学17:Element UI基础组件上手,打造美观实用的Vue应用

大家好&#xff0c;欢迎回到我们的Vue教学系列博客&#xff01;在前十六篇博客中&#xff0c;我们学习了Vue.js的基础知识、安装Node.js与npm、使用Vue Devtools进行调试、Vue实例与生命周期钩子、数据绑定&#xff08;单向与双向&#xff09;、计算属性与侦听器、条件渲染和列…...

从政府工作报告探计算机行业发展(在医疗健康领域)

从政府工作报告探计算机行业发展 政府工作报告作为政府工作的全面总结和未来规划&#xff0c;不仅反映了国家整体的发展态势&#xff0c;也为各行各业提供了发展的指引和参考。随着信息技术的快速发展&#xff0c;计算机行业已经成为推动经济社会发展的重要引擎之一。因此&…...

ElasticSearch学习篇10_Lucene数据存储之BKD动态磁盘树

前言 基础的数据结构如二叉树衍生的的平衡二叉搜索树通过左旋右旋调整树的平衡维护数据&#xff0c;靠着二分算法能满足一维度数据的logN时间复杂度的近似搜索。对于大规模多维度数据近似搜索&#xff0c;Lucene采用一种BKD结构&#xff0c;该结构能很好的空间利用率和性能。 …...

运维实习生 - 面经 - 游族网络

2024.3.5 Boss投递 2024.3.6 回复 2024.3.8过初筛 2024.3.13面试 确认候选人姓名 自我介绍 我看你更多是做数据分析的&#xff1f; 你是实习的时候才接触Linux&#xff1f; 软件工程不应该是往开发方面发展的吗&#xff1f; 你最近有做运维方面的工作吗&#xff0c;技术…...

SpringBoot接口添加IP白名单限制

实现流程&#xff1a; 自定义拦截器——注入拦截器——获取请求IP——对比IP是否一致——请求返回 文章背景&#xff1a; 接口添加IP白名单限制&#xff0c;只有规定的IP可以访问项目。 实现思路&#xff1a; 添加拦截器&#xff0c;拦截项目所有的请求&#xff0c;获取请求的…...

用postman进行web端自动化测试

前言 概括说一下&#xff0c;web接口自动化测试就是模拟人的操作来进行功能自动化&#xff0c;主要用来跑通业务流程。 主要有两种请求方式&#xff1a;post和get&#xff0c;get请求一般用来查看网页信息&#xff1b;post请求一般用来更改请求参数&#xff0c;查看结果是否正…...

基于Java+SpringBoot+vue+element疫情物资捐赠分配系统设计和实现

基于JavaSpringBootvueelement疫情物资捐赠分配系统设计和实现 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 文章目录 基于JavaSpringBootvueelement疫情物资捐赠…...

(差分)胡桃爱原石

琴团长带领着一群胡桃准备出征&#xff0c;进攻丘丘人&#xff0c;出征前&#xff0c;琴团长根据不同胡桃的战力&#xff0c;发放原石作为军饷&#xff0c;琴团长分批次发放&#xff0c;每批次会给连续的几个胡桃发放相同的原石&#xff0c;琴团长最后想知道给每个胡桃发放了多…...

大学生论文降重技巧:用AI辅助,重复率轻松降到10%以下

2026年AI学术辅助工具已进入“精准合规改写、核心语义完整保留”的全新发展阶段&#xff0c;彻底解决了大学生论文降重“耗时长、改写生硬、易踩学术红线”的普遍难题。据中国高校图书馆协会2026年调研数据显示&#xff0c;超7成大学生在论文写作过程中会遇到重复率超标的问题&…...

基于Cortex-M3和步进电机的数字钟控制及其语音播报系统设计

一、系统概述 系统以Cortex-M3内核单片机&#xff08;如STM32F103C8T6&#xff09;为核心&#xff0c;融合步进电机精密驱动、实时时钟&#xff08;RTC&#xff09;、语音合成播报三大功能&#xff0c;实现“数字钟精准显示机械指针动态指示定时语音报时”的一体化设计。系统通…...

假芯片识别与防范:工程师实战指南

1. 假芯片泛滥&#xff1a;半导体行业的隐秘危机最近在调试一块电路板时&#xff0c;我发现一个奇怪的现象&#xff1a;明明使用的是同型号的MCU&#xff0c;但部分板子的功耗异常偏高。经过一周的排查&#xff0c;最终发现问题出在芯片上——我们采购到了一批"套牌"…...

【金蝶云星空】无发票模块非暂估模式下,期初应付录入

学习目标 学习本内容后&#xff0c;您将掌握如何录入在没发票模块&#xff0c;不启用暂估应付模式下的应付初始化数据 业务背景 本篇我们则进行讲解没发票模块&#xff0c;不启用暂估应付模式下如何录入期初数据。 业务场景有“先开票后入库、已入库未开票、已入库已开票未付…...

Linux内核调试实战:printk与动态调试技巧

1. Linux内核调试概述 作为一名嵌入式Linux开发者&#xff0c;我经常需要深入内核层面排查各种疑难杂症。经过多年实践&#xff0c;我发现掌握核心调试技巧能极大提升问题定位效率。本文将分享几个最实用的内核调试方法&#xff0c;包括printk日志分级、动态调试、异常捕获、调…...

PyTorch版本升级踩坑实录:从1.10.0到1.10.1为何导致CUDA不兼容?

PyTorch小版本升级的隐秘陷阱&#xff1a;CUDA兼容性深度解析与实战解决方案 当你满怀期待地执行pip install --upgrade torch命令&#xff0c;将PyTorch从1.10.0升级到1.10.1时&#xff0c;可能不会想到这个看似无害的小版本更新会让你的GPU突然"罢工"。这不是个例…...

2026 年真正必备的 10 个 Claude 插件(以及它们的作用)

如何把 Claude 从聊天机器人&#xff0c;变成能写代码、联网、访问数据、自动化全流程的超级 AIClaude 刚刚获得了超能力。 而大多数人还以为它只是个聊天机器人。 2026 年 2 月 24 日&#xff0c;Anthropic 为企业用户推出了私有插件市场。而在此两周前&#xff0c;社区已经发…...

Python AOT编译成本如何从$280K/年压至$49K/年?2026前最后窗口期的6个不可逆决策点

第一章&#xff1a;Python AOT编译成本断崖式下降的战略本质Python 长期以来被诟病于运行时开销高、启动慢、内存占用大&#xff0c;其核心瓶颈在于 CPython 解释器的字节码解释执行机制。而近年来&#xff0c;以 Nuitka、Cython&#xff08;搭配 --aot 模式&#xff09;、以及…...

遥感影像解译实战:从目视解译八要素到精准分类

1. 遥感影像解译的底层逻辑 第一次接触遥感影像时&#xff0c;我盯着屏幕上的彩色方块发懵——这堆像素点怎么能看出是森林还是农田&#xff1f;后来才发现&#xff0c;解译就像玩"大家来找茬"&#xff0c;关键要掌握八要素这把万能钥匙。大小、形状、阴影、颜色、纹…...

Naive UI 主题色定制实战:从组件覆盖到全局配置

1. 为什么需要定制Naive UI主题色&#xff1f; 当你使用Naive UI开发项目时&#xff0c;默认的绿色主题可能并不符合你的品牌风格。比如我们团队最近接手的一个金融类项目&#xff0c;客户要求整体UI采用深蓝色调&#xff0c;这时候就需要对Naive UI的主题色进行深度定制。主题…...