Immagini del contenitore per Microsoft Build di OpenJDK
Questo articolo fornisce informazioni sulle immagini del contenitore disponibili per Microsoft Build di OpenJDK.
Attualmente sono disponibili immagini di contenitori basate su Linux per Ubuntu e Microsoft CBL-Mariner, ora note come Azure Linux. Le immagini vengono pubblicate nel Registro artefatti Microsoft che si trova in mcr.microsoft.com/openjdk/jdk
.
Per eseguire il pull dell'immagine più recente per un tag specifico, usare il comando seguente:
docker pull mcr.microsoft.com/openjdk/jdk:<tag>
La tabella seguente illustra il tag da usare per la distribuzione Linux e la versione JDK.
Sistema operativo di 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 Senza distribuzione | 21-distroless |
17-distroless |
11-distroless |
8-distroless |
Nota: le immagini per OpenJDK 8 vengono fornite con file binari di Eclipse Temdevice, dal progetto Eclipse Adoptium .
Le immagini precedenti sono disponibili sia per le architetture che per amd64
arm64
le architetture. Il runtime del contenitore eseguirà il pull dell'immagine corretta in base all'ambiente in uso. Per forzare un pull di un'immagine per un'architettura specifica, usare quanto segue:
$ docker pull --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-mariner
Per forzare un'architettura all'interno di , Dockerfile
è possibile usare quanto segue:
FROM --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-mariner AS build
# ...
Per altre informazioni sulla creazione di immagini del contenitore multipiattaforma, vedere la documentazione del runtime del contenitore. Ad esempio, Docker e Podman.
Creare un Dockerfile con il contenuto seguente:
# 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"]
Le immagini senza distribuzione si basano sulla distribuzione CBL-Mariner 2.0 da parte di Microsoft. Richiedono un approccio diverso per distribuire un'applicazione. Poiché le immagini senza distribuzione non contengono una distribuzione Linux completa, ad esempio non esiste alcuna shell.
L'oggetto ENTRYPOINT
di queste immagini è già configurato che punta al java
comando . L'utilizzo dei Dockerfile deve usare l'istruzione CMD
per completare gli argomenti della riga di comando del processo di avvio di JVM.
Creare un Dockerfile con il contenuto seguente:
FROM mcr.microsoft.com/openjdk/jdk:21-distroless
COPY app.jar /app.jar
CMD ["-Xmx256m", "-jar", "/app.jar"]
Se si preferisce usare una distribuzione diversa dell'immagine di base del sistema operativo, è possibile copiare JDK da un'immagine predefinita esistente usando l'istruzione COPY --from
in un Dockerfile, simile all'esempio seguente:
# 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"]
È anche possibile installare JDK usando yum
o apt-get
o semplicemente estrarre un tar.gz
file e configurare JAVA_HOME
di conseguenza. Altre informazioni.
Per distribuire Microsoft Build of OpenJDK in diverse versioni di immagini di base Ubuntu, Microsoft consiglia agli utenti di creare il proprio Dockerfiles
. Per riferimento, di seguito viene compilata Dockerfile
un'immagine 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"]
Anche se Microsoft non fornisce immagini basate su Alpine, viene fornito un set limitato di file binari JDK compilati con musl per Alpine Linux.
Gli utenti sono invitati a creare immagini del contenitore per Alpine Linux usando i file binari disponibili.
Creare un Dockerfile con il contenuto seguente:
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" ]
Per creare un'immagine di runtime Java personalizzata, usare un Dockerfile a più fasi simile all'esempio seguente:
# 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"]
Per altre informazioni sulla creazione di runtime Java personalizzati, vedere Java Runtimes with jlink (Runtime Java con jlink)
Le immagini vengono fornite con un app
utente che può essere abilitato e usato facoltativamente utilizzando i livelli:
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"]
Nell'esempio precedente il file binario dell'applicazione viene copiato come root
, perché le immagini rimangono con root
per impostazione predefinita. L'applicazione viene quindi eseguita come app
. La cartella /home/app
è anche di proprietà dell'utente app
, assegnando all'applicazione un file system scrivibile.
Le immagini per Microsoft Build di OpenJDK sono configurate per impostazione predefinita con le en_US.UTF-8
impostazioni locali. Se si vogliono usare impostazioni locali diverse o un'immagine di base diversa, come descritto in precedenza, è necessario configurare manualmente le variabili di ambiente nel proprio Dockerfile e assicurarsi che le impostazioni locali desiderate siano installate.
Ad esempio, per usare le pt_BR.UTF-8
impostazioni locali in un'immagine basata su Ubuntu, è possibile aggiungere le righe seguenti 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
...
Questo Dockerfile viene fornito come esempio. Non è progettato per suggerire le configurazioni più ottimali.
Microsoft Build of OpenJDK container images are available only under the tags listed previously. Non vengono forniti tag per le versioni secondarie e i tag di versione principale hanno sempre la versione secondaria più recente per assicurarsi che gli sviluppatori abbiano l'aggiornamento più recente per qualsiasi versione principale specificata.
Queste immagini di base usano il meccanismo di gestione pacchetti sottostante delle distribuzioni Linux per installare il pacchetto JDK. Pertanto, per rimanere su una particolare versione precedente, sarà necessario usare strumenti come apt-get
o yum
per installare la versione secondaria specifica di JDK.
Per eseguire il rollback a versioni specifiche di immagini del sistema operativo di base diverse all'esterno dell'elenco di immagini fornite, ad esempio debian:buster-slim
, è possibile usare lo stesso approccio riportato di seguito nella prima fase di una compilazione di immagini contenitore a più fasi o come parte di un flusso di installazione tradizionale del pacchetto Linux. Per altre informazioni, vedere la sezione Install on Ubuntu 18.04+ (Install the Microsoft Build of OpenJDK).
Per CBL-Mariner
e altre immagini del sistema operativo basate su RPM/yum, vedere i dettagli forniti più avanti in questo articolo.
Per Ubuntu
e altre immagini basate su Debian, è possibile visualizzare tutte le versioni secondarie disponibili pubblicate nei repository Microsoft Linux, come illustrato nell'esempio Bash seguente che mostra i comandi e l'output. I comandi illustrati di seguito presuppongono che il repository Microsoft Linux sia configurato, come descritto in Installare in 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
...
Questo esempio di Bash mostra come ripristinare una versione precedente dell'immagine msopenjdk-11
, ad esempio 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) ...
Per eseguire la stessa operazione nel Dockerfile, usare i comandi seguenti:
FROM mcr.microsoft.com/openjdk/jdk:11-ubuntu
...
RUN apt-get update && \
apt-get install -y --allow-downgrades msopenjdk-11=11.0.16-1
...
Questo esempio di Bash usa immagini CBL-Mariner
basate:
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
Per eseguire la stessa operazione nel Dockerfile, usare i comandi seguenti:
FROM mcr.microsoft.com/openjdk/jdk:11-mariner
...
RUN yum update && \
yum install -y --nogpgcheck msopenjdk-11-11.0.15-1
...
Per garantire il massimo livello di sicurezza e stabilità, le immagini dei contenitori vengono ricompilate ogni lunedì, mercoledì e venerdì. Questa pianificazione di ricompilazione regolare consente di incorporare tempestivamente le patch e gli aggiornamenti di sicurezza più recenti.
È possibile prevedere i vantaggi seguenti di questa pianificazione di ricompilazione:
- Aggiornamenti tempestivi della sicurezza: ricompilando le immagini tre volte alla settimana, si garantisce che tutte le nuove vulnerabilità di sicurezza vengano risolte rapidamente.
- Stabilità migliorata: gli aggiornamenti regolari consentono di mantenere la stabilità e le prestazioni delle applicazioni includendo le correzioni di bug e i miglioramenti più recenti.
In caso di domande o problemi relativi a questi aggiornamenti, fare riferimento a questa pianificazione prima di aprire un ticket di supporto.
Per altre informazioni sui criteri di supporto, vedere Roadmap del supporto per Microsoft Build of OpenJDK.
Attualmente non vengono fornite immagini del contenitore basate su Windows.
Inviaci commenti, pensieri e idee per aiutarci a migliorare microsoft Build of OpenJDK. Visitare la pagina delle discussioni di OpenJDK su GitHub per inviare commenti e suggerimenti.
Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue consociate.