Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo fornece informações sobre as imagens de contêiner disponíveis para o Microsoft Build do OpenJDK.
Imagens baseadas em Linux
Atualmente, fornecemos imagens de contêiner baseadas em Linux para Ubuntu e Microsoft CBL-Mariner, agora conhecido como Azure Linux. As imagens são publicadas no Microsoft Artifact Registry localizado em mcr.microsoft.com/openjdk/jdk
.
Para extrair a imagem mais recente para uma tag específica, use o seguinte comando:
docker pull mcr.microsoft.com/openjdk/jdk:<tag>
A tabela a seguir mostra a tag a ser usada para sua distribuição Linux e versão JDK.
SO 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 |
Nota:As imagens para OpenJDK 8 são enviadas com binários do Eclipse Temurin, do projeto Eclipse Adoptium.
Arquiteturas
As imagens acima são oferecidas para ambas as amd64
arm64
arquiteturas. O runtime de contentor deve obter a imagem correta com base nas configurações do seu ambiente. Para forçar a obtenção de uma imagem para uma arquitetura específica, use o seguinte:
$ docker pull --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-mariner
Para forçar uma arquitetura dentro de um Dockerfile
, você pode usar o seguinte:
FROM --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-mariner AS build
# ...
Para obter mais informações sobre como criar imagens de contêiner multiplataforma, verifique a documentação do tempo de execução do contêiner. Por exemplo, Docker e Podman.
Como usar estas imagens
Crie um Dockerfile com o seguinte conteúdo:
# 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"]
Distroless
As imagens distroless são baseadas na distribuição CBL-Mariner 2.0 da Microsoft. Eles exigem uma abordagem diferente para implantar um aplicativo. Como as imagens sem distribuição não contêm uma distribuição Linux completa, não há shell, por exemplo.
A ENTRYPOINT
dessas imagens já está configurada para apontar para o comando java
. Consumir Dockerfiles deve usar a CMD
instrução para completar os argumentos de linha de comando do processo do lançador da JVM.
Crie um Dockerfile com o seguinte conteúdo:
FROM mcr.microsoft.com/openjdk/jdk:21-distroless
COPY app.jar /app.jar
CMD ["-Xmx256m", "-jar", "/app.jar"]
Usar uma imagem ou versão diferente do sistema operacional base
Se preferir usar uma distribuição de imagem base do sistema operacional diferente, você pode copiar o JDK de uma imagem pré-criada existente usando a COPY --from
instrução em um Dockerfile, semelhante ao exemplo a seguir:
# 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"]
Você também pode instalar o JDK usando yum
ou apt-get
, ou simplesmente extraindo um arquivo tar.gz
e configurando JAVA_HOME
de acordo.
Ler mais.
Use uma versão diferente do Ubuntu
Para implantar o Microsoft Build do OpenJDK em diferentes versões de imagens base do Ubuntu, a Microsoft recomenda que os utilizadores criem os seus próprios Dockerfiles
. Para referência, o abaixo Dockerfile
constrói uma imagem com o 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"]
Imagens alpinas
Embora a Microsoft não forneça imagens baseadas em Alpine, nós fornecemos um conjunto limitado de binários JDK compilados por musl para Alpine Linux.
Os usuários são bem-vindos para criar imagens de contêiner para o Alpine Linux usando os binários disponíveis.
Crie um Dockerfile com o seguinte conteúdo:
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" ]
Criar um tempo de execução Java personalizado
Para criar uma imagem de tempo de execução Java personalizada, use um Dockerfile de vários estágios semelhante ao exemplo a seguir:
# 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"]
Para obter mais informações sobre como criar runtimes Java personalizados, consulte Java Runtimes with jlink
Utilizador não-root
As imagens vêm com um app
usuário que pode ser opcionalmente ativado e usado consumindo camadas:
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"]
No exemplo acima, o binário do aplicativo é copiado como root
, uma vez que as imagens permanecem com root
por padrão. O aplicativo então é executado como app
. A pasta /home/app
também é de propriedade do usuário app
, dando ao aplicativo um sistema de arquivos gravável.
Localidade padrão
As imagens para o Microsoft Build do OpenJDK são configuradas por padrão com a en_US.UTF-8
localização. Se quiser usar uma localidade diferente ou uma imagem base diferente, conforme descrito anteriormente, você precisará configurar manualmente as variáveis de ambiente em seu próprio Dockerfile e verificar se a localidade desejada está instalada.
Por exemplo, para usar a pt_BR.UTF-8
localidade em uma imagem baseada no Ubuntu, você pode adicionar as seguintes linhas ao seu 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
...
Este Dockerfile é fornecido como um exemplo. Não se destina a sugerir as configurações mais ideais.
Mantenha-se em versões secundárias mais antigas
As imagens de contêiner do Microsoft Build of OpenJDK só estão disponíveis nas tags listadas anteriormente. Nós não fornecemos tags para versões secundárias, e as tags de versão principal sempre têm a versão secundária mais recente para garantir que os desenvolvedores tenham a atualização mais recente para qualquer versão principal.
Essas imagens base usam o mecanismo subjacente do gerenciador de pacotes das distribuições Linux para instalar o pacote JDK. Portanto, para permanecer em uma versão mais antiga específica, você precisará usar ferramentas como apt-get
ou yum
instalar a versão secundária específica do JDK.
Para reverter para versões específicas em diferentes imagens do sistema operacional base fora da lista de imagens fornecidas, por exemplo debian:buster-slim
, você pode usar a mesma abordagem abaixo no primeiro estágio de uma compilação de imagem de contêiner de vários estágios ou como parte de um fluxo de instalação de pacote Linux tradicional. Para obter mais informações, consulte a seção Instalar no Ubuntu 18.04+ de Instalar o Microsoft Build do OpenJDK.
Para CBL-Mariner
e outras imagens de sistema operativo dependentes de RPM e yum, veja os detalhes fornecidos posteriormente neste artigo.
Para Ubuntu
, e outras imagens baseadas em Debian, poderá exibir todas as versões menores disponíveis publicadas nos repositórios do Microsoft Linux, como demonstrado no exemplo Bash abaixo, que apresenta os comandos e o resultado. Os comandos mostrados aqui assumem que o repositório do Microsoft Linux está configurado, conforme descrito em Instalar no 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
...
Este exemplo de Bash mostra como fazer com que sua imagem reverta msopenjdk-11
para uma versão mais antiga, digamos 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) ...
Para fazer a mesma coisa em seu Dockerfile, use os seguintes comandos:
FROM mcr.microsoft.com/openjdk/jdk:11-ubuntu
...
RUN apt-get update && \
apt-get install -y --allow-downgrades msopenjdk-11=11.0.16-1
...
Este exemplo do Bash usa imagens baseadas em 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
Para fazer a mesma coisa em seu Dockerfile, use os seguintes comandos:
FROM mcr.microsoft.com/openjdk/jdk:11-mariner
...
RUN yum update && \
yum install -y --nogpgcheck msopenjdk-11-11.0.15-1
...
Cronograma de reconstrução da imagem de contêiner
Para garantir o mais alto nível de segurança e estabilidade, nossas imagens de contêiner são reconstruídas todas as segundas, quartas e sextas-feiras. Este cronograma de reconstrução regular nos permite incorporar prontamente os patches e atualizações de segurança mais recentes.
Você pode esperar os seguintes benefícios desse cronograma de reconstrução:
- Atualizações de segurança oportunas: Ao reconstruir as imagens três vezes por semana, garantimos que quaisquer novas vulnerabilidades de segurança sejam resolvidas rapidamente.
- Estabilidade melhorada: Atualizações regulares ajudam a manter a estabilidade e o desempenho de seus aplicativos, incluindo as correções de bugs e melhorias mais recentes.
Se você tiver alguma dúvida ou encontrar problemas relacionados a essas atualizações, consulte este cronograma antes de abrir um tíquete de suporte.
Para obter mais informações sobre nossas políticas de suporte, consulte Roteiro de suporte para o Microsoft Build do OpenJDK.
Verificar assinaturas de imagem de contêiner
Para verificar as assinaturas de imagem de contêiner, primeiro instale os seguintes pré-requisitos:
- Notação CLI
-
msft_supply_chain.crt
- Transfira este ficheiro e guarde-o na sua máquina local utilizando um nome de ficheiro como msft_supply_chain.crt.
Em seguida, use as seguintes etapas:
Adicione o certificado ao armazenamento confiável usando o seguinte comando:
notation cert add --type ca --store supplychain msft_supply_chain.crt
Configure políticas de confiança criando um arquivo trustpolicy.json com o seguinte conteúdo:
{ "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" ] } ] }
Importe a política de confiança usando o seguinte comando:
notation policy import trustpolicy.json
Verifique a imagem usando o seguinte comando:
notation verify mcr.microsoft.com/openjdk/jdk:21-distroless
Deverá ver o seguinte resultado:
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
Imagens baseadas no Windows
Atualmente, não fornecemos imagens de contêiner baseadas no Windows.
Forneça comentários sobre o Microsoft Build do OpenJDK
Envie-nos seus comentários, pensamentos e ideias para nos ajudar a melhorar o Microsoft Build do OpenJDK. Visite nossa página de discussões do OpenJDK no GitHub para nos enviar seus comentários.
Java e OpenJDK são marcas comerciais ou marcas comerciais registadas da Oracle e/ou das suas afiliadas.