Skip to content

OpenJDK Java 17 Dockerイメージの選択肢

問題の概要

Java 11からJava 17へのアップグレードを検討している場合、Docker環境において openjdk:11-jre-slim(約75MB)と同等の軽量なJava 17イメージを探す必要があります。しかし公式のOpenJDKリポジトリにはJava 17のJREイメージが存在せず、選択肢に混乱が生じています。

重要なお知らせ

公式の openjdk:17- イメージは非推奨となっており、セキュリティ上の問題がある古いビルドが含まれている可能性があります。これらのイメージはメンテナンスされていません。

推奨ソリューション

1. Eclipse Temurin (Adoptium)

現在最も推奨される選択肢です。Eclipse Foundationが提供する公式のOpenJDKビルドで、さまざまなLinuxディストリビューションに対応したイメージがあります。

dockerfile
# Ubuntuベース (標準推奨)
FROM eclipse-temurin:17-jdk-jammy

# Alpine Linuxベース (軽量版)
FROM eclipse-temurin:17-jre-alpine

# CentOSベース
FROM eclipse-temurin:17-jre-centos7

# Ubuntu Focalベース
FROM eclipse-temurin:17-jre-focal

特徴:

  • 公式OpenJDKビルド
  • 定期的なセキュリティ更新
  • 多様なベースOS選択肢
  • JREとJDKの両方のバージョン利用可能

2. Amazon Corretto

Amazonが提供する無料のOpenJDKディストリビューションです。

dockerfile
FROM amazoncorretto:17-alpine

特徴:

  • Amazon Linuxベース
  • 長期サポート保証
  • 企業環境での実績あり

3. BellSoft Liberica OpenJDK

Springチームも推奨する軽量なJDKディストリビューションです。

dockerfile
FROM bellsoft/liberica-openjdk-alpine:17

特徴:

  • Alpine Linux + Liberica Liteの超軽量構成
  • マイクロサービス向けに最適化
  • サイズが非常に小さい

実践的なDockerfile例

以下は実際のプロダクション環境で使用できる完全なDockerfileの例です。

dockerfile
FROM eclipse-temurin:17-jre-alpine

# アプリケーションユーザーの作成
ARG APPLICATION_USER=appuser
RUN adduser --no-create-home -u 1000 -D $APPLICATION_USER

# 作業ディレクトリの設定
RUN mkdir /app && \
    chown -R $APPLICATION_USER /app

USER 1000

# アプリケーションJARのコピー
COPY --chown=1000:1000 ./app.jar /app/app.jar
WORKDIR /app

EXPOSE 8080
ENTRYPOINT [ "java", "-jar", "/app/app.jar" ]
dockerfile
FROM amazoncorretto:17-alpine

# セキュリティ向上のためroot以外のユーザーで実行
RUN addgroup -S spring && adduser -S spring -G spring
USER spring

COPY target/app.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

イメージサイズ比較

各イメージの圧縮後のおおよそのサイズ:

イメージサイズ目安特徴
eclipse-temurin:17-jre-alpine~50MB最小サイズ、Alpineベース
bellsoft/liberica-openjdk-alpine~60MBSpring推奨、超軽量
eclipse-temurin:17-jre-focal~80MBUbuntuベース、互換性重視
amazoncorretto:17-alpine~70MB企業向け、Amazonサポート

ベストプラクティス

  1. 非rootユーザーの使用: セキュリティ向上のため、常に非特権ユーザーでアプリケーションを実行します
  2. マルチステージビルド: ビルド環境と実行環境を分離して最終イメージを軽量化します
  3. .dockerignoreの使用: 不要なファイルがイメージに含まれないようにします
  4. 特定タグの使用: latestタグではなく、特定のバージョンタグを使用します

トラブルシューティング

Alpineベースのイメージを使用する場合、glibcベースのアプリケーションや一部のネイティブライブラリに互換性問題が発生する可能性があります。その場合はUbuntuやCentOSベースのイメージを検討してください。

結論

2023年現在、Java 17のDockerイメージとしては Eclipse Temurin が最も推奨される選択肢です。軽量さが最重要の場合は 17-jre-alpine、互換性を重視する場合は 17-jre-focal17-jre-centos7 を選択すると良いでしょう。

どのディストリビューションを選択する場合も、定期的なセキュリティ更新が提供されていることを確認し、非推奨の公式OpenJDKイメージは使用しないように注意してください。