Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Dit artikel bevat informatie over de beschikbare containerinstallatiekopieën voor de Microsoft Build van OpenJDK.
Afbeeldingen op basis van Linux
Momenteel leveren we containerinstallatiekopieën op basis van Linux voor Ubuntu en Microsoft CBL-Mariner, nu bekend als Azure Linux. De afbeeldingen worden gepubliceerd in het Microsoft Artifact Registry op mcr.microsoft.com/openjdk/jdk
.
Gebruik de volgende commando om de meest recente image voor een specifieke tag op te halen.
docker pull mcr.microsoft.com/openjdk/jdk:<tag>
In de volgende tabel ziet u de tag die moet worden gebruikt voor uw Linux-distributie en JDK-versie.
Basisbesturingssysteem | OpenJDK 21 | OpenJDK 17 | OpenJDK 11 | OpenJDK 8 |
---|---|---|---|---|
Ubuntu 22.04 | 21-ubuntu |
17-ubuntu |
11-ubuntu |
N.v.t. |
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 |
Opmerking:Afbeeldingen voor OpenJDK 8 worden geleverd met binaire bestanden van Eclipse Temurin, van het Eclipse Adoptium-project.
Architecturen
De bovenstaande afbeeldingen worden aangeboden voor zowel amd64
als arm64
architecturen. Uw containerruntime haalt de juiste installatiekopie op op basis van uw omgeving. Om een pull van een image voor een specifieke architectuur af te dwingen, gebruik het volgende:
$ docker pull --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-mariner
Om een architectuur binnen een Dockerfile
af te dwingen, kunt u het volgende gebruiken:
FROM --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-mariner AS build
# ...
Raadpleeg de documentatie van uw containerruntime voor meer informatie over het bouwen van containerbeelden voor meerdere platforms. Bijvoorbeeld Docker en Podman.
Hoe u deze afbeeldingen kunt gebruiken
Maak een Dockerfile met de volgende inhoud:
# 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"]
Distributieloos
De distroless afbeeldingen zijn gebaseerd op de CBL-Mariner 2.0-distributie van Microsoft. Ze vereisen een andere benadering voor het implementeren van een toepassing. Omdat de distributieloze installatiekopieën geen volledige Linux-distributie bevatten, is er bijvoorbeeld geen shell.
De ENTRYPOINT
afbeeldingen zijn al geconfigureerd om te verwijzen naar de opdracht java
. Het consumeren van Dockerfiles moet gebruik maken van de CMD
instructie om de opdrachtregelargumenten van het JVM-startproces te voltooien.
Maak een Dockerfile met de volgende inhoud:
FROM mcr.microsoft.com/openjdk/jdk:21-distroless
COPY app.jar /app.jar
CMD ["-Xmx256m", "-jar", "/app.jar"]
Een andere basis-OS-afbeelding of versie van het besturingssysteem gebruiken
Als u liever een andere distributie van basisinstallatiekopieën van het besturingssysteem gebruikt, kunt u de JDK kopiëren van een bestaande vooraf gebouwde installatiekopie met behulp van de COPY --from
instructie in een Dockerfile, vergelijkbaar met het volgende voorbeeld:
# 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"]
U kunt de JDK ook installeren met behulp van yum
of apt-get
, of gewoon een tar.gz
bestand extraheren en dienovereenkomstig configureren JAVA_HOME
.
Meer informatie.
Een andere versie van Ubuntu gebruiken
Als u Microsoft Build van OpenJDK wilt implementeren op verschillende versies van Ubuntu-basisinstallatiekopieën, raadt Microsoft gebruikers aan hun eigen installatiekopieën Dockerfiles
te maken. Ter informatie creëert de onderstaande Dockerfile
een systeemimage met Ubuntu 24.04.
# 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-afbeeldingen
Hoewel Microsoft geen Alpine-gebaseerde afbeeldingen levert, leveren we wel een beperkte set musl-gecompileerde binaries van JDK voor Alpine Linux.
Gebruikers zijn welkom om containerinstallatiekopieën voor Alpine Linux te maken met behulp van de beschikbare binaire bestanden.
Maak een Dockerfile met de volgende inhoud:
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" ]
Een aangepaste Java-runtime maken
Als u een aangepaste Java-runtimeafbeelding wilt maken, gebruikt u een Dockerfile met meerdere fasen die vergelijkbaar is met het volgende voorbeeld.
# 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"]
Zie Java Runtimes met jlink voor meer informatie over het maken van aangepaste Java-runtimes
Niet-hoofdgebruiker
De afbeeldingen worden geleverd met een app
gebruiker die optioneel kan worden ingeschakeld en gebruikt door lagen:
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"]
In het bovenstaande voorbeeld wordt het binaire toepassingsbestand gekopieerd als root
, omdat de afbeeldingen standaard bij root
blijven. De toepassing wordt vervolgens uitgevoerd als app
. De map /home/app
is ook eigendom van de gebruiker app
, waardoor de toepassing een schrijfbaar bestandssysteem heeft.
Standaardinstelling voor regio
De installatiekopieën voor Microsoft Build van OpenJDK worden standaard geconfigureerd met de en_US.UTF-8
landinstelling. Als u een andere landinstelling of een andere basisinstallatiekopieën wilt gebruiken zoals eerder beschreven, moet u omgevingsvariabelen handmatig configureren in uw eigen Dockerfile en ervoor zorgen dat de gewenste landinstelling is geïnstalleerd.
Als u bijvoorbeeld de pt_BR.UTF-8
landinstelling wilt gebruiken op een Ubuntu-installatiekopie, kunt u de volgende regels toevoegen aan uw Dockerfile:
...
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
...
Dit Dockerfile wordt als voorbeeld gegeven. Het is niet bedoeld om de meest optimale configuraties voor te stellen.
Blijf op oudere secundaire versies
Microsoft Build van OpenJDK-containerafbeeldingen zijn alleen beschikbaar onder de eerder vermelde tags. We leveren geen tags voor secundaire versies en de primaire versietags hebben altijd de nieuwste secundaire versie om ervoor te zorgen dat ontwikkelaars de nieuwste update voor een bepaalde primaire versie hebben.
Deze basisinstallatiekopieën maken gebruik van het onderliggende pakketbeheermechanisme van de Linux-distributies om het JDK-pakket te installeren. Als u een bepaalde oudere versie wilt behouden, moet u daarom hulpprogramma's gebruiken, zoals apt-get
of yum
om de specifieke secundaire versie van de JDK te installeren.
Als u wilt terugdraaien naar specifieke versies op verschillende basisinstallatiekopieën buiten de lijst met opgegeven installatiekopieën, kunt u bijvoorbeeld debian:buster-slim
dezelfde methode gebruiken in de eerste fase van een containerinstallatiekopieën met meerdere fasen, of als onderdeel van een traditionele installatiestroom voor Linux-pakketten. Zie de sectie Installeren op Ubuntu 18.04+ van De Microsoft Build van OpenJDK installeren voor meer informatie.
Zie voor CBL-Mariner
en andere installatiekopieën van het besturingssysteem op basis van RPM/yum de details verderop in dit artikel.
Voor Ubuntu
en andere Debian-gebaseerde afbeeldingen kunt u alle beschikbare secundaire versies weergeven die zijn gepubliceerd in de Microsoft Linux-opslagplaatsen, zoals aangetoond in het volgende Bash-voorbeeld met opdrachten en uitvoer. Bij de opdrachten die hier worden weergegeven, wordt ervan uitgegaan dat de Microsoft Linux-opslagplaats is geconfigureerd, zoals beschreven bij Installeren op Ubuntu 18.04+.
$ 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 dit Bash-voorbeeld ziet u hoe u uw image kunt terugzetten msopenjdk-11
naar een oudere versie, bijvoorbeeld 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) ...
Gebruik de volgende opdrachten om hetzelfde te doen in uw Dockerfile:
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 dit Bash-voorbeeld worden op CBL-Mariner
gebaseerde installatiekopieën gebruikt.
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
Gebruik de volgende opdrachten om hetzelfde te doen in uw Dockerfile:
FROM mcr.microsoft.com/openjdk/jdk:11-mariner
...
RUN yum update && \
yum install -y --nogpgcheck msopenjdk-11-11.0.15-1
...
Schema voor het opnieuw bouwen van containerafbeeldingen
Om het hoogste niveau van beveiliging en stabiliteit te garanderen, worden onze containerafbeeldingen elke maandag, woensdag en vrijdag opnieuw opgebouwd. Dankzij dit reguliere herbouwschema kunnen we onmiddellijk de meest recente beveiligingspatches en -updates opnemen.
U kunt de volgende voordelen verwachten van dit herbouwschema:
- Tijdige beveiligingsupdates: Door de installatiekopieën drie keer per week opnieuw te bouwen, zorgen we ervoor dat nieuwe beveiligingsproblemen snel worden opgelost.
- Verbeterde stabiliteit: Regelmatige updates helpen de stabiliteit en prestaties van uw toepassingen te behouden door de meest recente bugfixes en verbeteringen op te slaan.
Als u vragen hebt of problemen ondervindt met betrekking tot deze updates, raadpleegt u deze planning voordat u een ondersteuningsticket opent.
Zie ondersteuningsschema voor de Microsoft Build van OpenJDK voor meer informatie over ons ondersteuningsbeleid.
Handtekeningen voor containerafbeeldingen controleren
Installeer eerst de volgende voorvereisten om handtekeningen voor containerafbeeldingen te controleren.
- CLI Notation
-
msft_supply_chain.crt
- Download dit bestand en sla het op uw lokale computer op met behulp van een bestandsnaam zoals msft_supply_chain.crt.
Gebruik vervolgens de volgende stappen:
Voeg het certificaat toe aan het vertrouwensarchief met behulp van de volgende opdracht:
notation cert add --type ca --store supplychain msft_supply_chain.crt
Configureer vertrouwensbeleid door een trustpolicy.json-bestand te maken met de volgende inhoud:
{ "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" ] } ] }
Importeer het vertrouwensbeleid met behulp van de volgende opdracht:
notation policy import trustpolicy.json
Controleer de afbeelding met behulp van de volgende opdracht:
notation verify mcr.microsoft.com/openjdk/jdk:21-distroless
U ziet nu de volgende uitvoer:
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-gebaseerde afbeeldingen
Momenteel leveren we geen windows-containerinstallatiekopieën.
Feedback geven over de Microsoft Build van OpenJDK
Stuur ons uw opmerkingen, gedachten en ideeën om ons te helpen de Microsoft Build van OpenJDK te verbeteren. Ga naar onze OpenJDK-discussiepagina op GitHub om ons uw feedback te sturen.
Java en OpenJDK zijn handelsmerken of gedeponeerde handelsmerken van Oracle en/of haar gelieerde ondernemingen.