Freigeben über


Container-Bilder für den Microsoft Build von OpenJDK

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 CBL-Mariner, die jetzt als Azure Linux bekannt sind. 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 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 JDK-Version verwendet werden soll.

Basisbetriebssystem 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

Hinweis:Images für OpenJDK 8 werden mit Binärdateien von Eclipse Temurin vom Eclipse Adoptium Projekt ausgeliefert.

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

Um eine Architektur innerhalb eines Dockerfile 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 Container-Runtime. Beispiel: Docker und Podman.

Verwenden dieser Bilder

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

Untrolos

Die Distroless-Images basieren auf der CBL-Mariner 2.0 Distribution 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 damit 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 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 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 entweder mit yum oder apt-get installieren oder eine tar.gz-Datei extrahieren und JAVA_HOME entsprechend konfigurieren. Weitere Informationen.

Verwenden einer anderen Version von Ubuntu

Um Microsoft Build of OpenJDK in verschiedenen Versionen von Ubuntu-Basisimages bereitzustellen, empfiehlt Microsoft, dass Benutzer eigene 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 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-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 enthalten einen app Benutzer, der optional aktiviert und verwendet werden kann, indem Ebenen verwendet werden:

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 Anwendungs-Binärdatei als root kopiert, da die Bilder root standardmäßig beibehalten werden. 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.

Standardgebietsschema

Die Images für Microsoft Build of OpenJDK sind standardmäßig mit dem en_US.UTF-8 Gebietsschema 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.

Wenn Sie z. B. das pt_BR.UTF-8 Gebietsschema auf einem Ubuntu-basierten Image verwenden möchten, 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. Es ist nicht gedacht, die optimalen Konfigurationen vorzuschlagen.

Ältere Unterversionen beibehalten

Microsoft Build of OpenJDK-Containerimages 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 Tools wie apt-get oder yum verwenden, um die spezifische Unterversion des JDK zu installieren.

Um ein Rollback auf bestimmte Versionen auf unterschiedlichen Basisbetriebssystemimages außerhalb der Liste der bereitgestellten Images durchzuführen, können Sie den debian:buster-slim gleichen Ansatz wie unten entweder in der ersten Phase eines Multi-Phasen-Container-Image-Builds oder als Teil eines herkömmlichen Linux-Paketinstallationsflusses verwenden. Weitere Informationen finden Sie im Abschnitt "Installieren auf Ubuntu 18.04+ " unter "Microsoft Build of OpenJDK installieren".

Für CBL-Mariner und andere Betriebssystemimages, die auf RPM/yum basieren, siehe die Details weiter unten in diesem Artikel.

Für Ubuntuund andere Debian-basierte Bilder können Sie alle verfügbaren Nebenversionen anzeigen, die in den Microsoft Linux-Repositorys veröffentlicht wurden, wie 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 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
...

In diesem Bash-Beispiel werden Bilder mit CBL-Mariner Basis 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.

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:

  1. Fügen Sie das Zertifikat mithilfe des folgenden Befehls zum Vertrauensspeicher hinzu:

    notation cert add --type ca --store supplychain msft_supply_chain.crt
    
  2. Konfigurieren 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"
                ]
            }
        ]
    }
    
  3. Importieren Sie die Vertrauensrichtlinie mithilfe des folgenden Befehls:

    notation policy import trustpolicy.json
    
  4. Überprüfen Sie das Bild mithilfe des folgenden Befehls:

    notation verify mcr.microsoft.com/openjdk/jdk:21-distroless
    

    Ihnen sollte die folgende Ausgabe 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.