Immagini del contenitore per Microsoft Build di OpenJDK
Questo articolo fornisce informazioni sulle immagini del contenitore disponibili per Microsoft Build di OpenJDK.
Immagini basate su Linux
Attualmente sono disponibili immagini di contenitori basate su Linux per Ubuntu e Microsoft CBL-Mariner. Le immagini vengono pubblicate nel Registro Contenitori 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 EclipseTemo, dal progetto Eclipse Adoptium .
Architetture
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:17-mariner
Per forzare un'architettura all'interno di , Dockerfile
è possibile usare quanto segue:
FROM --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:17-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.
Come usare queste immagini
Creare un Dockerfile con il contenuto seguente:
# 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"]
Distribuzione senza distribuzione
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:17-distroless
COPY app.jar /app.jar
CMD ["-Xmx256m", "-jar", "/app.jar"]
Usare un'immagine del sistema operativo di base diversa
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-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"]
È anche possibile installare JDK usando yum
o apt-get
o semplicemente estrarre un tar.gz
file e configurare JAVA_HOME
di conseguenza. Altre informazioni.
Immagini alpine
Anche se Microsoft non produce immagini basate su Alpine, microsoft fornisce 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.
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" ]
Creare un runtime Java personalizzato
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: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"]
Per altre informazioni sulla creazione di runtime Java personalizzati, vedere Java Runtimes with jlink (Runtime Java con jlink)
Utente non radice
Le immagini vengono fornite con un app
utente che può essere abilitato e usato facoltativamente utilizzando i livelli:
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"]
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.
Impostazioni locali predefinite
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 e non è progettato per suggerire le configurazioni più ottimali.
Mantenere le versioni secondarie meno recenti
Microsoft Build of OpenJDK container images are available only under the tags listed previously. I tag non vengono pubblicati per le versioni secondarie e i tag di versione principale hanno sempre la versione secondaria più recente per garantire che gli sviluppatori abbiano sempre 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 determinata versione, è necessario usare strumenti come apt-get
o yum
per installare la versione secondaria specifica di JDK.
Per installare versioni specifiche in diverse immagini del sistema operativo di base, ad esempio debian:buster-slim
, è possibile usare lo stesso approccio nella prima fase di una compilazione dell'immagine del contenitore in 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.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
Questo esempio di Bash mostra come ripristinare una versione precedente dell'immagine msopenjdk-11
, ad esempio 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) ...
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.11+9-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.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!
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.10+9-1
...
Immagini basate su Windows
Attualmente non vengono fornite immagini del contenitore basate su Windows.
Inviare commenti e suggerimenti su Microsoft Build of OpenJDK
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.