Compartir a través de


Imágenes de contenedor para Microsoft Build de OpenJDK

En este artículo se proporciona información sobre las imágenes de contenedor disponibles para Microsoft Build de OpenJDK.

Imágenes basadas en Linux

Actualmente se proporcionan imágenes de contenedor basadas en Linux para Ubuntu y Microsoft CBL-Mariner, ahora conocidos como Azure Linux. Las imágenes se publican en el Registro de artefactos Microsoft ubicado en mcr.microsoft.com/openjdk/jdk.

Para extraer la imagen más reciente de una etiqueta específica, use el siguiente comando:

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

En la siguiente tabla se muestra la etiqueta que se va a usar para la distribución de Linux y la versión de JDK.

Sistema operativo base OpenJDK 21 OpenJDK 17 OpenJDK 11 OpenJDK 8
Ubuntu 22.04 21-ubuntu 17-ubuntu 11-ubuntu N/D
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

Nota: Imágenes para OpenJDK 8 con archivos binarios de Eclipse Temurin, del proyecto de Eclipse Adoptium.

Arquitecturas

Las imágenes anteriores se ofrecen tanto para arquitecturas amd64 como arm64. El entorno de ejecución del contenedor extraerá la imagen correcta en función de su entorno. Para forzar una extracción de una imagen para una arquitectura específica, use lo siguiente:

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

Para forzar una arquitectura dentro de un Dockerfile, puede usar lo siguiente:

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

Para más información sobre cómo compilar imágenes de contenedor multiplataforma, consulte la documentación de su runtime de contenedor. Por ejemplo, Docker y Podman.

Cómo usar estas imágenes

Cree un Dockerfile con el siguiente contenido:

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

Sin distribución

Las imágenes sin distribución se basan en la distribución CBL-Mariner 2.0 de Microsoft. Requieren un enfoque diferente para implementar una aplicación. Dado que las imágenes sin distribución no contienen una distribución completa de Linux, no hay ningún shell, por ejemplo.

La ENTRYPOINT de estas imágenes ya está configurada apuntando al comando java. El consumo de Dockerfiles debe usar la instrucción CMD para completar los argumentos de la línea de comandos del proceso del iniciador de JVM.

Cree un Dockerfile con el siguiente contenido:

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

COPY app.jar /app.jar

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

Uso de otra imagen o versión del sistema operativo base

Si prefiere usar otra distribución de imágenes base del sistema operativo, puede copiar el JDK de una imagen precompilada existente mediante la instrucción COPY --from en un Dockerfile, similar al ejemplo siguiente:

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

También puede instalar el JDK mediante yum o apt-get, o simplemente extraer un archivo tar.gz y configurar JAVA_HOME en consecuencia. Más información.

Uso de una versión diferente de Ubuntu

Para implementar Microsoft Build de OpenJDK en distintas versiones de imágenes base de Ubuntu, Microsoft recomienda que los usuarios crean su propio Dockerfiles. Como referencia, el siguiente Dockerfile compila una imagen con 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"]

Imágenes Alpine

Aunque Microsoft no suministra imágenes basadas en Alpine, sí suministramos un conjunto limitado de binarios JDK compilados en musl para Alpine Linux.

Los usuarios pueden crear imágenes de contenedor para Alpine Linux mediante los archivos binarios disponibles.

Cree un Dockerfile con el siguiente contenido:

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

Creación de un runtime de Java personalizado

Para crear una imagen en runtime de Java personalizada, use un Dockerfile de varias fases similar al ejemplo siguiente:

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

Para obtener más información sobre cómo crear runtimes de Java personalizados, consulte Runtimes de Java con jilink

Usuario no raíz

Las imágenes incluyen un usuario app que se puede habilitar y usar opcionalmente mediante el consumo de capas:

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

En el ejemplo anterior, el binario de la aplicación se copia como root, ya que las imágenes permanecen con root de forma predeterminada. A continuación, la aplicación se ejecuta como app. La carpeta /home/app también es propiedad del usuario app, lo que proporciona a la aplicación un sistema de archivos que se puede escribir.

Configuración regional predeterminada

Las imágenes de Microsoft Build de OpenJDK se configuran de forma predeterminada con la configuración regional en_US.UTF-8. Si quiere usar una configuración regional diferente o una imagen base diferente como se ha descrito anteriormente, deberá configurar manualmente las variables de entorno en su propio Dockerfile y asegurarse de que la configuración regional que desea está instalada.

Por ejemplo, para usar la configuración regional pt_BR.UTF-8 en una imagen basada en Ubuntu, puede agregar las siguientes líneas al 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
...

Este Dockerfile se proporciona como ejemplo. No está pensado para sugerir las configuraciones más óptimas.

Mantenerse en versiones secundarias anteriores

Las imágenes de contenedor Microsoft Build de OpenJDK solo están disponibles bajo las etiquetas enumeradas anteriormente. No proporcionamos etiquetas para versiones secundarias y las etiquetas de versión principal siempre tienen la versión secundaria más reciente para asegurarse de que los desarrolladores tendrán la actualización más reciente para cualquier versión principal determinada.

Estas imágenes base usan el mecanismo del administrador de paquetes subyacente de las distribuciones de Linux para instalar el paquete JDK. Por lo tanto, para mantenerse en una versión anterior determinada, deberá usar herramientas como apt-get o yum para instalar la versión secundaria específica del JDK.

Para revertir a versiones específicas en diferentes imágenes base del sistema operativo fuera de la lista de imágenes proporcionadas, por ejemplo, debian:buster-slim, puede usar el mismo enfoque que se muestra a continuación, ya sea en la primera fase de una creación de imagen de contenedor de varias fases o como parte de un flujo de instalación de paquete Linux tradicional. Para obtener más información, consulte la sección Instalación en Ubuntu 18.04+ de Instalación de Microsoft Build de OpenJDK.

Para obtener CBL-Mariner y otras imágenes del sistema operativo basadas en RPM/yum, consulte los detalles que se proporcionan más adelante en este artículo.

Para Ubuntu y otras imágenes basadas en Debian, puede mostrar todas las versiones secundarias disponibles publicadas en los repositorios de Microsoft Linux, como se muestra en el siguiente ejemplo de Bash que muestra comandos y salidas. Los comandos que se muestran aquí suponen que el repositorio de Microsoft Linux está configurado, como se describe en Instalación en 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
...

En este ejemplo de Bash se muestra cómo revertir la imagen msopenjdk-11 a una versión anterior, por ejemplo, 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) ...

Para hacer lo mismo en el Dockerfile, use los siguientes comandos:

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

En este ejemplo de Bash se usan imágenes basadas en 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

Para hacer lo mismo en el Dockerfile, use los siguientes comandos:

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

Programación de recompilación de imágenes de contenedor

Para garantizar el máximo nivel de seguridad y estabilidad, nuestras imágenes de contenedor se vuelven a compilar todos los lunes, miércoles y viernes. Esta programación regular de recompilaciones nos permite incorporar con prontitud las últimas revisiones y actualizaciones de seguridad.

Puede esperar las siguientes ventajas de esta programación de recompilación:

  • Actualizaciones de seguridad puntuales: al recompilar las imágenes tres veces por semana, garantizamos que cualquier nueva vulnerabilidad de seguridad se aborde rápidamente.
  • Estabilidad mejorada: las actualizaciones periódicas ayudan a mantener la estabilidad y el rendimiento de sus aplicaciones al incluir las últimas correcciones de errores y mejoras.

Si tiene alguna pregunta o se encuentra con problemas relacionados con estas actualizaciones, consulte esta programación antes de abrir un vale de soporte.

Para más información sobre nuestras directivas de compatibilidad, consulte Hoja de ruta de compatibilidad para Microsoft Build de OpenJDK.

Imágenes basadas en Windows

Actualmente no se proporcionan imágenes de contenedor basadas en Windows.

Proporcionar comentarios sobre Microsoft Build de OpenJDK

Envíenos sus comentarios, pensamientos e ideas para ayudarnos a mejorar Microsoft Build de OpenJDK. Visite nuestra página de discusiones de OpenJDK en GitHub para enviarnos sus comentarios.

Java y OpenJDK son marcas comerciales o marcas registradas de Oracle o sus filiales.