Image kontejnerů pro Microsoft Build sady OpenJDK

Tento článek obsahuje informace o dostupných imagích kontejneru pro sadu Microsoft Build of OpenJDK.

Image založené na Linuxu

V současné době poskytujeme image kontejnerů založené na Linuxu pro Ubuntu a Microsoft CBL-Mariner. Image se publikují ve službě Microsoft Container Registry umístěné 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
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

Poznámka:Image pro OpenJDK 8 se dodávají s binárními soubory Eclipse Temurin z projektu Eclipse Adoptium .

Architektury

Výše uvedené obrázky jsou nabízeny pro obě amd64 architektury i arm64 pro architektury. Modul runtime kontejneru načítá správnou image na základě vašeho prostředí. Pokud chcete vynutit vyžádání image pro konkrétní architekturu, použijte následující:

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

Pokud chcete vynutit architekturu Dockerfileuvnitř , můžete použít následující:

FROM --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:17-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:17-ubuntu

# Continue with your application deployment
RUN mkdir /opt/app
COPY japp.jar /opt/app
CMD ["java", "-jar", "/opt/app/japp.jar"]

Bez distribuce

The distroless images are based on the CBL-Mariner 2.0 distribution by Microsoft. K nasazení aplikace vyžadují jiný přístup. Vzhledem k tomu, že disstroless image neobsahují úplnou linuxovou distribuci, neexistuje například žádné prostředí.

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

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

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

COPY app.jar /app.jar

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

Použití jiné image základního operačního systému

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-17-amd64
ENV PATH "${JAVA_HOME}/bin:${PATH}"
COPY --from=mcr.microsoft.com/openjdk/jdk:17-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 také pomocí nebo yumapt-getnebo jednoduše extrahovat tar.gz soubor a odpovídajícím způsobem nakonfigurovat JAVA_HOME . Další informace.

Image Alpine

I když Microsoft nevytváří image založené na Alpine, poskytujeme binární soubory JDK kompilované musl pro Alpine Linux.

Uživatelé můžou vytvářet image kontejnerů pro Alpine Linux pomocí našich 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 modulu runtime Java

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

Uživatel bez kořenového adresáře

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:17-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í národní prostředí

Image sady Microsoft Build of OpenJDK jsou ve výchozím nastavení nakonfigurované s národním prostředí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 národní prostředí na imagi založené na Ubuntu, 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 a není určen k návrhu nejoptimálnějších konfigurací.

Zůstaňte ve starších podverzech

Microsoft Build imagí kontejnerů OpenJDK je k dispozici pouze pod značkami uvedenými dříve. Značky pro podverze nepublikujeme a značky hlavní verze mají vždy nejnovější podverzi, aby vývojáři měli vždy nejnově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. Pokud tedy chcete zůstat na konkrétní verzi, budete muset použít nástroje, jako apt-get je nebo yum nainstalovat konkrétní podverzi sady JDK.

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

Další CBL-Mariner image operačního systému založené na RPM/yum najdete v podrobnostech uvedených dále v tomto článku.

U Ubuntuimagí založených 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 zobrazující příkazy a výstup. Zde uvedené příkazy předpokládají, že je úložiště Microsoft Linux nakonfigurované, 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.15+10-LTS-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.14.1+1-LTS-31205 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.14+9-LTS-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.13+8-LTS-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.12+7-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.11+9-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.10+9-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages

Tento příklad Bash ukazuje, jak se váš obrázek vrátí msopenjdk-11 ke starší verzi, například 11.0.11+9-1:

root@dd24eca5bdb3:/# 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@dd24eca5bdb3:/# apt-cache madison msopenjdk-11
msopenjdk-11 | 11.0.15+10-LTS-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.14.1+1-LTS-31205 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.14+9-LTS-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.13+8-LTS-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.12+7-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.11+9-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages
msopenjdk-11 | 11.0.10+9-1 | https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages

root@dd24eca5bdb3:/# apt-get -y install -y --allow-downgrades msopenjdk-11=11.0.11+9-1
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be DOWNGRADED:
  msopenjdk-11
0 upgraded, 0 newly installed, 1 downgraded, 0 to remove and 17 not upgraded.
Need to get 193 MB of archives.
After this operation, 353 kB disk space will be freed.
Get:1 https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 msopenjdk-11 amd64 11.0.11+9-1 [193 MB]
Fetched 193 MB in 6s (30.9 MB/s)
debconf: delaying package configuration, since apt-utils is not installed
dpkg: warning: downgrading msopenjdk-11 from 11.0.14+9-LTS-1 to 11.0.11+9-1
(Reading database ... 5936 files and directories currently installed.)
Preparing to unpack .../msopenjdk-11_11.0.11+9-1_amd64.deb ...
Unpacking msopenjdk-11 (11.0.11+9-1) over (11.0.14+9-LTS-1) ...
Setting up msopenjdk-11 (11.0.11+9-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.11+9-1
...

Tento příklad Bash používá CBL-Mariner image založené na:

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.10+9-1
Loaded plugin: tdnfrepogpgcheck

Downgrading:
msopenjdk-11      x86_64      11.0.10+9-1      packages-microsoft-com-prod      308.38M 323358496

Total installed size: 308.38M 323358496

Downloading:
Testing transaction
Running transaction
Installing/Updating: msopenjdk-11-11.0.10+9-1.x86_64
Removing: msopenjdk-11-11.0.12+7-1.x86_64

Complete!

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.10+9-1
...

Image založené na Windows

V současné době neposkytujeme 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 afilací.