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ディストリビューションに対応したイメージがあります。
# 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ディストリビューションです。
FROM amazoncorretto:17-alpine
特徴:
- Amazon Linuxベース
- 長期サポート保証
- 企業環境での実績あり
3. BellSoft Liberica OpenJDK
Springチームも推奨する軽量なJDKディストリビューションです。
FROM bellsoft/liberica-openjdk-alpine:17
特徴:
- Alpine Linux + Liberica Liteの超軽量構成
- マイクロサービス向けに最適化
- サイズが非常に小さい
実践的な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" ]
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 | ~60MB | Spring推奨、超軽量 |
eclipse-temurin:17-jre-focal | ~80MB | Ubuntuベース、互換性重視 |
amazoncorretto:17-alpine | ~70MB | 企業向け、Amazonサポート |
ベストプラクティス
- 非rootユーザーの使用: セキュリティ向上のため、常に非特権ユーザーでアプリケーションを実行します
- マルチステージビルド: ビルド環境と実行環境を分離して最終イメージを軽量化します
.dockerignore
の使用: 不要なファイルがイメージに含まれないようにします- 特定タグの使用:
latest
タグではなく、特定のバージョンタグを使用します
トラブルシューティング
Alpineベースのイメージを使用する場合、glibcベースのアプリケーションや一部のネイティブライブラリに互換性問題が発生する可能性があります。その場合はUbuntuやCentOSベースのイメージを検討してください。
結論
2023年現在、Java 17のDockerイメージとしては Eclipse Temurin が最も推奨される選択肢です。軽量さが最重要の場合は 17-jre-alpine
、互換性を重視する場合は 17-jre-focal
や 17-jre-centos7
を選択すると良いでしょう。
どのディストリビューションを選択する場合も、定期的なセキュリティ更新が提供されていることを確認し、非推奨の公式OpenJDKイメージは使用しないように注意してください。