Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel enthält Informationen zu den verfügbaren Containerimages für den Microsoft Build of OpenJDK.
Linux-basierte Images
Wir liefern derzeit Linux-basierte Containerimages für Ubuntu und Microsoft Azure Linux. Die Bilder werden in der Microsoft Artifact Registry veröffentlicht, die sich unter mcr.microsoft.com/openjdk/jdk.
Um das neueste Bild für ein bestimmtes Tag zu erhalten, 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 JDK-Version verwendet werden soll.
| Basisbetriebssystem | OpenJDK 25 | OpenJDK 21 | OpenJDK 17 | OpenJDK 11 | OpenJDK 8 (1) |
|---|---|---|---|---|---|
| Azure Linux 3.0(2) | 25-azurelinux |
21-azurelinux |
17-azurelinux |
11-azurelinux |
8-azurelinux |
| Ubuntu 22.04 | 25-ubuntu |
21-ubuntu |
17-ubuntu |
11-ubuntu |
N/A |
| Azure Linux 3.0 Distroless | 25-distroless |
21-distroless |
17-distroless |
11-distroless |
8-distroless |
- Hinweis (1):Die Images für OpenJDK 8 enthalten Binärdateien von Eclipse Temurin aus dem Eclipse Adoptium Projekt.
-
Hinweis (2):Legacy-Containerimagetags wie
25-mariner,21-mariner,17-mariner,11-marinerund8-marinerdie zuvor mit Mariner 2.0 erstellt wurden, spiegeln jetzt die Tags-azurelinux, nach einer Neubranding und Einem Upgrade dieser Linux-Distribution. Bei Bedarf können Benutzer mit den Tags-mariner-cm2auf CBL Mariner 2.0 herabstufen.
Legacy-Bilder für das Ende des Lebens
Legacy-Bilder auf der Grundlage von CBL Mariner 2.0 und CBL Mariner 1.0 haben das Ende des Lebenszyklus erreicht und sollten nicht verwendet werden.
| Basisbetriebssystem | OpenJDK 21 | OpenJDK 17 | OpenJDK 11 | OpenJDK 8 (1) |
|---|---|---|---|---|
| CBL Mariner 2.0 | 21-mariner-cm2 |
17-mariner-cm2 |
11-mariner-cm2 |
8-mariner-cm2 |
| CBL Mariner 1.0 | N/A | 17-mariner-cm1 |
11-mariner-cm1 |
N/A |
- Hinweis (1):Die Images für OpenJDK 8 enthalten Binärdateien von Eclipse Temurin aus dem Eclipse Adoptium Projekt.
Architekturen
Die Bilder oben werden sowohl für amd64 als auch für arm64 Architekturen angeboten. Ihre Container-Runtime soll das richtige Image basierend auf Ihrer Umgebung abrufen. Um das Herunterladen eines Images für eine bestimmte Architektur zu erzwingen, verwenden Sie Folgendes:
$ docker pull --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-azurelinux
Um eine Architektur innerhalb eines Dockerfile zu erzwingen, können Sie Folgendes verwenden:
FROM --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-azurelinux AS build
# ...
Weitere Informationen zur Erstellung von Multiplattform-Container-Images erhalten Sie in der Dokumentation zu Ihrer Container Runtime. Beispiel: Docker und Podman.
Verwenden dieser Bilder
Erstellen Sie ein Dockerfile 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 distrolosen Bilder basieren auf der Azure Linux 3.0-Verteilung von Microsoft. Sie erfordern einen anderen Ansatz für die Bereitstellung einer Anwendung. Da die distroless-Images keine vollständige Linux-Distribution enthalten, gibt es z. B. keine Shell.
Die ENTRYPOINT Bilder sind bereits so konfiguriert, dass sie auf den java Befehl verweisen. Beim Verwenden von Dockerfiles muss die CMD Anweisung genutzt werden, um die Befehlszeilenargumente des JVM-Startprozesses abzuschließen.
Erstellen Sie ein Dockerfile mit dem folgenden Inhalt:
FROM mcr.microsoft.com/openjdk/jdk:21-distroless
COPY app.jar /app.jar
CMD ["-Xmx256m", "-jar", "/app.jar"]
Verwenden Sie ein anderes Basis-Betriebssystem-Image oder eine andere Version
Wenn Sie eine andere Betriebssystembasisimageverteilung verwenden möchten, können Sie das JDK aus einem vorhandenen vordefinierten Image mithilfe der COPY --from Anweisung in einer Dockerfile-Datei kopieren, ähnlich wie im folgenden Beispiel:
# 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 mit Linux-Pakettools installieren oder einfach eine tar.gz Datei extrahieren und entsprechend konfigurieren JAVA_HOME .
Weitere Informationen.
Verwenden einer anderen Version von Ubuntu
Um Microsoft Build von OpenJDK auf verschiedenen Versionen von Ubuntu-Basis-Images bereitzustellen, empfiehlt Microsoft, dass Benutzer ihre eigenen Dockerfiles erstellen Zur Referenz wird mit dem untenstehenden Dockerfile 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 Bilder
Obwohl Microsoft keine alpinen Bilder liefert, stellen wir einen begrenzten Satz von muslkompilierten JDK-Binärdateien für Alpine Linux bereit.
Benutzer können containerimages für Alpine Linux mithilfe der verfügbaren Binärdateien erstellen.
Erstellen Sie ein Dockerfile 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-Laufzeitimages eine mehrstufige Dockerfile-Datei wie im 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 Bilder werden mit einem app-Benutzer geliefert, der optional aktiviert und durch den Verbrauch von Ebenen verwendet werden kann:
FROM mcr.microsoft.com/openjdk/jdk:21-azurelinux
WORKDIR /home/app
COPY japp.jar japp.jar
USER app
CMD ["java", "-jar", "/opt/app/japp.jar"]
In dem obigen Beispiel wird die Anwendungsbinärdatei als root kopiert, da die Bilder standardmäßig bei root verbleiben. Die Anwendung wird dann als appausgeführt. Der Ordner /home/app gehört auch dem Benutzer app, wodurch die Anwendung ein schreibbares Dateisystem erhält.
Standard-Gebietsschema
Die Images für Microsoft Build von OpenJDK sind standardmäßig mit dem Gebietsschema en_US.UTF-8 konfiguriert. Wenn Sie ein anderes Gebietsschema oder ein anderes Basisimage wie zuvor beschrieben verwenden möchten, müssen Sie Umgebungsvariablen in Ihrer eigenen Dockerfile manuell konfigurieren und sicherstellen, dass das gewünschte Gebietsschema installiert ist.
Um zum Beispiel das Gebietsschema pt_BR.UTF-8 auf einem Ubuntu-basierten Image zu verwenden, können Sie die folgenden Zeilen in Ihr Dockerfile einfü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. Es ist nicht gedacht, die optimalen Konfigurationen vorzuschlagen.
Ältere Unterversionen beibehalten
Microsoft Build von OpenJDK-Container-Images sind nur unter den zuvor aufgeführten Tags verfügbar. Wir stellen keine Tags für Nebenversionen bereit, und die Hauptversionstags verfügen immer über die neueste Nebenversion, um sicherzustellen, dass Entwickler über das neueste Update für eine bestimmte Hauptversion verfügen.
Diese Basisimages verwenden den zugrunde liegenden Paket-Manager-Mechanismus der Linux-Distributionen, um das JDK-Paket zu installieren. Damit Sie eine bestimmte ältere Version beibehalten können, müssen Sie die Installation des Linux-Pakets verwenden, um die spezifische Nebenversion des JDK zu installieren.
Um auf bestimmte Versionen auf anderen Basis-Betriebssystem-Images außerhalb der Liste der mitgelieferten Images, z. B. debian:buster-slim, zurückzugreifen, können Sie den gleichen Ansatz wie unten beschrieben verwenden, entweder in der ersten Phase eines mehrstufigen Container-Image-Builds oder als Teil eines traditionellen Linux-Paket-Installationsablaufs. Weitere Informationen finden Sie im Abschnitt "Installieren auf Ubuntu 18.04+ " unter "Microsoft Build of OpenJDK installieren".
Weitere Details zu Azure Linux finden Sie weiter unten in diesem Artikel.
Für Ubuntu und anderen Debian-basierten Images können Sie sich alle verfügbaren Nebenversionen anzeigen lassen, die in den Microsoft Linux-Repositories veröffentlicht wurden, wie das folgende Bash-Beispiel mit Befehlen und Ausgaben zeigt. Die hier gezeigten Befehle gehen davon aus, dass das Microsoft Linux-Repository konfiguriert ist, wie unter Install on 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
...
Dieses Bash-Beispiel zeigt, wie Sie Ihr Bild auf eine ältere Version zurücksetzen msopenjdk-11, zum Beispiel 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
...
Dieses Bash-Beispiel verwendet Azure Linux-basierte Bilder:
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 [ / ]# tdnf update
...
root [ / ]# tdnf 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 [ / ]# tdnf install -y --nogpgcheck msopenjdk-11-11.0.15-1
Loaded plugin: tdnfrepogpgcheck
Downgrading:
msopenjdk-11 x86_64 11.0.15-1 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-azurelinux
...
RUN tdnf update && \
tdnf install -y --nogpgcheck msopenjdk-11-11.0.15-1
...
Zeitplan für die Wiederherstellung des Container-Images
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.
Sie können die folgenden Vorteile dieses Neuerstellungszeitplans erwarten:
- Zeitnahe Sicherheitsupdates: Durch die dreimal wöchentliche Neuerstellung der Bilder stellen wir sicher, dass neue Sicherheitsrisiken schnell behoben 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 haben 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.
Signaturen von Container-Images verifizieren
Um Containerimagesignaturen zu überprüfen, installieren Sie zuerst die folgenden Voraussetzungen:
- Notation CLI
-
msft_supply_chain.crt
- Laden Sie diese Datei herunter, und speichern Sie sie auf Ihrem lokalen Computer mit einem Dateinamen wie msft_supply_chain.crt.
Führen Sie dann die folgenden Schritte aus:
Fügen Sie das Zertifikat mithilfe des folgenden Befehls zum Vertrauensspeicher hinzu:
notation cert add --type ca --store supplychain msft_supply_chain.crtKonfigurieren Sie Vertrauensrichtlinien, indem Sie eine trustpolicy.json Datei mit dem folgenden Inhalt erstellen:
{ "version": "1.0", "trustPolicies": [ { "name": "supplychain", "registryScopes": [ "mcr.microsoft.com/openjdk/jdk" ], "signatureVerification": { "level" : "strict" }, "trustStores": [ "ca:supplychain" ], "trustedIdentities": [ "x509.subject: CN=Microsoft SCD Products RSA Signing,O=Microsoft Corporation,L=Redmond,ST=Washington,C=US" ] } ] }Importieren Sie die Vertrauensrichtlinie mithilfe des folgenden Befehls:
notation policy import trustpolicy.jsonÜberprüfen Sie das Bild mithilfe des folgenden Befehls:
notation verify mcr.microsoft.com/openjdk/jdk:21-distrolessDie folgende Ausgabe sollte angezeigt werden:
Warning: Always verify the artifact using digest(@sha256:...) rather than a tag(:21-distroless) because resolved digest may not point to the same signed artifact, as tags are mutable. Successfully verified signature for mcr.microsoft.com/openjdk/jdk@sha256:11537450b8472c1535e9a4c320033b5686e74323b19dcc8e7203e6ff1bf4ae5f
Windows-basierte Images
Wir liefern derzeit keine Windows-basierten Containerimages.
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 ihren Verbundenen Unternehmen.