Microsoft Build of OpenJDK のコンテナー イメージ
この記事では、Microsoft Build of OpenJDK の使用可能なコンテナー イメージについて説明します。
Linux ベースのイメージ
現在、Ubuntu および Microsoft CBL-Mariner (現在は Azure Linux と呼ばれています) 用の Linux ベースのコンテナー イメージを提供しています。 このイメージは、mcr.microsoft.com/openjdk/jdk
にある Microsoft アーティファクト レジストリ に公開されています。
特定のタグの最新のイメージをプルするには、次のコマンドを使用します。
docker pull mcr.microsoft.com/openjdk/jdk:<tag>
次の表は、Linux ディストリビューションに使用するタグと JDK のバージョンを示しています。
基本 OS | OpenJDK 21 | OpenJDK 17 | OpenJDK 11 | OpenJDK 8 |
---|---|---|---|---|
Ubuntu 22.04 | 21-ubuntu |
17-ubuntu |
11-ubuntu |
N/A |
CBL Mariner 2.0 | 21-mariner |
17-mariner |
11-mariner |
8-mariner |
CBL-Mariner 2.0 Distroless | 21-distroless |
17-distroless |
11-distroless |
8-distroless |
注: "OpenJDK 8 のイメージには、Eclipse Adoptium プロジェクトの Eclipse Temurin のバイナリが付属しています。"
アーキテクチャ
上記のイメージは、amd64
と arm64
の両方のアーキテクチャで提供されています。 コンテナー ランタイムは、環境に基づいて適切なイメージをプルします。 特定のアーキテクチャのイメージを強制的にプルするには、次のコマンドを使用します。
$ docker pull --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-mariner
Dockerfile
内でアーキテクチャを強制するには、次のコマンドを使用できます。
FROM --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-mariner AS build
# ...
マルチプラットフォーム コンテナー イメージの構築の詳細については、コンテナー ランタイムのドキュメントを参照してください。 例としては、Docker、Podman などがあります。
コンテナー イメージの使用方法
次の内容を含む Dockerfile を作成します。
# Example using MS Build of OpenJDK image directly
FROM mcr.microsoft.com/openjdk/jdk:21-ubuntu
# Continue with your application deployment
RUN mkdir /opt/app
COPY japp.jar /opt/app
CMD ["java", "-jar", "/opt/app/japp.jar"]
distroless
distroless イメージは、Microsoft による CBL-Mariner 2.0 ディストリビューションに基づいています。 これらのイメージには、アプリケーションをデプロイするための別のアプローチが必要です。 distroless イメージには完全な Linux ディストリビューションが含まれていないため、たとえばシェルはありません。
これらのイメージの ENTRYPOINT
は、java
コマンドを指すように既に構成されています。 Dockerfile を使用するには、CMD
命令を使用して、JVM ランチャー プロセスのコマンド ライン引数を完了する必要があります。
次の内容を含む Dockerfile を作成します。
FROM mcr.microsoft.com/openjdk/jdk:21-distroless
COPY app.jar /app.jar
CMD ["-Xmx256m", "-jar", "/app.jar"]
別の OS 基本イメージまたはバージョンを使用する
別の OS 基本イメージ ディストリビューションを使用する場合は、次の例のように、Dockerfile で COPY --from
命令を使用して、既存の事前構築済みイメージから JDK をコピーできます。
# Example using MS Build of OpenJDK image with a different base image
FROM debian:buster-slim
ENV LANG en_US.UTF-8
ENV JAVA_HOME /usr/lib/jvm/msopenjdk-21-amd64
ENV PATH "${JAVA_HOME}/bin:${PATH}"
COPY --from=mcr.microsoft.com/openjdk/jdk:21-ubuntu $JAVA_HOME $JAVA_HOME
# Continue with your application deployment
RUN mkdir /opt/app
COPY japp.jar /opt/app
CMD ["java", "-jar", "/opt/app/japp.jar"]
また、yum
または apt-get
を使用して JDK をインストールすることも、単に tar.gz
ファイルを抽出し、JAVA_HOME
を適切に構成することもできます。 詳細については、こちらを参照してください。
別のバージョンの Ubuntu を使用する
別のバージョンの Ubuntu 基本イメージに Microsoft Build of OpenJDK をデプロイするには、Microsoft では、ユーザーが独自の Dockerfiles
を作成することをお勧めしています。 参考までに、次の Dockerfile
は Ubuntu 24.04 を使用してイメージをビルドします。
# Example using MS Build of OpenJDK image with a different version of Ubuntu
FROM ubuntu:24.04
ENV LANG en_US.UTF-8
ENV JAVA_HOME /usr/lib/jvm/msopenjdk-21-amd64
ENV PATH "${JAVA_HOME}/bin:${PATH}"
COPY --from=mcr.microsoft.com/openjdk/jdk:21-ubuntu $JAVA_HOME $JAVA_HOME
# Continue with your application deployment
RUN mkdir /opt/app
COPY japp.jar /opt/app
CMD ["java", "-jar", "/opt/app/japp.jar"]
Alpine イメージ
Microsoft は Alpine ベースのイメージを提供していませんが、Alpine Linux 用の限定された musl コンパイル JDK バイナリ セットを提供しています。
ユーザーは、使用可能なバイナリを使用して、Alpine Linux 用のコンテナー イメージを作成できます。
次の内容を含む Dockerfile を作成します。
FROM alpine:latest
ENV JAVA_HOME=/usr/lib/jdk
ENV PATH=${PATH}:${JAVA_HOME}/bin
# Default to UTF-8 file.encoding
ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'
# (Optional) Add extra packages for fontconfig and ttf-dejavu to support server-side image generation
RUN apk add --no-cache fontconfig libretls musl-locales musl-locales-lang ttf-dejavu tzdata zlib \
&& rm -rf /var/cache/apk/*
# Download and extract JDK 17
RUN wget -nv -O jdk.tar.gz https://aka.ms/download-jdk/microsoft-jdk-17-alpine-x64.tar.gz && \
mkdir $JAVA_HOME && \
tar xf jdk.tar.gz -C $JAVA_HOME --strip-components 1 --no-same-owner
# Copy the application
COPY app.jar /app.jar
CMD [ "java", "-jar", "/app.jar" ]
カスタム Java ランタイムを作成する
カスタム Java ランタイム イメージを作成するには、次の例のような マルチステージ Dockerfile を使用します。
# Example of custom Java runtime using jlink in a multi-stage container build
FROM mcr.microsoft.com/openjdk/jdk:21-ubuntu as runtime-build
# Create a custom Java runtime
RUN $JAVA_HOME/bin/jlink \
--add-modules java.base \
--strip-debug \
--no-man-pages \
--no-header-files \
--compress=2 \
--output /javaruntime
# Define your base image. You may use any base OS and version of your choice.
FROM debian:buster-slim
ENV LANG en_US.UTF-8
ENV JAVA_HOME /usr/lib/jvm/msopenjdk-21-amd64
ENV PATH "${JAVA_HOME}/bin:${PATH}"
COPY --from=runtime-build /javaruntime $JAVA_HOME
# Continue with your application deployment
RUN mkdir /opt/app
COPY japp.jar /opt/app
CMD ["java", "-jar", "/opt/app/japp.jar"]
カスタム Java ランタイムの作成の詳細については、「jlink を使用した Java ランタイム」を参照してください
非ルート ユーザー
イメージには app
ユーザーが付属しており、必要に応じて有効にし、レイヤーを使用して使用することができます。
FROM mcr.microsoft.com/openjdk/jdk:21-mariner
WORKDIR /home/app
COPY japp.jar japp.jar
USER app
CMD ["java", "-jar", "/opt/app/japp.jar"]
上記の例では、イメージは既定の root
のままであるため、アプリケーション バイナリは root
としてコピーされます。 その後、アプリケーションは app
として実行されます。 さらに、フォルダー /home/app
はユーザー app
によって所有され、アプリケーションに書き込み可能なファイルシステムが提供されます。
既定のロケール
既定では、Microsoft Build of OpenJDK のイメージは en_US.UTF-8
ロケールで構成されます。 別のロケールを使用する場合、または前述のように別の基本イメージを使用する場合は、独自の Dockerfile で環境変数を手動で構成し、必要なロケールがインストールされていることを確認する必要があります。
たとえば、Ubuntu ベースのイメージで pt_BR.UTF-8
ロケールを使用するには、Dockerfile に次の行を追加できます。
...
USER root
RUN apt-get update
RUN apt-get install -y locales
RUN sed -i '/pt_BR.UTF-8/s/^# //g' /etc/locale.gen
RUN locale-gen
ENV LANG pt_BR.UTF-8
ENV LANGUAGE pt_BR:pt
ENV LC_ALL pt_BR.UTF-8
...
この Dockerfile は、例として提供されており、 最適な構成を示すためのものではありません。
以前のマイナー バージョンのまま使用する
Microsoft Build of OpenJDK のコンテナー イメージは、前述のタグでのみ使用できます。 マイナー バージョンのタグは提供されておらず、開発者が特定のメジャー バージョンの最新のアップデートを確実に入手できるように、メジャー バージョンのタグには常に最新のマイナー バージョンが含まれています。
これらの基本イメージでは、Linux ディストリビューションの基になるパッケージ マネージャーを使用して JDK パッケージをインストールします。 そのため、以前の特定のバージョンのまま使用するには、apt-get
や yum
などのツールを使用して、JDK の特定のマイナー バージョンをインストールする必要があります。
提供されているイメージの一覧にない異なる OS 基本イメージ (例: debian:buster-slim
) の特定のバージョンにロールバックするには、マルチステージ コンテナー イメージ ビルドの最初のステージで、または従来の Linux パッケージ インストール フローの一部として、以下と同じアプローチを使用できます。 詳細については、「OpenJDK の Microsoft Build をインストールする」の Ubuntu 18.04 以降へのインストールに関するセクションを参照してください。
RPM/yum ベースの CBL-Mariner
およびその他の OS イメージについては、この記事で後ほど説明する詳細を参照してください。
Ubuntu
、およびその他の Debian ベースのイメージの場合は、コマンドと出力を示す次の Bash の例に示すように、Microsoft Linux リポジトリで公開されている利用可能なすべてのマイナー バージョンを表示できます。 ここで示すコマンドは、Ubuntu 18.04 以降へのインストールに関するセクションで説明されているように、Microsoft Linux リポジトリが構成されていることを前提としています。
$ docker run --pull=always -ti --rm mcr.microsoft.com/openjdk/jdk:11-ubuntu
root@c60eacd7dd7d:/# apt-get update
...
root@c60eacd7dd7d:/# apt-cache madison msopenjdk-11
msopenjdk-11 | 11.0.23-1 | https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages
msopenjdk-11 | 11.0.22-1 | https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages
msopenjdk-11 | 11.0.21-1 | https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages
msopenjdk-11 | 11.0.20.1-1 | https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages
msopenjdk-11 | 11.0.20-3 | https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages
msopenjdk-11 | 11.0.20-2 | https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages
msopenjdk-11 | 11.0.20-1 | https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages
msopenjdk-11 | 11.0.19-1 | https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages
msopenjdk-11 | 11.0.18-1 | https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages
...
次の Bash の例は、イメージ msopenjdk-11
を以前のバージョン (たとえば 11.0.16-1
) に戻す方法を示しています。
root@dd24eca5bdb3:/# java -version
openjdk version "11.0.23" 2024-04-16 LTS
OpenJDK Runtime Environment Microsoft-9394293 (build 11.0.23+9-LTS)
OpenJDK 64-Bit Server VM Microsoft-9394293 (build 11.0.23+9-LTS, mixed mode, sharing)
root@a93cd1ed8783:/# apt-get -y install -y --allow-downgrades msopenjdk-11=11.0.16-1
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
fonts-dejavu
The following NEW packages will be installed:
fonts-dejavu
The following packages will be DOWNGRADED:
msopenjdk-11
0 upgraded, 1 newly installed, 1 downgraded, 0 to remove and 0 not upgraded.
Need to get 194 MB of archives.
After this operation, 13.0 MB disk space will be freed.
Get:1 http://archive.ubuntu.com/ubuntu jammy/universe amd64 fonts-dejavu all 2.37-2build1 [3,192 B]
Get:2 https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 msopenjdk-11 amd64 11.0.16-1 [194 MB]
Fetched 194 MB in 18s (10.7 MB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package fonts-dejavu.
(Reading database ... 9151 files and directories currently installed.)
Preparing to unpack .../fonts-dejavu_2.37-2build1_all.deb ...
Unpacking fonts-dejavu (2.37-2build1) ...
dpkg: warning: downgrading msopenjdk-11 from 11.0.23-1 to 11.0.16-1
Preparing to unpack .../msopenjdk-11_11.0.16-1_amd64.deb ...
update-alternatives: using /usr/lib/jvm/msopenjdk-11-amd64/lib/jfr to provide /usr/bin/jfr (jfr) in auto mode
Unpacking msopenjdk-11 (11.0.16-1) over (11.0.23-1) ...
Setting up fonts-dejavu (2.37-2build1) ...
Setting up msopenjdk-11 (11.0.16-1) ...
Dockerfile で同じ操作を行うには、次のコマンドを使用します。
FROM mcr.microsoft.com/openjdk/jdk:11-ubuntu
...
RUN apt-get update && \
apt-get install -y --allow-downgrades msopenjdk-11=11.0.16-1
...
次の Bash の例では、CBL-Mariner
ベースのイメージを使用しています。
root [ / ]# java -version
openjdk version "11.0.15" 2022-04-19 LTS
OpenJDK Runtime Environment Microsoft-32930 (build 11.0.15+10-LTS)
OpenJDK 64-Bit Server VM Microsoft-32930 (build 11.0.15+10-LTS, mixed mode)
root [ / ]# yum update
...
root [ / ]# yum list msopenjdk-11
Loaded plugin: tdnfrepogpgcheck
msopenjdk-11.x86_64 11.0.14+9_LTS-1 @System
msopenjdk-11.x86_64 11.0.10+9-1 packages-microsoft-com-prod
msopenjdk-11.x86_64 11.0.11+9-1 packages-microsoft-com-prod
msopenjdk-11.x86_64 11.0.12+7-1 packages-microsoft-com-prod
msopenjdk-11.x86_64 11.0.13+8_LTS-1 packages-microsoft-com-prod
msopenjdk-11.x86_64 11.0.14+9_LTS-1 packages-microsoft-com-prod
root [ / ]# yum install -y --nogpgcheck msopenjdk-11-11.0.15-1
Loaded plugin: tdnfrepogpgcheck
Downgrading:
msopenjdk-11 x86_64 11.0.15-1 mariner-official-microsoft 308.10M 183.75M
Total installed size: 308.10M
Total download size: 183.75M
msopenjdk-11 192678446 100%
Testing transaction
Running transaction
Installing/Updating: msopenjdk-11-11.0.15-1.x86_64
Removing: msopenjdk-11-11.0.23-1.x86_64
Dockerfile で同じ操作を行うには、次のコマンドを使用します。
FROM mcr.microsoft.com/openjdk/jdk:11-mariner
...
RUN yum update && \
yum install -y --nogpgcheck msopenjdk-11-11.0.15-1
...
コンテナー イメージのリビルド スケジュール
最高レベルのセキュリティと安定性を確保するために、コンテナー イメージは毎週月曜日、水曜日、金曜日にリビルドされます。 この定期的なリビルド スケジュールにより、最新のセキュリティ パッチと更新を迅速に組み込むことができます。
このリビルド スケジュールには、次の利点があります。
- タイムリーなセキュリティ更新: 週に 3 回イメージをリビルドすることで、新しいセキュリティの脆弱性に迅速に対処できます。
- 安定性の向上: 定期的な更新は、最新のバグ修正と改善を含めることで、アプリケーションの安定性とパフォーマンスを維持するのに役立ちます。
これらの更新に関する質問や問題が発生した場合は、サポート チケットを作成する前に、このスケジュールを参照してください。
サポート ポリシーの詳細については、「Microsoft Build of OpenJDK のサポート ロードマップ」を参照してください。
Windows ベースのイメージ
現在、Windows ベースのコンテナー イメージは提供されていません。
OpenJDK の Microsoft Build に関するフィードバックの提供
OpenJDK の Microsoft Build の改善に役立てるために、ご意見、ご感想、アイデアをお寄せください。 GitHub の OpenJDK ディスカッション ページにアクセスして、フィードバックを送信してください。
Java と OpenJDK は、Oracle やその関連会社の商標または登録商標です。