Docker 镜像 - 类型。修身 vs 修身弹力 vs 弹力 vs 高山

2024-01-01

我正在寻找一个 docker 镜像来构建一个 java 应用程序,并查看可用的 OpenJDK 镜像的变体。 我正在看这里https://github.com/docker-library/openjdk/tree/master/8/jdk https://github.com/docker-library/openjdk/tree/master/8/jdk并看到高山、苗条和窗户。 这些之间有什么区别以及每个变体提供什么?


根据 docker 库文档(下面的引用和链接),这里有一个摘要:

  • openjdk:<version>

事实上的图像。如果不确定,请使用它。

  • openjdk:<version>-buster, openjdk:<version>-stretch and openjdk:<version>-jessie

buster, jessie or stretch是版本的套件代码名称Debian https://wiki.debian.org/DebianReleases并指出哪个release该图像基于。

  • openjdk:<version>-alpine

同样,该图像基于阿尔卑斯Linux http://alpinelinux.org,因此是一个非常小的基础图像。如果您需要图像尺寸尽可能小,建议使用。需要注意的是,它使用了一些不寻常的库,但对于大多数软件来说应该不是问题。有疑问,请查看下面的官方文档。

  • openjdk:<version>(从12点开始),openjdk:<version>-oracle and openjdk:<version>-oraclelinux7

从...开始openjdk:12默认图像以及-oracle and -oraclelinux7变体基于官方Oracle Linux 7 映像 https://hub.docker.com/_/oraclelinux。 默认映像中的 OpenJDK 二进制文件以及-oracle and -oraclelinux7变体由 Oracle 构建并源自OpenJDK 社区 https://openjdk.java.net/.

  • openjdk:<version>-slim

该映像仅包含运行 Java 所需的最少包(例如,缺少许多与 UI 相关的 Java 库)。除非你工作的环境only the openjdk将部署映像并且您有空间限制,建议使用默认映像。

  • openjdk:<version>-windowsservercore

这张图片是基于Windows 服务器核心(microsoft/windowsservercore) https://hub.docker.com/r/microsoft/windowsservercore/.


完整文档(版本如下所示 https://github.com/docker-library/docs/blob/d4f015a4a99883c6b8691ec6aaf24a74cd02916a/openjdk/README.md, 最新版本在这里 https://github.com/docker-library/docs/blob/master/openjdk/README.md#image-variants):

图像变体

The openjdk图像有多种风格,每种风格都是为 具体用例。

openjdk:<version>

这是事实上的图像。如果您不确定自己的需求 是,您可能想使用这个。它被设计为同时使用 作为一次性容器(安装源代码并启动 容器来启动您的应用程序),以及构建其他应用程序的基础 图像关闭。

其中一些标签可能包含诸如 jessie 或stretch 之类的名称。 这些是版本的套件代号Debian https://wiki.debian.org/DebianReleases并指出哪个 发布图像是基于。

openjdk:<version>-alpine

这张图是根据流行的阿尔卑斯Linux 项目 http://alpinelinux.org,可用于the alpine官方的 图像 https://hub.docker.com/_/alpine。 Alpine Linux 更小 比大多数发行版基础镜像(~5MB)大,因此会导致很多 一般来说,图像更苗条。

当最终图像尺寸为 期望尽可能小。需要注意的主要警告是它确实 使用穆斯勒libc http://www.musl-libc.org代替glibc 和 朋友们 http://www.etalabs.net/compare_libcs.html,如此确定 软件可能会遇到问题,具体取决于其 libc 的深度 要求。不过,大多数软件都没有这个问题, 所以这个变体通常是一个非常安全的选择。看这个黑客新闻 评论区 https://news.ycombinator.com/item?id=10782897为了 对可能出现的问题进行更多讨论以及一些赞成/反对意见 使用基于 Alpine 的图像的比较。

为了最小化图像尺寸,额外的相关工具并不常见 (例如git or bash)包含在基于 Alpine 的图像中。使用 以此镜像为基础,在你自己的 Dockerfile 中添加你需要的东西 (参见alpine图像 描述 https://hub.docker.com/_/alpine/有关如何操作的示例 如果您不熟悉,请安装软件包)。

openjdk:<version>-windowsservercore

这张图片是基于Windows服务器核心 (microsoft/windowsservercore) https://hub.docker.com/r/microsoft/windowsservercore/。 因此,它仅适用于该图像适用的地方,例如 Windows 10 专业版/企业版(周年纪念版)或 Windows 服务器2016。

有关如何在 Windows 上运行 Docker 的信息,请参阅 微软提供的相关“快速入门”指南:

  • Windows 服务器快速入门 https://msdn.microsoft.com/en-us/virtualization/windowscontainers/quick_start/quick_start_windows_server
  • Windows 10 快速入门 https://msdn.microsoft.com/en-us/virtualization/windowscontainers/quick_start/quick_start_windows_10

openjdk:<version>-slim

该映像安装了-headlessOpenJDK 的包等等 缺少许多与 UI 相关的 Java 库和一些常用包 包含在默认标签中。它只包含最小的包 需要运行Java。除非你工作的环境only the openjdk将部署映像并且您有空间限制,我们强烈建议使用此默认映像 存储库。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 镜像 - 类型。修身 vs 修身弹力 vs 弹力 vs 高山 的相关文章

  • RxJava + Retrofit 2 的正确使用方法

    我有这样的 JSON success true data id 29 name u0420 u0435 u0441 u0442 u043e u0440 u0430 u0446 u0456 u044f u0411 u0430 u0447 u0
  • Java中的文字赋值[重复]

    这个问题在这里已经有答案了 定义上有什么区别 double example 23 1d or double example 23 1 为什么long float double可以以l f d结尾 之间没有区别double example 2
  • Spring boot 2.0.5.RELEASE和mongo 4.0连接问题

    我正在关注使用 MongoDB 访问数据教程春季网站 https spring io guides gs accessing data mongodb 我将 Mongo DB 服务器版本 4 安装为服务当我使用客户端连接到它时 它的身份验证
  • 使用正则表达式验证输入字符串是否为 0-255 之间的数字

    我在将输入字符串与正则表达式匹配时遇到问题 我想验证输入数字在 0 255 之间并且长度最多应为 3 个字符 代码工作正常 但当我输入 000000 至任意长度时 显示 true 而不是 false 这是我的代码 String IP 000
  • 如何将抽象工厂与单例模式结合起来? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在用 java 编码 并且对这些模式很陌生 谁能给我一个也使用单例的工厂抽象的例子 这是一个实现类的示例单例模式 这个实现也是线程安全
  • ResultSet:通过索引检索列值与通过标签检索

    使用 JDBC 时 我经常遇到这样的结构 ResultSet rs ps executeQuery while rs next int id rs getInt 1 Some other actions 我问自己 以及代码作者 为什么不使用
  • EL 通过 Scriptlet

    在 JSP 中使用 EL 相对于 scriptlet 的优势是什么 EL 被认为是无脚本语言 EL 使 JSP 免受容易出错原始 Java 代码并强制您根据 MVC 思想编写 JSP EL 或像 JSTL 这样的标签库 不可能实现的任何事情
  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • EMF Eclipse:带有自定义字段(属性)的枚举

    好吧 在 Java 中这是可能的 import org eclipse emf common util Enumerator public enum MyEnum implements Enumerator LITERAL1 0 Name
  • 我需要一个字数统计程序[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要弄清
  • vm 参数中的 -D 是什么,它表示为什么我们必须在 vm 参数中始终指定 -D

    vm 参数中的 D 是什么 它表示为什么我们必须在 vm 参数中始终指定 D 有什么标准吗 如果是 那是什么以及指定的位置 D 设置当前运行的 java 程序可以访问的属性值 它允许程序员设置程序运行所需的值 但程序不知道这些值是什么 因此
  • 反应式 Spring Webflux REST 控制器内部重定向

    我正在为 spring 反应项目创建简单的控制器服务器 在设置重定向到另一个位置时 我在调用时发现错误http localhost 8080 There was an unexpected error type Internal Serve
  • “___ 中的方法 ___() 是在无法访问的类或接口中定义的”编译错误

    我发现了一个奇怪的编译限制 我无法解释 并且我不明白这个限制的原因 示例1 考虑这些类 In package e1 public class C1 enum E1 A B C public E1 x In package e2 import
  • javax.xml.bind.JAXBException: 类 *** 及其任何超类在此上下文中均未知

    我正在尝试通过 REST Web 服务传递对象 以下是我的课程 使用一些示例代码解释了我需要的功能 Rest Web 服务类方法 POST Path find Consumes MediaType APPLICATION FORM URLE
  • 更新分页。是否可以?

    他们是否存在一些方法来处理更新分页 例如我有 100 行类型 Id private Integer id Column private boolean flag Column private Date last 一开始它们看起来像 id f
  • while 之后无法访问的语句[重复]

    这个问题在这里已经有答案了 我只是修改代码 在以下代码中出现错误 int x 1 System out println x x while true x System out println x x 错误在最后一行 我可以知道错误 错误 无
  • AndroidAnnotations 和 Dagger

    我正在尝试使用 Dagger 注入 Android 带注释的 Activity java lang IllegalArgumentException No inject registered for members com app serv
  • 在没有EOF的情况下停止读取java中的输入

    In 问题 如何停止读取输入 我的程序继续运行 要求更多输入 public static void main String args throws Exception BufferedReader br new BufferedReader
  • 获取Java中ResultSet返回的行数

    我用过一个ResultSet返回一定数量的行 我的代码是这样的 ResultSet res getData if res next System out println No Data Found while res next code t
  • 使用 PDFBox 在 Android 中创建 PDF

    我正在尝试通过我的 Android 应用程序创建 PDFPDFBoxapi 但出现以下错误 java lang NoClassDefFoundError org apache pdfbox pdmodel PDDocument 我已经将以下

随机推荐

  • Eclipse:有没有办法在组织导入中强制导入来解决歧义?

    我在 android 项目上使用 Eclipse 我更新到 Lion 问题开始出现 尝试了几个小时 没有结果 问题是这样的 我有几十个文件com stuff morestuff在我的项目中 我想 ctrl shift O 我的项目 这样每个
  • VS2010单元测试“待处理”且测试无法完成

    我正在使用 VS2010 Windows 7 每次我尝试运行单元测试时 它都会保持 待处理 状态并且测试无法完成 我试着遵循这个msdn说明 http msdn microsoft com en us library ms182532 28
  • Netflix 如何在不刷新页面且无需 JavaScript 的情况下提交评分?

    我正在尝试为我的网站做一些类似 Netflix 的 5 星级评级系统的事情 我注意到 Netflix 即使禁用了 JavaScript 仍然会在不刷新页面的情况下提交评级 这是显而易见的 因为当您手动重新加载页面时 您可以看到新的评级 但是
  • React-navigation 在调试模式下工作正常,但在发布模式下不行

    几周以来我遇到了一个问题 我在我的react native应用程序中使用react navigation 当我在调试模式下在我的设备上测试时 我在屏幕之间正确导航 但是当我构建签名的apk时 导航不再工作 我尝试了一切 但没有任何效果 我正
  • 在已知缺失时间间隔之间插入 3D 坐标

    数据是空间中的路径 我有 3D 位置数据 x y z 和记录位置点的时间 x y 和 z 坐标是物体在 3D 空间中移动的点位置 时间值是记录每个点的时间 从 0 开始 x y z time s 0 1 2 2 3 3 0 2 4 2 4
  • 为什么不在java中使用带有锁的try?

    我读了这个话题 https stackoverflow com questions 6965731 are locks autocloseable 和这个博客文章 http www java7developer com blog p 256
  • 编译时出现错误?

    当我编译代码时 我收到这些错误 我有 user include 下的所有标题 g Ip appmanager inc Icore inc p appmanager src appmanager process cpp o p appmana
  • 本地主机上的 404 错误

    我正在尝试使用一些ajax 来发送一些电子邮件 我在使用冷聚变之前已经这样做过并且没有任何问题 我遇到的是本地主机未在目录中找到明确的文件 事实上 该文件与index php 位于同一目录中 这没有发现任何问题 然而它给了我一个404错误找
  • 使用 LiveData、协程和事务测试 Android Room

    我想测试我的数据库层 但我陷入了第 22 条军规类型的情况 测试用例由两部分组成 保存一些实体 加载实体并断言数据库映射按预期工作 简而言之 问题在于 Insert is a suspend方法 这意味着它需要运行在runBlocking
  • Eclipse“正确缩进”忽略空格与制表符设置

    我正在 Windows 中运行 Eclipse Juno Service Release 2 20130225 0426 我发现自动缩进 Ctrl I 会忽略常规 编辑器 文本编辑器 插入选项卡空格和 Java 代码样式 格式化程序 缩进
  • “无处不在”使用 LINQ 时的性能问题?

    升级到 ReSharper5 后 它为我提供了更多关于代码改进的有用提示 我现在随处看到的一个提示是用 LINQ 查询替换 foreach 语句 举个例子 private Ninja FindNinjaById int ninjaId fo
  • 获取 Android 上的应用程序安装日期

    有没有办法找出 Android 设备上的 应用程序安装日期 进行了大量搜索 但无法找到相关答案 无法找到有关应用程序安装日期的任何信息PackageManager文档 代码 或这个 API 级别 9向上 long installed con
  • Z Shell“自动加载”内置 - 它有什么好处?

    我已经使用 Z shell 一段时间了 我开始感到好奇 我在编写自己的函数时偶然发现的一件事是 自动加载 根据 zshbuiltins 1 手册页autoload是 相当于functions u 有一个例外 它 相当于typeset f 有
  • Webkit 必须始终在主线程上使用吗?

    我试图在后台渲染网页 但遇到了以下麻烦 2012 05 11 12 39 02 086 77207 1c03 An uncaught exception was raised 2012 05 11 12 39 02 087 77207 1c
  • 在从代码库中的 dockerfile 构建的 Docker 容器中运行 Jenkins 测试

    我想部署一个基于Jenkins的持续集成平台 由于我有各种类型的项目 PHP Symfony node Angular 等 并且我希望这些测试既可以在本地运行 也可以在 Jenkins 上运行 所以我正在考虑使用 Docker 容器 我的目
  • 数据库内部结构 - 从哪里开始? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 假设您想了解一些有关数据库内部结构的知识 最好看的源代码是什么 最好买的书 前几天我和一个朋友讨论这个问
  • 构建 Qt5 Git / Perl - 路径

    我的理解能力有点问题 In the Qt Wiki http qt project org wiki Building Qt 5 from Git aea23489ce3aa9b6406ebb28e0cda430上面写着我必须 Hint 确
  • 如何将 Delphi 调试器附加到 64 位 IIS 7.5?

    我在 Windows 7 Pro 64 和 IIS 7 5 上运行 Delphi XE 开发 ISAPI 应用程序 IIS 配置正确 包括允许 32 位代码在 ISAPI 进程中运行 ISAPI进程运行正常 在 Delphi 中 我尝试附加
  • Chrome Inspect - 关闭预览框架

    在 Chrome 的最新更新中 检查 窗口 chrome inspect 有一个预览窗口 在屏幕移动框架中显示网页 我该如何关闭它 到目前为止 我所做的最接近的事情是减少宽度 这样它就不会占用太多的屏幕空间 图片示例 您可以使用下面突出显示
  • Docker 镜像 - 类型。修身 vs 修身弹力 vs 弹力 vs 高山

    我正在寻找一个 docker 镜像来构建一个 java 应用程序 并查看可用的 OpenJDK 镜像的变体 我正在看这里https github com docker library openjdk tree master 8 jdk ht