Partager via


Images de conteneur pour la version Microsoft d’OpenJDK

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

Images basées sur Linux

Nous fournissons actuellement des images conteneur linux pour Ubuntu et Microsoft CBL-Mariner, désormais appelées Azure Linux. Les images sont publiées dans le Registre Microsoft Artifact situé à 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 sans distribution 21-distroless 17-distroless 11-distroless 8-distroless

Remarque :Les images pour OpenJDK 8 sont livrées avec les binaires d’Eclipse Temurin, du projet Eclipse Adoptium.

Architectures

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

$ docker pull --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-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:21-mariner AS build
# ...

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

Comment utiliser ces images

Créez un Dockerfile avec le contenu suivant :

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

Sans distribution

Les images distroless sont basées sur la distribution CBL-Mariner 2.0 de 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.

Les ENTRYPOINT de ces images sont déjà configurés pour pointer vers la java commande. La consommation de Dockerfiles doit utiliser l’instruction CMD afin de terminer les arguments de la ligne de commande du processus du lanceur JVM.

Créez un Dockerfile avec le contenu suivant :

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

COPY app.jar /app.jar

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

Utiliser une autre image ou version du 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-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"]

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.

Utiliser une autre version d’Ubuntu

Pour déployer Microsoft Build of OpenJDK sur différentes versions d'images de base Ubuntu, Microsoft recommande aux utilisateurs de créer leur propre Dockerfiles. Pour référence, l’image ci-dessous Dockerfile génère une image avec 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"]

Images alpines

Même si Microsoft ne fournit pas d’images alpines, nous fournissons un ensemble limité de fichiers binaires JDK compilés musl pour Alpine Linux.

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

Créez un 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: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"]

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

Utilisateur sans privilèges root

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:21-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 le paramètre régional en_US.UTF-8. 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. Il 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 fournissons 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 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 plus ancienne particulière, vous devez utiliser des outils tels que apt-get ou yum pour installer la version mineure spécifique du JDK.

Pour revenir à des versions spécifiques sur différentes images de système d'exploitation de base en dehors de la liste des images fournies, par exemple debian:buster-slim, vous pouvez utiliser la même approche ci-dessous soit dans la première phase d'une construction d'image de conteneur à plusieurs étapes, soit 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 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 Ubuntu, ainsi que pour d'autres images basées sur Debian, vous pouvez afficher toutes les versions mineures disponibles publiées dans les référentiels Microsoft Linux, comme le démontre l'exemple Bash suivant qui présente les commandes et leur résultat. Les commandes affichées ici supposent que le référentiel 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.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
...

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

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

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

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

Calendrier de reconstruction de l'image du conteneur

Pour garantir le niveau de sécurité et de stabilité le plus élevé, nos images de conteneurs sont reconstruites tous les lundis, mercredis et vendredis. Cette planification de reconstruction régulière nous permet d’incorporer rapidement les derniers correctifs et mises à jour de sécurité.

Vous pouvez vous attendre aux avantages suivants de cette planification de reconstruction :

  • Mises à jour de sécurité en temps opportun : En recréant les images trois fois par semaine, nous nous assurons que toutes les nouvelles vulnérabilités de sécurité sont traitées rapidement.
  • Stabilité améliorée : Les mises à jour régulières aident à maintenir la stabilité et les performances de vos applications en incluant les derniers correctifs et améliorations des bogues.

Si vous avez des questions ou rencontrez des problèmes liés à ces mises à jour, reportez-vous à cette planification avant d’ouvrir un ticket de support.

Pour plus d’informations sur nos stratégies de support, consultez la feuille de route du support technique pour la build Microsoft d’OpenJDK.

Vérifier les signatures d'image de conteneur

Pour vérifier les signatures d’image conteneur, installez d’abord les prérequis suivants :

  • Notation CLI
  • msft_supply_chain.crt
    • Téléchargez ce fichier et enregistrez-le sur votre ordinateur local à l’aide d’un nom de fichier tel que msft_supply_chain.crt.

Puis, procédez comme suit :

  1. Ajoutez le certificat au stockage de certificats de confiance à l’aide de la commande suivante :

    notation cert add --type ca --store supplychain msft_supply_chain.crt
    
  2. Configurez des stratégies d’approbation en créant un fichier trustpolicy.json avec le contenu suivant :

    {
        "version": "1.0",
        "trustPolicies": [
            {
                "name": "supplychain",
                "registryScopes": [ "mcr.microsoft.com/openjdk/jdk" ],
                "signatureVerification": {
                    "level" : "strict"
                },
                "trustStores": [ "ca:supplychain" ],
                "trustedIdentities": [
                    "x509.subject: CN=Microsoft SCD Products RSA Signing,O=Microsoft Corporation,L=Redmond,ST=Washington,C=US"
                ]
            }
        ]
    }
    
  3. Importez la stratégie d’approbation à l’aide de la commande suivante :

    notation policy import trustpolicy.json
    
  4. Vérifiez l’image à l’aide de la commande suivante :

    notation verify mcr.microsoft.com/openjdk/jdk:21-distroless
    

    La sortie suivante doit s’afficher :

    Warning: Always verify the artifact using digest(@sha256:...) rather than a tag(:21-distroless) because resolved digest may not point to the same signed artifact, as tags are mutable.
    
    Successfully verified signature for mcr.microsoft.com/openjdk/jdk@sha256:11537450b8472c1535e9a4c320033b5686e74323b19dcc8e7203e6ff1bf4ae5f
    

Images basées sur Windows

Actuellement, nous ne fournissons pas d'images conteneur basées sur 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 la build Microsoft d’OpenJDK. Visitez notre page de discussions OpenJDK sur GitHub pour nous envoyer vos commentaires.

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