Image kontejnerů pro Microsoft Build sady OpenJDK
Tento článek obsahuje informace o dostupných imagích kontejneru pro sadu Microsoft Build of OpenJDK.
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/jdk
adrese .
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 .
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 Dockerfile
uvnitř , 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.
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"]
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"]
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-get
nebo jednoduše extrahovat tar.gz
soubor a odpovídajícím způsobem nakonfigurovat JAVA_HOME
. Další informace.
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"]
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" ]
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.
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 app
a dává aplikaci zapisovatelný systém souborů.
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.
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-slim
použí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 Ubuntu
imagí 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
...
Kvůli zajištění nejvyšší úrovně zabezpečení a stability se image kontejnerů znovu sestaví 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, že se rychle vyřeší všechna nová 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.
V současné době nenabídáme image kontejnerů založené na Windows.
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í.