Springboot的Container Images,docker加springboot

news2024/11/15 19:37:38

Spring Boot应用程序可以使用Dockerfiles容器化,或者使用Cloud Native Buildpacks来创建优化的docker兼容的容器映像,您可以在任何地方运行。

1. Efficient Container Images

很容易将Spring Boot fat jar打包为docker映像。然而,像在docker映像中那样复制和运行fat jar有很多缺点。在不拆包的情况下运行fat jar总是会有一定的开销,在容器化的环境中,这是很明显的。另一个问题是,将应用程序的代码及其所有依赖项放在Docker映像的一个层中是次优的。由于重新编译代码的次数可能比升级所使用的Spring Boot版本的次数要多,因此最好将代码分开。如果将jar文件放在应用程序类之前的层中,Docker通常只需要更改最底层,并且可以从缓存中获取其他层。

1.1. Unpacking the Executable JAR

如果从容器中运行应用程序,则可以使用可执行jar,但将其扩展并以不同的方式运行通常也是一种优势。某些PaaS实现也可能选择在运行存档之前解包。例如,Cloud Foundry就是这样运作的。运行解压缩存档文件的一种方法是启动适当的启动器,如下所示:

$ jar -xf myapp.jar
$ java org.springframework.boot.loader.JarLauncher

这实际上在启动时(取决于jar的大小)比从未分解的存档运行要稍微快一些。在运行时,您不应该期望有任何差异。

一旦你解压缩了jar文件,你还可以通过使用“自然的”main方法而不是JarLauncher来运行应用程序,从而获得额外的启动时间提升。例如:

$ jar -xf myapp.jar
$ java -cp BOOT-INF/classes:BOOT-INF/lib/* com.example.MyApplication

在应用程序的main方法上使用JarLauncher有一个可预测的类路径顺序的额外好处。jar包含一个类路径。该文件在JarLauncher构造类路径时使用。

1.2. Layering Docker Images

为了更容易地创建优化的Docker映像,Spring Boot支持向jar中添加一个层索引文件。它提供了一个层列表以及应该包含在这些层中的jar部分。索引中的层列表是根据层应该添加到Docker/OCI映像的顺序排序的。开箱即用,支持以下层:

  • dependencies (对于常规发布的依赖项)

  • spring-boot-loader (对于所有在org/springframework/boot/loader下的东西)

  • snapshot-dependencies (对于快照依赖项)

  • application (适用于应用程序类和资源)

The following shows an example of a layers.idx file:

- "dependencies":
  - BOOT-INF/lib/library1.jar
  - BOOT-INF/lib/library2.jar
- "spring-boot-loader":
  - org/springframework/boot/loader/JarLauncher.class
  - org/springframework/boot/loader/jar/JarEntry.class
- "snapshot-dependencies":
  - BOOT-INF/lib/library3-SNAPSHOT.jar
- "application":
  - META-INF/MANIFEST.MF
  - BOOT-INF/classes/a/b/C.class

2. Dockerfiles

虽然在Dockerfile中只需要几行就可以将Spring Boot fat jar转换为docker映像,但我们将使用分层特性来创建优化的docker映像。当您创建包含layers索引文件的jar时,spring-boot-jarmode-layertools jar将作为依赖项添加到jar中。有了这个jar放在类路径上,您就可以以一种特殊模式启动应用程序,这种模式允许引导代码运行与应用程序完全不同的东西,例如,提取层的东西。

layertools模式不能用于包含启动脚本的完全可执行的Spring Boot归档文件。在构建打算与layertools一起使用的jar文件时,禁用启动脚本配置。

下面是使用layertools jar模式启动jar的方法:

$ java -Djarmode=layertools -jar my-app.jar

这将提供以下输出:

Usage:
  java -Djarmode=layertools -jar my-app.jar

Available commands:
  list     List layers from the jar that can be extracted
  extract  Extracts layers from the jar for image creation
  help     Help about any command

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

假设上面的Dockerfile在当前目录下,你的docker镜像可以使用docker build .来构建,或者可以选择指定应用程序jar的路径,如下所示:

$ docker build --build-arg JAR_FILE=path/to/myapp.jar .

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1151383.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能分析视频平台EasyCVR地图功能出现异常该如何解决?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

41基于matlab的CNN的图像边缘提取,程序已调通,可直接运行。

基于matlab的CNN的图像边缘提取,程序已调通,可直接运行。 41matlabCNN图像边缘提取 (xiaohongshu.com)

《AI时代架构师修炼之道:ChatGPT让架构师插上翅膀》

本专注于帮助架构师在AI时代 实现晋级、提高效率的图书 书中介绍了如何使用 ChatGPT 来完成架构设计的各个环节 并通过实战案例展示了ChatGPT在实际架构设计中的应用方法 关键点 1.架构设计新模式:让架构设计更高效、更快捷、更完美。 2.全流程解析:涵盖…

List的add(int index,E element)陷阱,不得不防

项目场景: 项目中有两个List列表,一个是List1用来存储一个标识,后续会根据这个标识去重。 一个List2是用来返回对象的,其中对象里也有一个属性List3。现需要将重复的标识数据追加到List3 我想到的两个方案: 尽量不动…

设计工位卡片

因为今天接到了一个设计工位卡片的任务,于是在这里记录一哈,设计卡片所需要的一些东西: 设计卡片的网站有以下几个可供参考: Canva:提供各种类型的卡片设计模板,包括圣诞贺卡、生日贺卡、感谢卡等&#x…

CL_MVSNet复现可能会出现的问题汇总

1.最好按照说明文档要求配好python3.7和pytorch1.0 2. 【已解决】 FutureWarning: The module torch.distributed.launch is deprecated and will be removed in future. torch.distributed.launch被弃用,考虑使用torchrun模块进行替换。 解决方案: 将…

pyzed.sl 突然 ImportError: DLL load failed while importing sl: 找不到指定的程序。 的解决

问题描述 >>> import pyzed.sl Traceback (most recent call last):File "<stdin>", line 1, in <module> ImportError: DLL load failed while importing sl: 找不到指定的程序。解决 1 按网上说的&#xff0c;将bin文件夹下所有dll复制到py…

2023年美团外卖商家数据(含销量)

2023年美团外卖商家、地址、电话、经纬度、起送价、月销量、评分、经营许可

前端移动web高级详细解析三

模拟移动设备&#xff0c;方便查看页面效果 屏幕分辨率 分类&#xff1a; 物理分辨率&#xff1a;硬件分辨率&#xff08;出厂设置&#xff09; 逻辑分辨率&#xff1a;软件 / 驱动设置 结论&#xff1a;制作网页参考 逻辑分辨率 视口 作用&#xff1a;显示 HTML 网页的区…

数据结构:绪论(数据对象,逻辑结构,数据的运算,物理结构)

目录 1.数据2.数据元素、数据项3.数据对象4.数据结构1.逻辑结构1.集合结构2.线性结构3.树形结构4.图状结构 2.数据的运算3.物理结构&#xff08;存储结构&#xff09;1.顺序存储2.链式存储3.索引存储4.散列存储 4.数据结构的选择 5.数据类型 1.数据 数据是信息的载体&#xff0…

返利管理系统建设指南

目录 引子 一、返利业务模式介绍 1. 什么是返利 2. 返利与优惠区别 3. 业务模式 4. 返利管理业务流程 二、返利系统建设说明 1. 业务架构 2. 主要功能 三、结束语 引子 返利作为供应商在商业活动开拓新市场、挖掘存量市场潜力&#xff0c;激励经销商的销售策略&…

Mac/Linux类虚拟机_CrossOver虚拟机CrossOver 23.6正式发布2024全新功能解析

CodeWeivers 公司于今年 10 月发布了 CrossOver 23.6 测试版&#xff0c;重点添加了对 DirectX 12 支持&#xff0c;从而在 Mac 上更好地模拟运行 Windows 游戏。 该公司今天发布新闻稿&#xff0c;表示正式发布 CrossOver 23 稳定版&#xff0c;在诸多新增功能中&#xff0c;最…

HackerOne支付给道德黑客超过3亿美元的漏洞赏金

导语 近日&#xff0c;HackerOne宣布自其成立以来&#xff0c;其漏洞赏金计划已经支付给道德黑客和漏洞研究人员超过3亿美元的奖励。这个数字令人瞠目结舌&#xff0c;展示了道德黑客在网络安全中的重要性。让我们一起来看看HackerOne的成就和一些有趣的数据。 道德黑客的奖励 …

项目资源管理-考试重点

1. 冲突管理的5种方法 ① 撤退/回避 ② 缓和/包容 ③ 妥协/调解 ④ 强迫/命令 ⑤ 合作/解决问题 2. 虚拟团队的优缺点 优点&#xff1a; ① 能够利用不在同一地理区域的专家的专业技术 ② 将在家办公的员工纳入团队 ③ 以及将行动不便者或残疾人纳入团队 缺点&#…

codeforces (C++ Doremy‘s Paint 3)

题目&#xff1a; 翻译&#xff1a; 思路&#xff1a; 1、题目意思&#xff1a;将数组中的数进行排列&#xff0c;任意相邻两个数的和都相等&#xff0c;才能说这个数组为好。一下分三种情况讨论。 2、当数组中有三种及三种以上的数字&#xff0c;那任意相邻两个数的和都相等必…

【算法】染色法判定二分图

题目 给定一个 n 个点 m 条边的无向图&#xff0c;图中可能存在重边和自环。 请你判断这个图是否是二分图。 输入格式 第一行包含两个整数 n 和 m。 接下来 m 行&#xff0c;每行包含两个整数 u 和 v&#xff0c;表示点 u 和点 v 之间存在一条边。 输出格式 如果给定图是二分…

Linux网络编程02

UDP协议 UDP协议处于传输层&#xff0c;是不可靠谱、无连接、消息有边界的协议 TCP类似于管道&#xff0c;UDP类似于队列 UDP头部 传输层头部都不需要IP地址&#xff0c;都只需要端口号 Berkeley Socket&#xff08;库&#xff09; Berkeley Scoket 库已经完成了传输层之下…

【Xilinx Kintex-7 Virtex-7 LVDS bank电压】

各种介绍很多&#xff0c;也都写的似乎很长很详细&#xff0c;但有错误。 详细的查阅Xilinx 论坛 43989 核心 总结一下就是Xilinx 7serious 的FPGA ,你如果要配置成LVDS,这的LVDS是正儿八经的那种&#xff0c;那么FPGA 这块你只需要记住两点就可以。 第一&#xff0c;假如你…

docker-compose 简单部署Flask + Redis + Nginx环境搭建网站

主博客目录&#xff1a;《从零开始学习搭建量化平台笔记》 主项目计划需要搭建一个 Flask Redis Nginx环境 来制作一个可视化的网站&#xff0c;为了避免搭完就忘&#xff0c;因此就有了这个博客。 任务&#xff1a;搭建一个内网通信且只有由Nginx代理发放的网页端显示环境。…

Unity多人同时在线海量玩家角色的架构与设计

前言 Unity多人同时在线的游戏会有很大的地图&#xff0c;大量的玩家同时在线,以及玩家会有不同的游戏职业&#xff0c;这样众多的玩家游戏角色我们客户端应该如何来设计呢&#xff1f;本文来分享以下几个点 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;希望大家…