Containerimages 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

Derzeit stellen wir Linux-basierte Containerimages für Ubuntu und Microsoft CBL-Mariner bereit. Die Bilder werden in der Microsoft-Containerregistrierung 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-Verteilung 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/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 for OpenJDK 8 ship with binaries of Eclipse Temurin, from the Eclipse Adoptium project.

Architekturen

Die obigen Bilder werden sowohl für Architekturen als auch für amd64arm64 Architekturen angeboten. Ihre Containerlaufzeit ruft das richtige Image basierend auf Ihrer Umgebung ab. Um einen Pull eines Bilds für eine bestimmte Architektur zu erzwingen, verwenden Sie Folgendes:

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

Um eine Architektur innerhalb einer DockerfileArchitektur zu erzwingen, können Sie Folgendes verwenden:

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

Weitere Informationen zum Erstellen von Multiplattform-Containerimages finden Sie in der Dokumentation Ihrer Containerlaufzeit. 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:17-ubuntu

# Continue with your application deployment
RUN mkdir /opt/app
COPY japp.jar /opt/app
CMD ["java", "-jar", "/opt/app/japp.jar"]

Untrolos

Die unerschütterten Bilder basieren auf der CBL-Mariner 2.0-Verteilung von Microsoft. Sie erfordern einen anderen Ansatz für die Bereitstellung einer Anwendung. Da die untrotrolosen Bilder keine vollständige Linux-Verteilung enthalten, gibt es z. B. keine Shell.

Die ENTRYPOINT bilder sind bereits konfiguriert, die auf den java Befehl verweisen. Die Verwendung von Dockerfiles muss die CMD Anweisung verwenden, um die Befehlszeilenargumente des JVM-Startfeldprozesses abzuschließen.

Erstellen Sie eine Dockerfile-Datei mit dem folgenden Inhalt:

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

COPY app.jar /app.jar

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

Verwenden eines anderen Basisbetriebssystemimages

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

Sie können das JDK auch entweder oder yumapt-get, oder einfach extrahieren und tar.gz entsprechend konfigurieren JAVA_HOME . Weitere Informationen.

Alpine Bilder

Obwohl Microsoft keine alpinen Bilder produziert, stellen wir muslkompilierte JDK-Binärdateien für Alpine Linux bereit.

Benutzer können mit unseren Binärdateien Containerimages für Alpine Linux 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: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"]

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:17-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 rootkopiert, da die Bilder standardmäßig wieder Standard root 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 und soll nicht die optimalen Konfigurationen vorschlagen.

Beibehalten älterer Nebenversionen

Microsoft Build of OpenJDK container images are only available under the tags listed previously. Wir veröffentlichen keine Tags für Nebenversionen, und die Hauptversionstags verfügen immer über die neueste Nebenversion, um sicherzustellen, dass Entwickler immer ü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. Um auf einer bestimmten Version zu bleiben, müssen Sie daher Tools verwenden, z apt-get . B. oder yum um die spezifische Nebenversion des JDK zu installieren.

Um bestimmte Versionen auf verschiedenen Basisbetriebssystemimages zu installieren, können Sie z debian:buster-slim. B. denselben Ansatz entweder in der ersten Phase eines Muli-Phasen-Containerimagebuilds 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".

Weitere CBL-Mariner Betriebssystemimages, die auf RPM/yum basieren, finden Sie in den 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.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

In diesem Bash-Beispiel wird gezeigt, wie Ihr Bild rückgängig machen zu einer älteren Version rückgängig machen msopenjdk-11 wird, z11.0.11+9-1. B. :

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

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.11+9-1
...

In diesem Bash-Beispiel werden basierte Bilder verwendet 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!

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.10+9-1
...

Windows-basierte Images

Derzeit stellen wir keine Windows-basierten Containerimages bereit.

Feedback zum Microsoft Build of OpenJDK

Senden Sie uns Ihre Kommentare, Gedanken und Ideen, damit wir den Microsoft Build of 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.