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-get
ou 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 Ubuntu
les 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.