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

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

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

В настоящее время мы предоставляем образы контейнеров на основе Linux для Ubuntu и Microsoft CBL-Mariner. Изображения публикуются в реестре контейнеров Майкрософт, расположенном по адресу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:17-mariner

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

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

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

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

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

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

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

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

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

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

FROM mcr.microsoft.com/openjdk/jdk:17-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-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"]

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

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

Хотя корпорация Майкрософт не создает образы на основе Alpine, мы предоставляем скомпилированные jDK двоичные файлы 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: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"]

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

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

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

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

В приведенном выше примере двоичный файл приложения копируется как 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.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

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

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

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

В этом примере 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.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!

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

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

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

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

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

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

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