Openjdk Docker镜像之间的区别:Slim vs Slim-Stretch vs Stretch vs Alpine

内容

Docker 是一个容器化平台,帮助开发人员将他们的应用程序捆绑成一个称为容器的单元。OpenJDK 是 Java 开发工具包(JDK)的免费、社区维护版本。用于 OpenJDK 的 Docker 镜像是预配置的环境,包括 OpenJDK 运行时和工具。

**选择正确的OpenJDK Docker镜像至关重要,因为它可能会影响我们软件的性能、大小和安全性。不同的镜像会带来不同的妥协,比如镜像的大小或速度。**因此,了解OpenJDK Docker镜像之间的区别对做出最终决定至关重要。

在本教程中,我们将学习有关不同 OpenJDK Docker 镜像之间的区别。

注意:截至2022年7月,Docker Hub已弃用OpenJDK镜像。建议用户使用适当的替代品,如Amazon Corretto和Eclipse Temurin。

  1. 理解差异

这些镜像之间的主要区别在于基础操作系统、集成软件包和整体镜像大小。Slim和Slim-Stretch基于Debian Linux,而Stretch基于完整的“stretch”版本的Debian。另一方面,Alpine使用Alpine Linux发行版,以其紧凑的大小和安全措施而闻名。

在最小和最大的镜像中,Slim 是最小的,而 Stretch 是最大的。Alpine 也是一个小型镜像,但它基于不同的 Linux 发行版。不同镜像的性能取决于工作负载和使用情况。Slim 和 Alpine 镜像通常比较快,使用的资源较少,而较大的镜像可能对需要更多依赖项的应用程序有必要。Alpine 镜像有一个庞大且活跃的社区,支持并更新该镜像,而 Slim 和 Stretch 镜像可能拥有较小的社区。

  1. 纤瘦

Slim镜像是最小的OpenJDK Docker镜像,Java 8版本的大小约为_295MB_。它经过优化,适用于生产环境,并仅包含运行Java应用程序所需的最小软件包。让我们看一下拉取OpenJDK Slim镜像Java 8版本的命令:

$ docker pull openjdk:8-jdk-slim
8-jdk-slim: 正在从 library/openjdk 拉取
1efc276f4ff9: 下载完毕 
a2f2f93da482: 下载完毕 
1a2de4cc9431: 下载完毕 
9013b84ebbe7: 下载完毕 
Digest: sha256:19578a1e13b7a1e4cab9b227fb7b5d80e14665cf4024c6407d72ba89842a97ed
状态: 已下载更新的镜像 openjdk:8-jdk-slim
docker.io/library/openjdk:8-jdk-slim

Slim 镜像是适合需要小镜像大小和快速启动时间的应用程序的良好选择,例如微服务和无服务器函数。让我们来看看 openjdkL8-jdk-slim 的镜像大小:

$ docker images openjdk:8-jdk-slim
仓库        标签          镜像 ID       创建时间        大小
openjdk      8-jdk-slim   80e75f92be33   7 个月前      295MB

使用 Slim 镜像的主要优点是其小巧的体积和快速的启动时间。该包仅包含我们运行 Java 应用程序所需的组件,而不包含任何多余的包。需要较少依赖的应用程序将从这个镜像中受益。由于包的最小化设置,它可能不适合所有应用程序。

  1. 修身弹力

Slim-Stretch 镜像是一个明智的选择,适用于需要小镜像大小但需要来自 Debian “stretch” 版本的额外软件的情况。这可能涉及需要工具或库的软件,而这些工具或库并不包含在之前的 Debian 版本中。例如,libfontconfig1 在 Slim 镜像中不可用,而 Slim-Stretch 包含来自 Debian stretch 版本的额外工具和库,包括 libfontconfig1.

使用 Slim-Stretch 的主要好处是它包含了在之前的 Debian 版本中未包含的额外软件包,同时又继承了 Slim 镜像的小体积。缺点是 Slim-Stretch 可能没有针对生产环境进行精细调优。让我们来看一下拉取 openjdk:8-jdk-slim-stretch 镜像的命令:

$ docker pull openjdk:8-jdk-slim-stretch
8-jdk-slim-stretch: 从 library/openjdk 拉取
fc7181108d40: 拉取完成 
73f08ce352c8: 拉取完成 
eac271a34b40: 拉取完成 
774220066612: 拉取完成 
摘要: sha256:9fa43d5e1c45e42c0dbbf3713d49edd8e7cc01be9e1c4ef5e723efd6dfb47929
状态: 已下载更新的镜像 openjdk:8-jdk-slim-stretch
docker.io/library/openjdk:8-jdk-slim-stretch

让我们查看一下 openjdk:8-jdk-slim-stretch 的镜像大小:

$ docker images openjdk:8-jdk-slim-stretch
REPOSITORY   TAG                  IMAGE ID       CREATED       SIZE
openjdk      8-jdk-slim-stretch   4de02be2e9ab   3年前       269MB

Slim-Stretch 镜像与 Slim 镜像非常相似,但附带了来自 Debian “stretch” 版本的额外软件包。

  1. 拉伸

Stretch 镜像是 Slim、Slim-Stretch 和 Stretch 镜像中最重的。它具有比其他镜像更广泛的包和依赖关系,因此对于某些应用程序来说是一个合适的选择。Stretch 中有 libgtk-3-dev,提供 GTK+ 版本 3,但在 Slim 或 Slim-Stretch 中不存在。一些具有图形用户界面的应用程序需要这个库,而这个库可能不包含在较小的镜像中。

使用 Stretch 的主要好处是其全面的包和依赖关系,这对于特定应用程序可能至关重要。然而,它的体积明显大于其他镜像,并且可能不如其他镜像优化用于生产目的。让我们来看一下拉取 openjdk:8-jdk-stretch 镜像的 Java 8 版本的命令:

$ docker pull openjdk:8-jdk-stretch
8-jdk-stretch: 从 library/openjdk 拉取
3192219afd04: 拉取完成 
17c160265e75: 拉取完成 
cc4fe40d0e61: 拉取完成 
9d647f502a07: 拉取完成 
d108b8c498aa: 拉取完成 
1bfe918b8aa5: 拉取完成 
dafa1a7c0751: 拉取完成 
Digest: sha256:d8d62fe0d8e9f3e6e62921c7d738c9a962efd6887b2b282dc2f852d7f1ee4512
Status: 已下载更新的 openjdk:8-jdk-stretch 镜像
docker.io/library/openjdk:8-jdk-stretch

让我们查看一下 openjdk:8-jdk-stretch 的镜像大小:

$ docker images openjdk:8-jdk-stretch
仓库         标签             镜像 ID       创建时间       大小
openjdk      8-jdk-stretch   0bfcee65c8ca   3 年前       488MB

Stretch 镜像是一个实用的选择,适用于需要广泛软件包和依赖项的应用,特别是那些需要在较小镜像中缺失的特定库或工具的应用。

  1. 阿尔卑斯

Alpine 镜像 依赖于 Alpine Linux 操作系统,该系统以其紧凑的大小和安全特性而闻名。它是可用的最紧凑的 OpenJDK Docker 镜像。

利用 Alpine 的主要好处是其小巧的体积和强大的安全特性。然而,由于它有不同的包管理器,并且可能不包含某些应用程序所需的所有包,因此它可能不适合所有软件应用程序。让我们来看看拉取 openjdk:8-jdk-alpine 镜像的 Java 8 版本的命令:

$ docker pull openjdk:8-jdk-alpine
8-jdk-alpine: 从库/library/openjdk 拉取
e7c96db7181b: 拉取完成 
f910a506b6cb: 拉取完成 
c2274a1a0e27: 拉取完成 
摘要: sha256:94792824df2df33402f201713f932b58cb9de94a0cd524164a0f2283343547b3
状态: 已下载更新的镜像 openjdk:8-jdk-alpine
docker.io/library/openjdk:8-jdk-alpine

让我们查看一下 openjdk:8-jdk-alpine 的镜像大小:

$ docker images openjdk:8-jdk-alpine
仓库         标签            镜像 ID       创建时间       大小
openjdk      8-jdk-alpine   a3562aa0b991   3 年前       105MB

Alpine 镜像是一个聪明的选择,适用于需要小镜像大小和安全设置的应用程序,例如在容器化或云原生环境中运行的应用。

  1. 选择合适的 OpenJDK 镜像

选择适合我们需求的 OpenJDK Docker 镜像是一个至关重要的决定,这可能会影响我们应用程序的性能、大小、稳定性和安全性。通过了解可用镜像之间的差异,并考虑镜像大小、性能要求和依赖关系等因素。因此,我们可以优化我们应用程序的性能。

在选择 OpenJDK Docker 镜像时,重要的是考虑镜像的大小、我们应用的性能要求以及我们应用所需的特定依赖项。选择理想的 OpenJDK Docker 镜像的最佳实践始于满足我们要求的最小镜像。此外,我们可以尝试各种镜像,以确定最优性能,并定期用安全补丁更新我们的镜像。

  1. 结论

在本文中,我们了解了不同 OpenJDK Docker 镜像之间的差异。Slim 是针对生产使用优化的最小镜像。Slim-Stretch 包含来自 Debian “stretch” 版本的额外软件包。Stretch 包含更大的一组软件包和依赖项,而 Alpine 是基于 Alpine Linux 发行版的最小镜像,具有强大的安全特性。

总结
Docker是一个容器化平台,帮助开发人员将应用程序打包成一个称为容器的单元。OpenJDK是Java开发工具包(JDK)的免费、社区维护版本。不同的OpenJDK Docker镜像在基础操作系统、集成软件包和整体镜像大小等方面存在差异。Slim镜像最小,适用于需要小镜像大小和快速启动时间的应用,而Stretch镜像最大,适用于需要更多依赖的应用。Alpine镜像基于Alpine Linux,体积小且安全性高。选择合适的OpenJDK Docker镜像对软件的性能、大小和安全性至关重要。Alpine镜像适用于需要小镜像大小和安全设置的应用,而Stretch镜像适用于需要广泛依赖的应用。