我对OpenJDK容器镜像进行了调查
这篇文章是NTT Comware Advent Calendar 2023的第11天的文章。
首先
我是NTT Comware的坂本翔平。平时从事OpenJDK技术支援和技术研究工作。
随着容器技术的普及,我们有更多机会在容器环境中运行Java应用程序。
然而,每次在容器中手动安装OpenJDK以运行Java应用程序是相当麻烦的事情。
最近,许多OpenJDK发行商开始提供打包了OpenJDK的容器镜像。本文将简要介绍这些OpenJDK容器镜像的种类和内容。
请预先了解,随着信息的更新,本文所提及的内容可能会有所变动。
OpenJDK的容器映像
可以从Docker Hub获取的映像
以下是关于在Docker Hub上存在的OpenJDK容器镜像的一些介绍。
同时展示了每个镜像的使用示例,包括java -version的输出结果。
日食-泰穆琳
Eclipse Temurin(AdoptOpenJDK 的旧版)是由 Adoptium 社区提供的 OpenJDK 发行版。
Eclipse Temurin 受到 RedHat 公司的支持,并且其提供的容器映像的基本操作系统是 UBI(Universal Base Image),这是其特点之一。
$ docker run -it --rm eclipse-temurin:17-jdk java -version
openjdk version "17.0.9" 2023-10-17
OpenJDK Runtime Environment Temurin-17.0.9+9 (build 17.0.9+9)
OpenJDK 64-Bit Server VM Temurin-17.0.9+9 (build 17.0.9+9, mixed mode, sharing)
sapmachine – 树液机器
SapMachine是由SAP公司提供的OpenJDK发行版。
仅可使用基于Ubuntu操作系统的容器镜像。
$ docker run -it --rm sapmachine:17-jdk-ubuntu java -version
openjdk version "17.0.9" 2023-10-17 LTS
OpenJDK Runtime Environment SapMachine (build 17.0.9+0-LTS)
OpenJDK 64-Bit Server VM SapMachine (build 17.0.9+0-LTS, mixed mode, sharing)
亚马逊 Corretto
$ docker run -it --rm amazoncorretto:17 java -version
openjdk version "17.0.9" 2023-10-17 LTS
OpenJDK Runtime Environment Corretto-17.0.9.8.1 (build 17.0.9+8-LTS)
OpenJDK 64-Bit Server VM Corretto-17.0.9.8.1 (build 17.0.9+8-LTS, mixed mode, sharing)
Amazon Corretto是由亚马逊提供的OpenJDK发行版。它提供了以AWS Linux发行版Amazon Linux为基础操作系统的OpenJDK容器映像,这是它的一个特点。
Microsoft构建的OpenJDK
Microsoft Build of OpenJDK 是由Microsoft提供的OpenJDK分发版本。
其中一个特点是它提供了基于Microsoft开发的免费开源Linux分发版本CBL Mariner为基础操作系统的OpenJDK容器镜像。
$ docker run -it --rm mcr.microsoft.com/openjdk/jdk:17-ubuntu java -version
openjdk version "17.0.9" 2023-10-17 LTS
OpenJDK Runtime Environment Microsoft-8552009 (build 17.0.9+8-LTS)
OpenJDK 64-Bit Server VM Microsoft-8552009 (build 17.0.9+8-LTS, mixed mode, sharing)
祖鲁开放JDK
Zulu OpenJDK 是由Azul Systems提供的OpenJDK发行版。最近,他们发布了支持Java启动加速技术CRaC(Coordinated Restore at Checkpoint)的版本(不只是容器镜像)。他们提供了各种类型的基于不同操作系统的OpenJDK镜像。
$ docker run -it --rm azul/zulu-openjdk:17 java -version
openjdk version "17.0.9" 2023-10-17 LTS
OpenJDK Runtime Environment Zulu17.46+19-CA (build 17.0.9+8-LTS)
OpenJDK 64-Bit Server VM Zulu17.46+19-CA (build 17.0.9+8-LTS, mixed mode, sharing)
露琪卡JDK
Liberica JDK 是由BellSoft公司提供的OpenJDK发行版本。它提供了适用于各种操作系统的OpenJDK镜像。
$ docker run -it --rm bellsoft/liberica-openjdk-debian:17 java -version
openjdk version "17.0.9" 2023-10-17 LTS
OpenJDK Runtime Environment (build 17.0.9+17-LTS)
OpenJDK 64-Bit Server VM (build 17.0.9+17-LTS, mixed mode)
其他(附言)
我对是否存在名为java或openjdk的容器镜像感到好奇,所以我进行了一番调查。
Java是一种广泛使用的编程语言。
执行命令docker pull java时遇到以下错误,无法获取镜像。
$ docker pull java
Using default tag: latest
Error response from daemon: manifest for java:latest not found: manifest unknown: manifest unknown
为了确认一下,我试着在 Docker search 中查找,发现有很多获得了很多 STARS 的名为 “java” 的镜像。
$ docker search java
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
node Node.js is a JavaScript-based platform for s… 13086 [OK]
tomcat Apache Tomcat is an open source implementati… 3610 [OK]
java DEPRECATED; use "openjdk" (or other JDK impl… 1998 [OK]
...
由于在说明中标有“已弃用”,所以似乎目前不再使用。
在Docker Hub的java镜像页面上进行确认后,发现如下所示确实存在。
- https://hub.docker.com/_/java
根据这个页面,Java镜像已经被标记为弃用,从2016年12月31日开始将不再更新。这似乎是相当陈旧的镜像。
另外,作为替代Java的镜像,我将进一步查看openjdk镜像。
因此,openjdk镜像也存在…
开放JDK
我已经确认了之前提到的存在,现在我要确认一下。
当我执行 docker pull openjdk 命令时,成功获取到了以下的镜像。
$ docker pull openjdk
Using default tag: latest
latest: Pulling from library/openjdk
197c1adcd755: Pull complete
57b698b7af4b: Pull complete
95a27dbe0150: Pull complete
Digest: sha256:9b448de897d211c9e0ec635a485650aed6e28d4eca1efbc34940560a480b3f1f
Status: Downloaded newer image for openjdk:latest
docker.io/library/openjdk:latest
我将尝试利用已获取的图像。
$ docker run -it --rm openjdk java -version
openjdk version "18.0.2.1" 2022-08-18
OpenJDK Runtime Environment (build 18.0.2.1+1-1)
OpenJDK 64-Bit Server VM (build 18.0.2.1+1-1, mixed mode, sharing)
我已经执行了,但是Java 18 不是LTS版本,也不是最新版本。
因为之前使用docker pull命令获取的是openjdk:latest版本,所以Java 18 是最新版本这一点让人感到不协调。
于是我查看了OpenJDK镜像的Docker Hub页面。
- https://hub.docker.com/_/openjdk
总结该页内容如下。
openjdk イメージはセキュリティ上の問題から非推奨となった
2022年7月以降は jdk.java.net の早期アクセスビルドのみ提供されるようになった
上記に伴い Java 18 の EOL と同時に latest タグ等の更新も終了した
需要注意的是,作为Java图像的替代选择,OpenJDK图像也已被视为不推荐使用。这意味着我们应该使用各供应商提供的OpenJDK容器图像。
最后
本文简要介绍了OpenJDK容器镜像。
由于来自各种发行商的镜像都可用,因此在使用时请根据需求选择相符的容器镜像。
此外,Java和OpenJDK镜像已不推荐使用,请注意。
所载公司名称、产品名称、服务名称均为各公司的商标或注册商标。