Sdílet prostřednictvím


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ě dodáváme image kontejnerů založené na Linuxu pro Ubuntu a Microsoft CBL-Mariner, které se teď označují jako Azure Linux. Obrázky jsou publikovány v Registr artefaktů Microsoft umístěné na mcr.microsoft.com/openjdk/jdkadrese .

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: Obrázky 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:21-mariner

Pokud chcete vynutit architekturu Dockerfileuvnitř , 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

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:21-distroless

COPY app.jar /app.jar

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

Použití jiné image nebo verze 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-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 také pomocí nebo yum apt-getnebo 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"]

Image Alpine

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

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: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í 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. Nemá navrhovat nejoptimálnější konfigurace.

Zůstaňte ve starších podverzech

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

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

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