Образы контейнеров для Microsoft Build openJDK
В этой статье содержатся сведения о доступных образах контейнеров для Microsoft Build OpenJDK.
В настоящее время мы предлагаем образы контейнеров на основе 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
соответствующим образом. Дополнительные сведения
Чтобы развернуть 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, используйте многоэтапный файл 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.
Отправьте нам свои комментарии, мысли и идеи, чтобы помочь нам улучшить Microsoft Build OpenJDK. Посетите страницу обсуждений OpenJDK на сайте GitHub, чтобы отправить нам свой отзыв.
Java и OpenJDK являются товарными знаками или зарегистрированными товарными знаками компании Oracle и (или) ее аффилированных лиц.