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. Las imágenes se publican en Microsoft Container Registry , que se encuentra 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 tabla siguiente 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 Eclipse Adoptium .
Arquitecturas
Las imágenes anteriores se ofrecen para arquitecturas amd64
y 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:17-mariner
Para forzar una arquitectura dentro de , Dockerfile
puede usar lo siguiente:
FROM --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:17-mariner AS build
# ...
Para más información sobre cómo compilar imágenes de contenedor multiplataforma, consulte la documentación de su entorno de ejecución 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:17-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 por Parte 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.
De ENTRYPOINT
estas imágenes ya está configurada que apunta al java
comando . El consumo de Dockerfiles debe usar la CMD
instrucción 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:17-distroless
COPY app.jar /app.jar
CMD ["-Xmx256m", "-jar", "/app.jar"]
Uso de una imagen de sistema operativo base diferente
Si prefiere usar una distribución de imagen base del sistema operativo diferente, puede copiar el JDK de una imagen precompilada existente mediante la COPY --from
instrucción 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-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"]
También puede instalar el JDK mediante yum
o apt-get
, o simplemente extraer un tar.gz
archivo y configurarlo JAVA_HOME
en consecuencia. Más información.
Imágenes alpinos
Aunque Microsoft no genera imágenes basadas en Alpine, proporcionamos archivos binarios JDK compilados musl para Alpine Linux.
Los usuarios pueden crear imágenes de contenedor para Alpine Linux mediante nuestros archivos binarios.
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 entorno de ejecución de Java personalizado
Para crear una imagen en tiempo de ejecución 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: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"]
Para obtener más información sobre cómo crear entornos de ejecución de Java personalizados, consulte Java Runtimes with jlink (Entornos de ejecución de Java con jlink).
Usuario no raíz
Las imágenes incluyen un app
usuario que se puede habilitar y usar opcionalmente mediante el consumo de capas:
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"]
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 en_US.UTF-8
configuración regional. 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 desee esté instalada.
Por ejemplo, para usar la pt_BR.UTF-8
configuración regional 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 y no está pensado para sugerir las configuraciones más óptimas.
Mantenerse en versiones secundarias anteriores
Microsoft Build de imágenes de contenedor de OpenJDK solo están disponibles en las etiquetas enumeradas anteriormente. No publicamos 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 siempre 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 determinada, deberá usar herramientas como apt-get
o yum
para instalar la versión secundaria específica del JDK.
Para instalar versiones específicas en diferentes imágenes del sistema operativo base, por ejemplo debian:buster-slim
, puede usar el mismo enfoque en la primera fase de una compilación de imagen de contenedor de la fase muli o como parte de un flujo de instalación de paquetes Linux tradicional. Para obtener más información, consulte la sección Instalar en Ubuntu 18.04+ de Instalación de Microsoft Build of OpenJDK.
Para 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.
En Ubuntu
el caso de , 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.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
En este ejemplo de Bash se muestra cómo hacer que la imagen vuelva msopenjdk-11
a una versión anterior, por ejemplo 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) ...
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.11+9-1
...
En este ejemplo de Bash se usan CBL-Mariner
imágenes basadas:
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!
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.10+9-1
...
Imágenes basadas en Windows
Actualmente no se proporcionan imágenes de contenedor basadas en Windows.
Proporcionar comentarios sobre Microsoft Build of OpenJDK
Envíenos sus comentarios, pensamientos e ideas para ayudarnos a mejorar Microsoft Build of 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.