Dela via


Containeravbildningar för Microsoft Build of OpenJDK

Den här artikeln innehåller information om tillgängliga containeravbildningar för Microsoft Build of OpenJDK.

Linux-baserade avbildningar

Vi tillhandahåller för närvarande Linux-baserade containeravbildningar för Ubuntu och Microsoft CBL-Mariner, som nu kallas Azure Linux. Avbildningarna publiceras i Microsoft Artifact Registrymcr.microsoft.com/openjdk/jdk.

Om du vill hämta den senaste avbildningen för en specifik tagg använder du följande kommando:

docker pull mcr.microsoft.com/openjdk/jdk:<tag>

I följande tabell visas taggen som ska användas för din Linux-distribution och JDK-version.

Basoperativsystem OpenJDK 21 OpenJDK 17 OpenJDK 11 OpenJDK 8
Ubuntu 22.04 21-ubuntu 17-ubuntu 11-ubuntu Ej tillämpligt
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

Obs!Bilder för OpenJDK 8 levereras med binärfiler för Eclipse Temurin från Projektet Eclipse Adoptium.

Arkitekturer

Bilderna ovan erbjuds för både amd64 arkitekturer och arm64 arkitekturer. Din containerkörning ska hämta rätt avbildning baserat på din miljö. Om du vill tvinga fram en hämtning av en avbildning för en specifik arkitektur använder du följande:

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

Om du vill framtvinga en arkitektur i en Dockerfilekan du använda följande:

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

Mer information om hur du skapar containeravbildningar för flera plattformar finns i dokumentationen för containerkörningen. Till exempel Docker och Podman.

Så här använder du dessa bilder

Skapa en Dockerfile med följande innehåll:

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

Distrolös

De distrolösa bilderna baseras på CBL-Mariner 2.0-distributionen av Microsoft. De kräver en annan metod för att distribuera ett program. Eftersom de distrolösa avbildningarna inte innehåller en fullständig Linux-distribution finns det till exempel inget gränssnitt.

Bilderna ENTRYPOINT är redan konfigurerade för att peka på java kommandot. Användning av Dockerfiles måste använda instruktionen CMD för att slutföra kommandoradsargumenten i JVM-startprocessen.

Skapa en Dockerfile med följande innehåll:

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

COPY app.jar /app.jar

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

Använda en annan basoperativsystemavbildning eller version

Om du föredrar att använda en annan operativsystembasavbildningsdistribution kan du kopiera JDK:t från en befintlig fördefinierad avbildning med hjälp av instruktionen COPY --from i en Dockerfile, ungefär som i följande exempel:

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

Du kan också installera JDK med antingen yum eller apt-get, eller helt enkelt extrahera en tar.gz fil och konfigurera JAVA_HOME därefter. Läs mer.

Använda en annan version av Ubuntu

För att distribuera Microsoft Build of OpenJDK på olika versioner av Ubuntu-basavbildningar rekommenderar Microsoft att användarna skapar sina egna Dockerfiles. Som referens skapar nedanstående Dockerfile en avbildning med 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"]

Alpina bilder

Även om Microsoft inte tillhandahåller alpine-baserade avbildningar tillhandahåller vi en begränsad uppsättning muslkompilerade JDK-binärfiler för Alpine Linux.

Användare är välkomna att skapa containeravbildningar för Alpine Linux med hjälp av tillgängliga binärfiler.

Skapa en Dockerfile med följande innehåll:

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

Skapa en anpassad Java-körning

Om du vill skapa en anpassad Java-körningsavbildning använder du en Dockerfile i flera steg som liknar följande exempel:

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

Mer information om hur du skapar anpassade Java-körningar finns i Java Runtimes med jlink

Icke-rotanvändare

Bilderna levereras med en app användare som kan aktiveras och användas genom att använda lager:

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

I exemplet ovan kopieras programbinärfilen som root, eftersom bilderna förblir med root som standard. Programmet körs sedan som app. Mappen /home/app ägs också av användaren app, vilket ger programmet ett skrivbart filsystem.

Standardinställningar för region

Bilderna för Microsoft Build av OpenJDK är som standard konfigurerade med en_US.UTF-8 lokalinställning. Om du vill använda ett annat språk, eller en annan basavbildning enligt beskrivningen tidigare, måste du manuellt konfigurera miljövariabler i din egen Dockerfile och kontrollera att det språk du vill ha är installerat.

Om du till exempel vill använda lokalinställningen pt_BR.UTF-8 på en Ubuntu-baserad avbildning kan du lägga till följande rader i 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
...

Den här Dockerfile tillhandahålls som ett exempel. Det är inte avsett att föreslå de mest optimala konfigurationerna.

Håll dig till äldre delversioner

Microsoft Build of OpenJDK-containeravbildningar är endast tillgängliga med de taggar som angavs tidigare. Vi tillhandahåller inte taggar för mindre versioner och huvudversionstaggar har alltid den senaste delversionen för att säkerställa att utvecklarna har den senaste uppdateringen för en viss huvudversion.

Dessa basavbildningar använder den underliggande package manager-mekanismen för Linux-distributionerna för att installera JDK-paketet. För att behålla en viss äldre version måste du därför använda verktyg som apt-get eller yum för att installera den specifika delversionen av JDK:t.

Om du vill återställa till specifika versioner på olika bas-operativsystembilder utanför listan över angivna bilder, kan du använda samma metod nedan, till exempel debian:buster-slim, antingen i den första fasen av en flerfas containeravbildning eller som en del av en traditionell Linux-paketinstallationsprocessen. Mer information finns i avsnittet Installera på Ubuntu 18.04+ i Installera Microsoft Build of OpenJDK.

För CBL-Mariner och andra OS-avbildningar baserade på RPM/yum, se detaljerna som anges senare i denna artikel.

För Ubuntu, och andra Debian-baserade avbildningar, kan du visa alla tillgängliga delversioner som publicerats i Microsoft Linux-lagringsplatserna, som du ser i följande Bash-exempel som visar kommandon och utdata. Kommandona som visas här förutsätter att Microsoft Linux-lagringsplatsen är konfigurerad enligt beskrivningen i Installera på 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
...

Det här Bash-exemplet visar hur du får bilden att återgå msopenjdk-11 till en äldre version, till exempel 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) ...

Om du vill göra samma sak i Dockerfile använder du följande kommandon:

FROM mcr.microsoft.com/openjdk/jdk:11-ubuntu
...
RUN apt-get update && \
    apt-get install -y --allow-downgrades msopenjdk-11=11.0.16-1
...

Det här Bash-exemplet använder CBL-Mariner baserade bilder:

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

Om du vill göra samma sak i Dockerfile använder du följande kommandon:

FROM mcr.microsoft.com/openjdk/jdk:11-mariner
...
RUN yum update && \
    yum install -y --nogpgcheck msopenjdk-11-11.0.15-1
...

Schema för återskapande av containeravbildning

För att säkerställa den högsta nivån av säkerhet och stabilitet återskapas våra containeravbildningar varje måndag, onsdag och fredag. Med det här regelbundna återskapningsschemat kan vi snabbt införliva de senaste säkerhetskorrigeringarna och uppdateringarna.

Du kan förvänta dig följande fördelar med det här återskapningsschemat:

  • Säkerhetsuppdateringar i tid: Genom att återskapa bilderna tre gånger i veckan ser vi till att nya säkerhetsrisker åtgärdas snabbt.
  • Förbättrad stabilitet: Regelbundna uppdateringar hjälper till att upprätthålla stabiliteten och prestandan för dina program genom att inkludera de senaste felkorrigeringarna och förbättringarna.

Om du har frågor eller stöter på problem som rör dessa uppdateringar kan du läsa det här schemat innan du öppnar ett supportärende.

Mer information om våra supportprinciper finns i Supportöversikt för Microsoft Build of OpenJDK.

Verifiera signaturer för containerbild

För att verifiera containeravbildningssignaturerna, installera först följande nödvändigheter:

Använd sedan följande steg:

  1. Lägg till certifikatet i förtroendearkivet med hjälp av följande kommando:

    notation cert add --type ca --store supplychain msft_supply_chain.crt
    
  2. Konfigurera förtroendeprinciper genom att skapa en trustpolicy.json fil med följande innehåll:

    {
        "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. Importera förtroendeprincipen med hjälp av följande kommando:

    notation policy import trustpolicy.json
    
  4. Verifiera avbildningen med hjälp av följande kommando:

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

    Du bör se följande utdata:

    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-baserade avbildningar

Vi tillhandahåller för närvarande inte Windows-baserade containeravbildningar.

Ge synpunkter på Microsofts version av OpenJDK

Skicka oss dina kommentarer, tankar och idéer för att hjälpa oss att förbättra Microsoft Build of OpenJDK. Besök vår OpenJDK-diskussionssida på GitHub för att skicka oss din feedback.

Java och OpenJDK är varumärken eller registrerade varumärken som tillhör Oracle och/eller dess dotterbolag.