Образы контейнеров для Microsoft Build openJDK

В этой статье содержатся сведения о доступных образах контейнеров для Microsoft Build OpenJDK.

Образы на основе Linux

В настоящее время мы предлагаем образы контейнеров на основе Linux для Ubuntu и Microsoft CBL-Mariner, которые теперь называются Azure Linux. Изображения публикуются в Реестр артефактов Microsoft, расположенных по адресуmcr.microsoft.com/openjdk/jdk.

Чтобы извлечь последнее изображение для определенного тега, используйте следующую команду:

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

В следующей таблице показан тег, используемый для дистрибутива Linux и версии JDK.

базовая операционная система. 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

Примечание. Изображения для OpenJDK 8 поставляется с двоичными файлами Eclipse Temurin из проекта Eclipse Adoptium .

Архитектуры

Приведенные выше изображения предлагаются для обоих amd64 архитектур и arm64 архитектур. Среда выполнения контейнера должна извлекать правильный образ в зависимости от среды. Чтобы принудительно извлечь изображение для определенной архитектуры, используйте следующее:

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

Чтобы принудительно применить архитектуру внутри Dockerfile, можно использовать следующее:

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

Дополнительные сведения о создании образов контейнеров с несколькими платформами см. в документации по среде выполнения контейнера. Например, Docker и Podman.

Как использовать эти изображения

Создайте Dockerfile со следующим содержимым:

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

Дистрибутивы

Образы без дистрибутива основаны на дистрибутиве CBL-Mariner 2.0 корпорацией Майкрософт. Им требуется другой подход к развертыванию приложения. Так как образы без дистрибутива не содержат полного дистрибутива Linux, например, нет оболочки.

Эти ENTRYPOINT образы уже настроены, указывающие на java команду. Использование Dockerfiles должно использовать CMD инструкцию для выполнения аргументов командной строки процесса запуска JVM.

Создайте Dockerfile со следующим содержимым:

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

COPY app.jar /app.jar

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

Использование другого базового образа ос или версии

Если вы предпочитаете использовать другое распределение базовых образов ОС, можно скопировать JDK из существующего предварительно созданного образа с помощью COPY --from инструкции в Dockerfile, как показано в следующем примере:

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

Вы также можете установить JDK с помощью любого yum или apt-getпростого извлечения tar.gz файла и настройки JAVA_HOME соответствующим образом. Дополнительные сведения

Использование другой версии Ubuntu

Чтобы развернуть Microsoft Build of OpenJDK в разных версиях базовых образов Ubuntu, корпорация Майкрософт рекомендует пользователям создавать собственные Dockerfilesобразы. Для справки ниже Dockerfile создается образ с 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"]

Альпийские изображения

Хотя корпорация Майкрософт не предоставляет образы на основе Alpine, мы предлагаем ограниченный набор двоичных файлов JDK для Alpine Linux.

Пользователи могут создавать образы контейнеров для Alpine Linux с помощью доступных двоичных файлов.

Создайте Dockerfile со следующим содержимым:

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

Создание пользовательской среды выполнения Java

Чтобы создать пользовательский образ среды выполнения Java, используйте многоэтапный файл Dockerfile , аналогичный следующему примеру:

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

Дополнительные сведения о создании пользовательских сред выполнения Java см. в статье "Среды выполнения Java" с помощью jlink

Пользователь, отличный от корневого пользователя

Изображения поставляются с app пользователем, который можно дополнительно включить и использовать с помощью слоев:

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

В приведенном выше примере двоичный файл приложения копируется как root, так как изображения остаются по root умолчанию. Затем приложение выполняется как app. Папка /home/app также принадлежит пользователю app, предоставляя приложению доступную для записи файловую систему.

Языковой стандарт по умолчанию

Образы для Microsoft Build OpenJDK настраиваются по умолчанию с языковым стандартом en_US.UTF-8 . Если вы хотите использовать другой языковой стандарт или другой базовый образ, как описано ранее, необходимо вручную настроить переменные среды в собственном файле Dockerfile и убедиться, что нужный языковой стандарт установлен.

Например, чтобы использовать языковой pt_BR.UTF-8 стандарт на образе на основе Ubuntu, можно добавить в 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
...

Этот файл Dockerfile предоставляется в качестве примера. Это не значит, чтобы предложить наиболее оптимальные конфигурации.

Оставайтесь на более старых дополнительных версиях

Образы контейнеров OpenJDK Microsoft Build доступны только в тегах, перечисленных ранее. Мы не предоставляем теги для дополнительных версий, а теги основных версий всегда имеют последнюю дополнительную версию, чтобы разработчики могли иметь последнее обновление для любой основной версии.

Эти базовые образы используют базовый механизм диспетчера пакетов дистрибутивов Linux для установки пакета JDK. Таким образом, чтобы оставаться на определенной старой версии, вам потребуется использовать такие средства, как apt-get или yum установить конкретную дополнительную версию JDK.

Для отката к определенным версиям на разных базовых образах ОС вне списка предоставленных образов, например debian:buster-slim, можно использовать тот же подход, приведенный ниже, на первом этапе сборки образа контейнера muli-stage или в рамках традиционного потока установки пакета Linux. Дополнительные сведения см. в разделе "Установка в Ubuntu 18.04+ " в разделе "Установка Microsoft Build of OpenJDK".

Сведения CBL-Mariner о других образах ОС на основе RPM/yum см. далее в этой статье.

Для Ubuntuизображений на основе Debian можно отобразить все доступные дополнительные версии, опубликованные в репозиториях Microsoft Linux, как показано в следующем примере Bash с командами и выходными данными. Команды, показанные здесь, предполагают, что репозиторий Microsoft Linux настроен, как описано в разделе "Установка в 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
...

В этом примере Bash показано, как вернуть msopenjdk-11 образ к старой версии, скажем 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) ...

Чтобы сделать то же самое в Dockerfile, используйте следующие команды:

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

В этом примере Bash используются 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

Чтобы сделать то же самое в Dockerfile, используйте следующие команды:

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

Расписание перестроения образов контейнера

Чтобы обеспечить высокий уровень безопасности и стабильности, наши образы контейнеров перестроены каждый понедельник, среду и пятницу. Это регулярное расписание перестроения позволяет нам быстро включить последние исправления и обновления системы безопасности.

Вы можете ожидать следующие преимущества от этого расписания перестроения:

  • Своевременное обновление системы безопасности. Перестроив образы три раза в неделю, мы обеспечиваем быстрое решение любых новых уязвимостей системы безопасности.
  • Улучшенная стабильность: регулярные обновления помогают поддерживать стабильность и производительность приложений, включая последние исправления ошибок и улучшения.

Если у вас возникли вопросы или возникли проблемы, связанные с этими обновлениями, обратитесь к этому расписанию перед открытием запроса в службу поддержки.

Дополнительные сведения о наших политиках поддержки см . в схеме поддержки для Microsoft Build OpenJDK.

Образы на основе Windows

В настоящее время мы не предоставляем образы контейнеров на основе Windows.

Предоставление отзывов о Сборке OpenJDK в Microsoft

Отправьте нам свои комментарии, мысли и идеи, чтобы помочь нам улучшить Microsoft Build OpenJDK. Посетите страницу обсуждений OpenJDK на сайте GitHub, чтобы отправить нам свой отзыв.

Java и OpenJDK являются товарными знаками или зарегистрированными товарными знаками компании Oracle и (или) ее аффилированных лиц.