Freigeben über


Containerimages für den Microsoft-Build von OpenJDK

Dieser Artikel enthält Informationen zu den verfügbaren Containerimages für den Microsoft-Build von OpenJDK.

Linux-basierte Images

Derzeit werden Linux-basierte Containerimages für Ubuntu und Microsoft CBL-Mariner bereitgestellt, das jetzt Azure Linux genannt wird. Die Images werden in der Microsoft-Artefaktregistrierung unter mcr.microsoft.com/openjdk/jdk veröffentlicht.

Um das aktuellste Image für ein bestimmtes Tag abzurufen, verwenden Sie den folgenden Befehl:

docker pull mcr.microsoft.com/openjdk/jdk:<tag>

Die folgende Tabelle zeigt das Tag, das für Ihre Linux-Distribution und die JDK-Version verwendet werden soll.

Basisbetriebssystem OpenJDK 21 OpenJDK 17 OpenJDK 11 OpenJDK 8
Ubuntu 22.04 21-ubuntu 17-ubuntu 11-ubuntu N/V
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

Hinweis: Images für OpenJDK 8 enthalten Binärdateien von Eclipse Temurin aus dem Eclipse Adoptium-Projekt.

Architekturen

Die obigen Images werden für die Architekturen amd64 und arm64 angeboten. Ihre Containerruntime pullt basierend auf Ihrer Umgebung das richtige Image. Um einen Pull eines Images für eine bestimmte Architektur zu erzwingen, verwenden Sie Folgendes:

$ docker pull --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-mariner

Um eine Architektur in einer Dockerfile-Datei zu erzwingen, können Sie Folgendes verwenden:

FROM --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-mariner AS build
# ...

Weitere Informationen zum Erstellen von Multiplattform-Containerimages finden Sie in der Dokumentation Ihrer Containerruntime. Beispiel: Docker und Podman

Verwenden dieser Images

Erstellen Sie eine Dockerfile-Datei mit dem folgenden Inhalt:

# 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

Die distributionslosen Images basieren auf der CBL-Mariner 2.0-Distribution von Microsoft. Sie erfordern eine andere Herangehensweise an das Bereitstellen einer Anwendung. Da die distributionslosen Images keine vollständige Linux-Distribution enthalten, gibt es z. B. keine Shell.

Der ENTRYPOINT dieser Images ist bereits konfiguriert und verweist auf den Befehl java. Beim Verwenden von Dockerfiles muss die CMD-Anweisung angewendet werden, um die Befehlszeilenargumente des JVM-Startprogrammprozesses abzuschließen.

Erstellen Sie eine Dockerfile-Datei mit dem folgenden Inhalt:

FROM mcr.microsoft.com/openjdk/jdk:21-distroless

COPY app.jar /app.jar

CMD ["-Xmx256m", "-jar", "/app.jar"]

Verwenden eines anderen Basisbetriebssystemimages oder einer anderen Version

Wenn Sie eine andere Basisbetriebssystem-Imagedistribution verwenden möchten, können Sie das JDK ähnlich dem folgenden Beispiel mithilfe der COPY --from-Anweisung in einer Dockerfile-Datei aus einem vorhandenen vordefinierten Image kopieren:

# 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"]

Sie können das JDK auch entweder mit yum oder apt-get installieren oder einfach eine tar.gz-Datei extrahieren und JAVA_HOME entsprechend konfigurieren. Weitere Informationen.

Verwenden einer anderen Version von Ubuntu

Um den Microsoft-Build von OpenJDK in verschiedenen Versionen von Ubuntu-Basisimages bereitzustellen, empfiehlt Microsoft, dass Benutzer ihre eigene Dockerfiles-Dateien erstellen. Als Referenz. Mit der folgenden Dockerfile-Datei wird ein Image mit Ubuntu 24.04 erstellt.

# 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-Images

Obwohl Microsoft keine auf Alpine basierenden Images bietet, wird eine begrenzte Anzahl von musl-kompilierten JDK-Binärdateien für Alpine Linux bereitgestellt.

Benutzer können Containerimages für Alpine Linux mithilfe der verfügbaren Binärdateien erstellen.

Erstellen Sie eine Dockerfile-Datei mit dem folgenden Inhalt:

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" ]

Erstellen einer benutzerdefinierten Java-Runtime

Verwenden Sie zum Erstellen eines benutzerdefinierten Java-Runtimeimages eine mehrstufige Dockerfile-Datei ähnlich dem folgenden Beispiel:

# 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"]

Weitere Informationen zum Erstellen benutzerdefinierter Java-Runtimes finden Sie unter Java-Runtimes mit jlink.

Nicht-Stammbenutzer

Die Images enthalten einen app-Benutzer, der optional aktiviert und von den verbrauchenden Schichten verwendet werden kann:

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"]

Im obigen Beispiel wird die Binärdatei der Anwendung als root kopiert, da die Images standardmäßig mit root verbleiben. Die Anwendung wird dann als app ausgeführt. Der Ordner /home/app befindet sich auch im Besitz des Benutzers app, wodurch die Anwendung ein schreibbares Dateisystem erhält.

Standardgebietsschema

Die Images für den Microsoft-Build von OpenJDK sind standardmäßig mit dem Gebietsschema en_US.UTF-8 konfiguriert. Wenn Sie ein anderes Gebietsschema oder ein anderes Basisimage als zuvor beschrieben verwenden möchten, müssen Sie Umgebungsvariablen in Ihrer eigenen Dockerfile-Datei manuell konfigurieren und sicherstellen, dass das gewünschte Gebietsschema installiert ist.

Um z. B. das Gebietsschema pt_BR.UTF-8 auf einem Ubuntu-basierten Image zu verwenden, können Sie Ihrer Dockerfile-Datei die folgenden Zeilen hinzufügen:

...
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
...

Diese Dockerfile-Datei wird als Beispiel bereitgestellt. Sie ist nicht dafür gedacht, die optimalen Konfigurationen vorzuschlagen.

Beibehalten älterer Nebenversionen

Containerimages des Microsoft-Build von OpenJDK sind nur über die zuvor aufgelisteten Tags verfügbar. Es werden keine Tags für Nebenversionen bereitgestellt. Die Hauptversionstags verfügen immer über die aktuelle Nebenversion, um sicherzustellen, dass Entwickler über das neueste Update für jede beliebige Hauptversion verfügen.

Diese Basisimages verwenden den zugrunde liegenden Paket-Manager-Mechanismus der Linux-Distributionen, um das JDK-Paket zu installieren. Daher müssen Sie zum Verwenden einer bestimmten älteren Version Tools wie apt-get oder yum verwenden, um die entsprechende Nebenversion des JDK zu installieren.

Um ein Rollback auf bestimmte Versionen auf unterschiedlichen Basisbetriebssystemimages durchzuführen, die nicht in der Liste der bereitgestellten Images enthalten sind, z. B. debian:buster-slim, können Sie denselben Ansatz unten entweder in der ersten Phase eines mehrstufigen Containerimagebuilds oder als Teil eines herkömmlichen Linux-Paketinstallationsflusses verwenden. Weitere Informationen finden Sie im Abschnitt Installieren unter Ubuntu 18.04+ von Installieren des Microsoft-Builds von OpenJDK.

Informationen zu CBL-Mariner und anderen Betriebssystemimages basierend auf RPM/yum finden Sie in den Details weiter unten in diesem Artikel.

Für Ubuntu und andere Debian-basierte Images können Sie alle verfügbaren Nebenversionen anzeigen, die in den Microsoft Linux-Repositorys veröffentlicht wurden. Dies wird im folgenden Bash-Beispiel mit Befehlen und Ausgaben gezeigt. Die hier gezeigten Befehle gehen davon aus, dass das Microsoft Linux-Repository konfiguriert ist, wie unter Installieren unter Ubuntu 18.04+ beschrieben.

$ 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
...

In diesem Bash-Beispiel wird gezeigt, wie Ihr Image msopenjdk-11 auf eine ältere Version zurücksetzt, z. B. auf 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) ...

Verwenden Sie die folgenden Befehle, um dasselbe in Ihrer Dockerfile-Datei auszuführen:

FROM mcr.microsoft.com/openjdk/jdk:11-ubuntu
...
RUN apt-get update && \
    apt-get install -y --allow-downgrades msopenjdk-11=11.0.16-1
...

In diesem Bash-Beispiel werden CBL-Mariner-basierte Images verwendet:

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

Verwenden Sie die folgenden Befehle, um dasselbe in Ihrer Dockerfile-Datei auszuführen:

FROM mcr.microsoft.com/openjdk/jdk:11-mariner
...
RUN yum update && \
    yum install -y --nogpgcheck msopenjdk-11-11.0.15-1
...

Zeitplan für die Neuerstellung von Containerimages

Um die höchste Sicherheits- und Stabilitätsstufe sicherzustellen, werden unsere Containerimages jeden Montag, Mittwoch und Freitag neu erstellt. Dieser regelmäßige Neuerstellungszeitplan ermöglicht es uns, umgehend die neuesten Sicherheitspatches und -updates zu integrieren.

Dieser Neuerstellungszeitplan bietet Ihnen die folgenden Vorteile:

  • Zeitnahe Sicherheitsupdates: Durch die dreimal wöchentliche Neuerstellung der Images stellen wir sicher, dass alle neuen Sicherheitsrisiken schnell beseitigt werden.
  • Verbesserte Stabilität: Regelmäßige Updates tragen dazu bei, die Stabilität und Leistung Ihrer Anwendungen aufrechtzuerhalten, indem die neuesten Fehlerbehebungen und Verbesserungen eingeschlossen werden.

Wenn Sie Fragen oder Probleme im Zusammenhang mit diesen Updates haben, lesen Sie diesen Zeitplan, bevor Sie ein Supportticket öffnen.

Weitere Informationen zu unseren Supportrichtlinien finden Sie in der Support-Roadmap für den Microsoft Build of OpenJDK.

Windows-basierte Images

Derzeit werden keine Windows-basierten Containerimages bereitgestellt.

Geben Sie Feedback zum Microsoft Build von OpenJDK

Senden Sie uns Ihre Kommentare, Gedanken und Ideen, damit wir den Microsoft Build von OpenJDK verbessern können. Besuchen Sie unsere OpenJDK-Diskussionsseite auf GitHub, um uns Ihr Feedback zu senden.

Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder dessen Tochtergesellschaften.