Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 Registry på mcr.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 Dockerfile
kan 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:
- Notation CLI
-
msft_supply_chain.crt
- Ladda ned den här filen och spara den på den lokala datorn med hjälp av ett filnamn, till exempel msft_supply_chain.crt.
Använd sedan följande steg:
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
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" ] } ] }
Importera förtroendeprincipen med hjälp av följande kommando:
notation policy import trustpolicy.json
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.