Microsoft Build of OpenJDK のコンテナー イメージ
この記事では、Microsoft Build of OpenJDK で使用できるコンテナー イメージについて説明します。
Linux ベースのイメージ
現在、Ubuntu 20.04 および Microsoft CBL-Mariner 用の Linux ベースのコンテナー イメージが提供されています。 イメージは、 にある Microsoft Container Registry で mcr.microsoft.com/openjdk/jdk
公開されます。
特定のタグの最新のイメージをプルするには、次のコマンドを使用します。
docker pull mcr.microsoft.com/openjdk/jdk:<tag>
次の表は、Linux ディストリビューションと JDK バージョンに使用するタグを示しています。
基本 OS | OpenJDK 17 | OpenJDK 11 | OpenJDK 8 |
---|---|---|---|
Ubuntu 20.04 | 17-ubuntu |
11-ubuntu |
N/A |
CBL Mariner 2.0 | 17-mariner |
11-mariner |
8-mariner |
CBL Mariner 1.0 | 17-mariner-cm1 |
11-mariner-cm1 |
N/A |
CBL-Mariner 2.0 ディストリビューションレス | 17-distroless |
11-distroless |
8-distroless |
注:OpenJDK 8 のイメージには、 Eclipse Adoptium プロジェクトの Eclipse Temurin のバイナリが付属しています。
アーキテクチャ
上記の画像は、 と arm64
の両方amd64
のアーキテクチャで提供されています。 コンテナー ランタイムは、環境に基づいて適切なイメージをプルします。 特定のアーキテクチャに対してイメージを強制的にプルするには、次を使用します。
$ docker pull --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:17-mariner
内 Dockerfile
のアーキテクチャを強制するには、次を使用できます。
FROM --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:17-mariner AS build
# ...
マルチプラットフォーム コンテナー イメージの構築の詳細については、コンテナー ランタイムのドキュメントを参照してください。 たとえば、 Docker と Podman です。
これらの画像の使用方法
次の内容を含む Dockerfile を作成します。
# Example using MS Build of OpenJDK image directly
FROM mcr.microsoft.com/openjdk/jdk:17-ubuntu
# Continue with your application deployment
RUN mkdir /opt/app
COPY japp.jar /opt/app
CMD ["java", "-jar", "/opt/app/japp.jar"]
ディストリビューションレス
ディストリビューションレス イメージは、Microsoft によるCBL-Mariner 2.0 配布に基づいています。 アプリケーションをデプロイするには、別のアプローチが必要です。 ディストリビューションレス イメージには完全な Linux ディストリビューションが含まれていないため、たとえばシェルはありません。
これらのイメージの は ENTRYPOINT
、 コマンドを指して既に java
構成されています。 Dockerfile を使用するには、 命令をCMD
使用して、JVM ランチャー プロセスのコマンド ライン引数を完了する必要があります。
次の内容を含む Dockerfile を作成します。
FROM mcr.microsoft.com/openjdk/jdk:17-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-17-amd64
ENV PATH "${JAVA_HOME}/bin:${PATH}"
COPY --from=mcr.microsoft.com/openjdk/jdk:17-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"]
または apt-get
を使用して yum
JDK をインストールすることも、単にファイルを抽出してtar.gz
それに応じて構成JAVA_HOME
することもできます。 詳細については、こちらを参照してください。
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:17-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-17-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:17-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 パッケージをインストールします。 そのため、特定のバージョンを維持するには、 や yum
などのapt-get
ツールを使用して、JDK の特定のマイナー バージョンをインストールする必要があります。
など debian:buster-slim
、異なる基本 OS イメージに特定のバージョンをインストールするには、muli ステージ コンテナー イメージ ビルドの最初のステージで、または従来の Linux パッケージ インストール フローの一部として、同じアプローチを使用できます。 詳細については、「Microsoft Build of OpenJDK をインストールする」の「Ubuntu 18.04 以降にインストールする」セクションを参照してください。
RPM/yum に基づくその他の OS イメージについては CBL-Mariner
、この記事で後述する詳細を参照してください。
、およびその他の Debian ベースのイメージの Ubuntu
場合は、コマンドと出力を示す次の 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.15+10-LTS-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.14.1+1-LTS-31205 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.14+9-LTS-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.13+8-LTS-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.12+7-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.11+9-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.10+9-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
この Bash の例は、イメージを古いバージョンに戻す msopenjdk-11
方法を示しています。例 11.0.11+9-1
:
root@dd24eca5bdb3:/# 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@dd24eca5bdb3:/# apt-cache madison msopenjdk-11
msopenjdk-11 | 11.0.15+10-LTS-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.14.1+1-LTS-31205 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.14+9-LTS-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.13+8-LTS-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.12+7-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.11+9-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.10+9-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
root@dd24eca5bdb3:/# apt-get -y install -y --allow-downgrades msopenjdk-11=11.0.11+9-1
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be DOWNGRADED:
msopenjdk-11
0 upgraded, 0 newly installed, 1 downgraded, 0 to remove and 17 not upgraded.
Need to get 193 MB of archives.
After this operation, 353 kB disk space will be freed.
Get:1 https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 msopenjdk-11 amd64 11.0.11+9-1 [193 MB]
Fetched 193 MB in 6s (30.9 MB/s)
debconf: delaying package configuration, since apt-utils is not installed
dpkg: warning: downgrading msopenjdk-11 from 11.0.14+9-LTS-1 to 11.0.11+9-1
(Reading database ... 5936 files and directories currently installed.)
Preparing to unpack .../msopenjdk-11_11.0.11+9-1_amd64.deb ...
Unpacking msopenjdk-11 (11.0.11+9-1) over (11.0.14+9-LTS-1) ...
Setting up msopenjdk-11 (11.0.11+9-1) ...
Dockerfile で同じことを行うには、次のコマンドを使用します。
FROM mcr.microsoft.com/openjdk/jdk:11-ubuntu
...
RUN apt-get update && \
apt-get install -y --allow-downgrades msopenjdk-11=11.0.11+9-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.10+9-1
Loaded plugin: tdnfrepogpgcheck
Downgrading:
msopenjdk-11 x86_64 11.0.10+9-1 packages-microsoft-com-prod 308.38M 323358496
Total installed size: 308.38M 323358496
Downloading:
Testing transaction
Running transaction
Installing/Updating: msopenjdk-11-11.0.10+9-1.x86_64
Removing: msopenjdk-11-11.0.12+7-1.x86_64
Complete!
Dockerfile で同じことを行うには、次のコマンドを使用します。
FROM mcr.microsoft.com/openjdk/jdk:11-mariner
...
RUN yum update && \
yum install -y --nogpgcheck msopenjdk-11-11.0.10+9-1
...
Windows ベースのイメージ
現在、Windows ベースのコンテナー イメージは提供されていません。
Microsoft Build of OpenJDK に関するフィードバックを提供する
Microsoft Build of OpenJDK の改善に役立つご意見、ご意見、アイデアをお寄せください。 GitHub の OpenJDK ディスカッション ページにアクセスして、フィードバックをお寄せください。
Java と OpenJDK は、Oracle やその関連会社の商標または登録商標です。