本文提供 Microsoft Build of OpenJDK 可用容器映射的相關資訊。
以 Linux 為基礎的映射
我們目前提供適用于 Ubuntu 20.04 和 Microsoft CBL-以 Linux 為基礎的容器映射。 映射會在位於
mcr.microsoft.com/openjdk/jdk
的
Microsoft Container Registry
中發佈。
若要提取特定標籤的最新映射,請使用下列命令:
docker pull mcr.microsoft.com/openjdk/jdk:<tag>
下表顯示要用於 Linux 散發套件和 JDK 版本的標記。
基底 OS
OpenJDK 17
OpenJDK 11
OpenJDK 8
注意:來自 Eclipse Adoptium專案的 OpenJDK 8 映射隨附 Eclipse Temurin 二進位檔。
上述映射同時針對 amd64
和 arm64
架構提供。 您的容器執行時間應該根據您的環境提取正確的映射。 若要強制提取特定架構的映射,請使用下列命令:
$ 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"]
Distroless
無散發映射是以 Microsoft CBL-Mariner 2.0 發行版本為基礎。 他們需要不同的方法來部署應用程式。 因為無散發映射不包含完整的 Linux 發行版本,所以沒有殼層,例如。
ENTRYPOINT
這些映射的 已設定指向 java
命令。 使用 Dockerfiles 必須使用 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"]
您也可以使用 yum
或 apt-get
來安裝 JDK,或只是擷取 tar.gz
檔案並據以設定 JAVA_HOME
。 閱讀其他資訊。
Alpine 影像
雖然 Microsoft 不會產生 Alpine 型映射,但我們為 Alpine Linux 提供多工L 編譯的 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 是以範例的形式提供,並不是建議最佳組態。
保持較舊的次要版本
OpenJDK 容器映射的 Microsoft Build 僅適用于先前所列的標籤。 我們不會發佈次要版本的標籤,而主要版本標籤一律具有最新的次要版本,以確保開發人員一律會有任何指定的主要版本的最新更新。
這些基底映射會使用 Linux 發行版本的基礎套件管理員機制來安裝 JDK 套件。 因此,若要保持特定版本,您必須使用 或 yum
之類的 apt-get
工具來安裝特定的 JDK 次要版本。
例如,若要在不同的基底 OS 映射上安裝特定版本, debian:buster-slim
您可以在 muli-stage 容器映射建置的第一個階段,或作為傳統 Linux 套件安裝流程的一部分,使用相同的方法。 如需詳細資訊,請參閱安裝 Microsoft Build of OpenJDK的Ubuntu 18.04+一節。
如需 CBL-Mariner
以 RPM/yum 為基礎的其他 OS 映射,請參閱本文稍後提供的詳細資料。
對於 Ubuntu
、 和其他 Debian 型映射,您可以顯示 Microsoft Linux 存放庫中發佈的所有可用次要版本,如下列 Bash 範例所示,顯示命令和輸出。 此處顯示的命令假設已設定 Microsoft Linux 存放庫,如 在 Ubuntu 18.04+ 上安裝中所述。
$ 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 的意見反應
將您的意見、想法和想法傳送給我們,以協助我們改善 OpenJDK 的 Microsoft Build。 請造訪 GitHub 上的 OpenJDK 討論頁面 ,以傳送您的意見反應給我們。
Java 和 OpenJDK 是 Oracle 和/或其關係企業的商標或注冊商標。