Delen via


Containerafbeeldingen voor de Microsoft Build van OpenJDK

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 Dockerfileste 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-slimdezelfde 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.

Gebruik vervolgens de volgende stappen:

  1. Voeg het certificaat toe aan het vertrouwensarchief met behulp van de volgende opdracht:

    notation cert add --type ca --store supplychain msft_supply_chain.crt
    
  2. 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"
                ]
            }
        ]
    }
    
  3. Importeer het vertrouwensbeleid met behulp van de volgende opdracht:

    notation policy import trustpolicy.json
    
  4. 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.