LoginSignup
8
4

OpenJDK のコンテナイメージについて調べてみた

Last updated at Posted at 2023-12-10

この記事は 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)

その他(余談)

javaopenjdk といった名前のコンテナイメージがあるのか、気になったので調べてみました。

java

docker pull java は下記の通りエラーでイメージは取得できませんでした。

docker pull 実行結果
$ 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 実行結果
$ 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 実行結果
$ 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 のコンテナイメージについて簡単に紹介しました。
様々なディストリビューションベンダからイメージが提供されているため、
利用する場合は要件に沿ったコンテナイメージを選択するようにしましょう。
また javaopenjdk イメージは非推奨となっているので気をつけましょう。

記載されている会社名、製品名、サービス名は、各社の商標または登録商標です。

8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4