Sdílet prostřednictvím


Image kontejnerů pro Microsoft Build sady OpenJDK

Tento článek obsahuje informace o dostupných obrazech kontejneru pro verzi Microsoft Build of OpenJDK.

Image založené na Linuxu

V současné době dodáváme image kontejnerů založené na Linuxu pro Ubuntu a Microsoft CBL-Mariner, které se teď označují jako Azure Linux. Image se publikují v registru Microsoft Artifact Registry umístěném na adrese mcr.microsoft.com/openjdk/jdk.

Pokud chcete stáhnout nejnovější image pro určitou značku, použijte následující příkaz:

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

Následující tabulka ukazuje značku, která se má použít pro vaši distribuci Linuxu a verzi sady JDK.

Základní operační systém OpenJDK 21 OpenJDK 17 OpenJDK 11 OpenJDK 8
Ubuntu 22.04 21-ubuntu 17-ubuntu 11-ubuntu Není k dispozici
CBL Mariner 2.0 21-mariner 17-mariner 11-mariner 8-mariner
CBL-Mariner 2.0 Bez distribuce 21-distroless 17-distroless 11-distroless 8-distroless

Poznámka:Obrazy pro OpenJDK 8 jsou dodávány s binárními soubory Eclipse Temurin z projektu Eclipse Adoptium.

Architektury

Nabízíme výše uvedené obrázky pro obě architektury: amd64 a arm64. Modul runtime kontejneru načítá správnou image na základě vašeho prostředí. Pokud chcete vynutit stažení obrazu pro konkrétní architekturu, použijte následující:

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

Chcete-li vynutit architekturu uvnitř Dockerfile, můžete použít následující:

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

Další informace o vytváření imagí kontejnerů s více platformami najdete v dokumentaci modulu runtime kontejneru. Například Docker a Podman.

Jak tyto obrázky používat

Vytvořte soubor Dockerfile s následujícím obsahem:

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

Bez distribuce

Obrázky bez distribuce jsou založeny na CBL-Mariner distribuci 2.0 společností Microsoft. K nasazení aplikace vyžadují jiný přístup. Vzhledem k tomu, že distroless image neobsahují úplnou linuxovou distribuci, není zde například žádný shell.

Tyto ENTRYPOINT image už jsou nakonfigurované tak, aby odkazovaly na java příkaz. Při používání souborů Dockerfile je třeba použít příkaz CMD pro dokončení argumentů příkazového řádku procesu spouštění JVM.

Vytvořte soubor Dockerfile s následujícím obsahem:

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

COPY app.jar /app.jar

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

Použijte jiný obraz základního operačního systému nebo jeho verzi

Pokud chcete použít jinou základní distribuci image operačního systému, můžete sadu JDK zkopírovat z existující předdefinované image pomocí COPY --from instrukce v souboru Dockerfile, podobně jako v následujícím příkladu:

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

Sadu JDK můžete nainstalovat buď pomocí yum nebo apt-get, nebo jednoduše extrahovat tar.gz soubor a odpovídajícím způsobem nakonfigurovat JAVA_HOME. Další informace.

Použití jiné verze Ubuntu

Pokud chcete nasadit Microsoft Build OpenJDK na různé verze základních imagí Ubuntu, Microsoft doporučuje, aby uživatelé vytvořili vlastní Dockerfiles. Následující příklad Dockerfile vytvoří image s 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"]

Alpské obrázky

I když Microsoft nenabídá image založené na Alpine, poskytujeme omezenou sadu binárních souborů JDK kompilovaných pro Alpine Linux.

Uživatelé můžou vytvářet image kontejnerů pro Alpine Linux pomocí dostupných binárních souborů.

Vytvořte soubor Dockerfile s následujícím obsahem:

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

Vytvoření vlastního Java runtime

Pokud chcete vytvořit vlastní image modulu runtime Java, použijte soubor Dockerfile s více fázemi podobný následujícímu příkladu:

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

Další informace o vytváření vlastních modulů runtime Java najdete v tématu Moduly runtime Java s jlinkem.

Ne-root uživatel

Obrázky se dodávají s uživatelem app , který může být volitelně povolen a používán využíváním vrstev:

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

V předchozím příkladu se binární soubor aplikace zkopíruje jako root, protože obrázky zůstávají root ve výchozím nastavení. Aplikace se pak spustí jako app. Složka /home/app je také vlastněna uživatelem appa dává aplikaci zapisovatelný systém souborů.

Výchozí locale

Obrázky pro Microsoft Build of OpenJDK jsou ve výchozím nastavení nakonfigurovány s jazykovým nastavením en_US.UTF-8. Pokud chcete použít jiné národní prostředí nebo jinou základní image, jak je popsáno výše, budete muset ručně nakonfigurovat proměnné prostředí ve vlastním souboru Dockerfile a ujistit se, že je nainstalované národní prostředí.

Pokud chcete například použít pt_BR.UTF-8 lokalizaci na Ubuntu obrazu, můžete do souboru Dockerfile přidat následující řádky:

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

Tento soubor Dockerfile je k dispozici jako příklad. Nemá navrhovat nejoptimálnější konfigurace.

Zůstaňte na starších dílčích verzích

Microsoft Build obrazy kontejnerů OpenJDK jsou k dispozici pouze pod uvedenými značkami. U podverzí nedodáváme značky a značky hlavních verzí vždy obsahují nejnovější podverzi, aby vývojáři měli k dispozici nejaktuálnější aktualizaci pro libovolnou hlavní verzi.

Tyto základní image používají mechanismus základního správce balíčků distribucí Linuxu k instalaci balíčku JDK. Proto, pokud chcete zůstat na konkrétní starší verzi, budete muset použít nástroje, jako je apt-get nebo yum, abyste nainstalovali konkrétní podverzi sady JDK.

Pokud chcete vrátit zpět na konkrétní verze na různých základních imagích operačního systému mimo seznam zadaných imagí, můžete například debian:buster-slimpoužít stejný postup níže, a to buď v první fázi sestavení image kontejneru muli-stage, nebo jako součást tradičního toku instalace balíčku Pro Linux. Další informace naleznete v části Instalace na Ubuntu 18.04+instalace sady Microsoft Build of OpenJDK.

Pro CBL-Mariner a další obrazy operačních systémů založené na RPM/yum, viz podrobnosti uvedené dále v tomto článku.

Pro Ubuntu, a další obrazy založené na Debianu, můžete zobrazit všechny dostupné podverze publikované v úložištích Microsoft Linuxu, jak je znázorněno v následujícím příkladu Bash, který ukazuje příkazy a výstup. Zde uvedené příkazy předpokládají, že je nakonfigurované úložiště Microsoft Linux, jak je popsáno v tématu Instalace na 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
...

Tento příklad Bash ukazuje, jak se váš obrázek vrátí msopenjdk-11 ke starší verzi, například 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) ...

Pokud chcete ve vašem souboru Dockerfile udělat totéž, použijte následující příkazy:

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

Tento příklad Bash používá obrazy založené na 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.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

Pokud chcete ve vašem souboru Dockerfile udělat totéž, použijte následující příkazy:

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

Plán opětovného sestavení obrazu kontejneru

Aby byla zajištěna nejvyšší úroveň zabezpečení a stability, obrazy kontejnerů jsou znovu sestaveny každé pondělí, středu a pátek. Tento pravidelný plán opětovného sestavení nám umožňuje rychle začlenit nejnovější opravy zabezpečení a aktualizace.

Z tohoto plánu opětovného sestavení můžete očekávat následující výhody:

  • Včasné aktualizace zabezpečení: Opětovným sestavením imagí třikrát týdně zajistíme rychlé řešení všech nových ohrožení zabezpečení.
  • Vylepšená stabilita: Pravidelné aktualizace pomáhají udržovat stabilitu a výkon aplikací tím, že zahrnují nejnovější opravy chyb a vylepšení.

Pokud máte nějaké dotazy nebo narazíte na problémy související s těmito aktualizacemi, před otevřením lístku podpory si projděte tento plán.

Další informace o našich zásadách podpory najdete v plánu podpory pro sestavení OpenJDK od Microsoftu.

Ověřit podpisy obrazů kontejneru

Pokud chcete ověřit podpisy imagí kontejneru, nejprve nainstalujte následující požadavky:

Pak použijte následující kroky:

  1. Certifikát přidejte do úložiště důvěryhodnosti pomocí následujícího příkazu:

    notation cert add --type ca --store supplychain msft_supply_chain.crt
    
  2. Zásady důvěryhodnosti nakonfigurujte vytvořením souboru trustpolicy.json s následujícím obsahem:

    {
        "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. Pomocí následujícího příkazu naimportujte zásady důvěryhodnosti:

    notation policy import trustpolicy.json
    
  4. Pomocí následujícího příkazu ověřte image:

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

    Měl by se zobrazit následující výstup:

    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
    

Image založené na Windows

V současné době nenabídáme image kontejnerů založené na Windows.

Poskytnutí zpětné vazby k sestavení OpenJDK od Microsoftu

Pošlete nám svoje komentáře, myšlenky a nápady, které nám pomůžou vylepšit Microsoft Build OpenJDK. Navštivte naši diskuzní stránku OpenJDK na GitHubu a pošlete nám svůj názor.

Java a OpenJDK jsou ochranné známky nebo registrované ochranné známky společnosti Oracle a/nebo jejích přidružených společností.