Images conteneur pour la build Microsoft d’OpenJDK

Cet article fournit des informations sur les images conteneur disponibles pour la build Microsoft d’OpenJDK.

Images linux

Nous fournissons actuellement des images conteneur Linux pour Ubuntu et Microsoft CBL-Mariner. Les images sont publiées dans Microsoft Container Registry à l’adresse .mcr.microsoft.com/openjdk/jdk

Pour extraire la dernière image d’une balise spécifique, utilisez la commande suivante :

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

Le tableau suivant montre la balise à utiliser pour votre distribution Linux et la version JDK.

Système d’exploitation de base OpenJDK 21 OpenJDK 17 OpenJDK 11 OpenJDK 8
Ubuntu 22.04 21-ubuntu 17-ubuntu 11-ubuntu N/A
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

Remarque :Images pour OpenJDK 8 navire avec des binaires d’Eclipse Temurin, à partir du projet Eclipse Adoptium .

Architectures

Les images ci-dessus sont proposées pour les architectures amd64 et arm64 les architectures. Votre runtime de conteneur extrait l’image appropriée en fonction de votre environnement. Pour forcer l’extraction d’une image pour une architecture spécifique, utilisez les éléments suivants :

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

Pour forcer une architecture à l’intérieur d’un Dockerfile, vous pouvez utiliser les éléments suivants :

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

Pour plus d’informations sur la création d’images conteneur multiplateformes, case activée la documentation de votre runtime de conteneur. Par exemple, Docker et Podman.

Comment utiliser ces images

Créez un fichier Dockerfile avec le contenu suivant :

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

Distroless

Les images sans distribution sont basées sur la distribution CBL-Mariner 2.0 par Microsoft. Ils nécessitent une approche différente pour déployer une application. Étant donné que les images sans distribution ne contiennent pas de distribution Linux complète, il n’existe aucun interpréteur de commandes, par exemple.

Ces ENTRYPOINT images sont déjà configurées pointant vers la java commande. La consommation de fichiers Dockerfiles doit utiliser l’instruction CMD pour terminer les arguments de ligne de commande du processus de lanceur JVM.

Créez un fichier Dockerfile avec le contenu suivant :

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

COPY app.jar /app.jar

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

Utiliser une autre image de système d’exploitation de base

Si vous préférez utiliser une autre distribution d’images de base du système d’exploitation, vous pouvez copier le JDK à partir d’une image prédéfinie existante à l’aide de l’instruction COPY --from dans un fichier Dockerfile, comme dans l’exemple suivant :

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

Vous pouvez également installer le JDK à l’aide de l’un ou l’autre yum , apt-getou simplement extraire un tar.gz fichier et configurer JAVA_HOME en conséquence. En savoir plus.

Images alpines

Même si Microsoft ne produit pas d’images alpines, nous fournissons des fichiers binaires JDK compilés musl pour Alpine Linux.

Les utilisateurs sont invités à créer des images conteneur pour Alpine Linux à l’aide de nos fichiers binaires.

Créez un fichier Dockerfile avec le contenu suivant :

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

Créer un runtime Java personnalisé

Pour créer une image runtime Java personnalisée, utilisez un fichier Dockerfile à plusieurs étapes semblable à l’exemple suivant :

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

Pour plus d’informations sur la création de runtimes Java personnalisés, consultez Java Runtimes avec jlink

Utilisateur non-racine

Les images sont fournies avec un app utilisateur qui peut éventuellement être activé et utilisé par des couches consommatrices :

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

Dans l’exemple ci-dessus, le fichier binaire de l’application est copié en tant que root, car les images restent avec root par défaut. L’application est ensuite exécutée en tant que app. Le dossier /home/app appartient également à l’utilisateur app, ce qui donne à l’application un système de fichiers accessible en écriture.

Paramètres régionaux par défaut

Les images de Microsoft Build d’OpenJDK sont configurées par défaut avec les en_US.UTF-8 paramètres régionaux. Si vous souhaitez utiliser des paramètres régionaux différents ou une autre image de base comme décrit précédemment, vous devez configurer manuellement des variables d’environnement dans votre propre fichier Dockerfile et vérifier que les paramètres régionaux souhaités sont installés.

Par exemple, pour utiliser les pt_BR.UTF-8 paramètres régionaux sur une image Ubuntu, vous pouvez ajouter les lignes suivantes à votre fichier 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
...

Ce fichier Dockerfile est fourni comme exemple et n’est pas destiné à suggérer les configurations les plus optimales.

Restez sur les versions mineures antérieures

Microsoft Build of OpenJDK container images sont disponibles uniquement sous les balises répertoriées précédemment. Nous ne publions pas de balises pour les versions mineures, et les balises de version principale ont toujours la dernière version mineure pour s’assurer que les développeurs auront toujours la dernière mise à jour pour une version majeure donnée.

Ces images de base utilisent le mécanisme de gestionnaire de package sous-jacent des distributions Linux pour installer le package JDK. Par conséquent, pour rester sur une version particulière, vous devez utiliser des outils tels que apt-get ou yum installer la version mineure spécifique du JDK.

Pour installer des versions spécifiques sur différentes images de système d’exploitation de base, par exemple debian:buster-slim, vous pouvez utiliser la même approche dans la première étape d’une build d’image conteneur muli-stage, ou dans le cadre d’un flux d’installation de package Linux traditionnel. Pour plus d’informations, consultez la section Installer sur Ubuntu 18.04+ de l’installation de Microsoft Build d’OpenJDK.

Pour CBL-Mariner obtenir et d’autres images de système d’exploitation basées sur RPM/yum, consultez les détails fournis plus loin dans cet article.

Pour Ubuntules images Debian et d’autres images debian, vous pouvez afficher toutes les versions mineures disponibles publiées dans les référentiels Microsoft Linux, comme indiqué dans l’exemple Bash suivant montrant les commandes et la sortie. Les commandes indiquées ici supposent que le dépôt Microsoft Linux est configuré, comme décrit dans Install on 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

Cet exemple Bash montre comment rétablir votre image msopenjdk-11 vers une version antérieure, par exemple 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) ...

Pour effectuer la même opération dans votre fichier Dockerfile, utilisez les commandes suivantes :

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

Cet exemple Bash utilise des images basées 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!

Pour effectuer la même opération dans votre fichier Dockerfile, utilisez les commandes suivantes :

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

Images Windows

Actuellement, nous ne fournissons pas d’images conteneur windows.

Fournir des commentaires sur la build Microsoft d’OpenJDK

Envoyez-nous vos commentaires, vos pensées et vos idées pour nous aider à améliorer microsoft Build of OpenJDK. Visitez notre page de discussions OpenJDK sur GitHub pour nous envoyer vos commentaires.

Java et OpenJDK sont des marques ou des marques déposées d’Oracle et/ou de ses affiliés.