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 amd64
arm64
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 Dockerfile
Architektur 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 yum
apt-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 root
kopiert, da die Bilder standardmäßig wieder Standard root
werden. Die Anwendung wird dann als app
ausgefü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 Ubuntu
und 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.