この記事は NTTコムウェア AdventCalendar 2023 11日目の記事です。
はじめに
NTT コムウェアの坂本翔平です。普段は OpenJDK に関する技術支援や技術調査に従事しています。
コンテナ技術の普及に伴い、コンテナ環境で Java アプリケーションを動作させる機会も増えてきました。
しかし Java アプリケーションをコンテナ環境で動かすために都度 OpenJDK をコンテナ内で手動インストールするのは手間でした。
最近では OpenJDK の多くのディストリビューションベンダが、ビルドした OpenJDK をバンドルしたコンテナイメージを提供するようになりました。
そこで本記事ではそれらの OpenJDK のコンテナイメージについて、どういったものがあるのか簡単に調べた内容を紹介します。
本記事は 2023年11月頃 に確認した情報をベースに記載しています。
今後情報が更新され本記事に記載の内容と異なる点がでてくる可能性については予めご了承ください。
OpenJDK のコンテナイメージ
Docker Hub から取得可能なイメージ
Docker Hub にページが存在している OpenJDK のコンテナイメージについていくつか紹介します。
また各イメージの利用例として java -version
の出力結果を示します。
java -version
の出力結果は利用している OpenJDK のディストリビューションベンダ毎に少し異なるので、出力結果から使用している OpenJDK ディストリビューションベンダを特定できる場合もあります。
提供 Java バージョンについては LTS (Long Term Support) バージョンのみ記載しています。
eclipse-temurin
項目 | 内容 |
---|---|
Docker Hub の URL | https://hub.docker.com/_/eclipse-temurin |
提供ベースOS | Alpine, CentOS, ubi9-minimal(RHEL), Ubuntu, Windows |
提供形態 | JDK および JRE |
提供 Java バージョン | 8, 11, 17, 21 |
Eclipse Temurin (旧 AdoptOpenJDK)は Adoptium コミュニティが提供している OpenJDK ディストリビューションです。
Eclipse Temurin については RedHat 社がサポートしており、提供するコンテナイメージのベース OS として UBI (Universal Base Image)があることが特徴の1つです。
$ 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
項目 | 内容 |
---|---|
Docker Hub の URL | https://hub.docker.com/_/sapmachine |
提供ベースOS | Ubuntu |
提供形態 | JDK および JRE |
提供 Java バージョン | 11, 17, 21 |
SapMachine は SAP 社が提供している OpenJDK ディストリビューションです。
コンテナイメージはベース OS が 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)
amazoncorretto
項目 | 内容 |
---|---|
Docker Hub の URL | https://hub.docker.com/_/amazoncorretto |
提供ベースOS | Amazon Linux, Alpine, Debian |
提供形態 | JDK および JRE |
提供 Java バージョン | 8, 11, 17, 21 |
$ 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 は Amazon 社が提供している OpenJDK ディストリビューションです。
AWS の Linux ディストリビューションである Amazon Linux をベース OS とした OpenJDK コンテナイメージを提供していることが特徴の1つです。
Microsoft Build of OpenJDK
項目 | 内容 |
---|---|
Docker Hub の URL | https://hub.docker.com/_/microsoft-openjdk-jdk |
提供ベースOS | Ubuntu, CBL Mariner(1.0 / 2.0 / 2.0 Distroless) |
提供形態 | JDK のみ |
提供 Java バージョン | 11, 17, 21 (CBL Mariner 2.0 系のみ 8 も提供) |
Microsoft Build of OpenJDK は Microsoft 社が提供している OpenJDK ディストリビューションです。
Microsoft 社が開発したフリーでオープンソースな Linux ディストリビューションである CBL Mariner をベース OS とした OpenJDK コンテナイメージを提供していることが特徴の1つです。
$ 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)
Zulu OpenJDK
項目 | 内容 |
---|---|
Docker Hub の URL | https://hub.docker.com/r/azul/zulu-openjdk (Ubuntu) |
提供ベースOS | Ubuntu, Alpine, CentOS, Debian, Distroless |
提供形態 | JDK および JRE |
提供 Java バージョン | 8, 11, 17, 21 |
Zulu OpenJDK は Azul Systems 社が提供している OpenJDK ディストリビューションです。
(コンテナイメージではないですが)最近では Java の起動高速化技術である CRaC(Coordinated Restore at Checkpoint) をサポートしたビルドをリリースしました。
様々な種類のベース OS の 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)
Liberica JDK
項目 | 内容 |
---|---|
Docker Hub の URL | https://hub.docker.com/r/bellsoft/liberica-openjdk-debian (Debian) |
提供ベースOS | Debian, Alpine, CentOS, Alpaquita Linux(container), Windows Server |
提供形態 | JDK のみ |
提供 Java バージョン | 8, 11, 17, 21 |
Liberica JDK は BellSoft 社が提供している OpenJDK ディストリビューションです。
様々な種類のベース OS の 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]
...
DESCRIPTION の最初に DEPRECATED (非推奨)とあるので現在では使われていなさそうです。
java
イメージの Docker Hub のページがあるか確認してみると、以下の通り存在しました。
このページによると、java
イメージは非推奨となり 2016年12月31日以降は更新されなくなったようです。かなり古いイメージのようですね。
さらに、java
の代わりのイメージとして次に確認しようとしていた openjdk
イメージが案内されていました。
ということで openjdk
イメージも存在するようです…
https://hub.docker.com/_/java は後述の openjdk
のページへリダイレクトされる場合があります。その場合は Docker Hub でキーワード java
で検索すると該当ページがヒットするのでそちらから確認してください。
openjdk
前述の通り存在は確かになりましたが、確認してみます。
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 ページを確認してみました。
ページの内容を要約すると以下の通りです。
-
openjdk
イメージはセキュリティ上の問題から非推奨となった - 2022年7月以降は jdk.java.net の早期アクセスビルドのみ提供されるようになった
- 上記に伴い Java 18 の EOL と同時に
latest
タグ等の更新も終了した
java
イメージの代替として案内されていた openjdk
イメージも非推奨となっている点に注意が必要です。
OpenJDK のコンテナイメージは各ベンダから提供されているイメージを使いましょうということですね。
おわりに
本記事では OpenJDK のコンテナイメージについて簡単に紹介しました。
様々なディストリビューションベンダからイメージが提供されているため、
利用する場合は要件に沿ったコンテナイメージを選択するようにしましょう。
また java
や openjdk
イメージは非推奨となっているので気をつけましょう。
記載されている会社名、製品名、サービス名は、各社の商標または登録商標です。