Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você 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 o Ubuntu e o Microsoft CBL-Mariner, agora conhecido como Linux do Azure. As imagens são publicadas no Registro de Artefatos da Microsoft localizado em mcr.microsoft.com/openjdk/jdk
.
Para baixar a imagem mais recente de um tag específico, use o seguinte comando:
docker pull mcr.microsoft.com/openjdk/jdk:<tag>
A tabela a seguir mostra a marca a ser usada para a distribuição do Linux e a versão do JDK.
Sistema operacional 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 sem distribuição | 21-distroless |
17-distroless |
11-distroless |
8-distroless |
Observação:Imagens para o navio OpenJDK 8 com binários do Eclipse Temurin, do projeto Eclipse Adoptium .
Arquiteturas
As imagens acima são oferecidas para ambas as arquiteturas amd64
e arm64
. O runtime do contêiner deve fazer o pull da imagem correta com base em seu ambiente. Para forçar um pull de uma imagem para uma arquitetura específica, use o seguinte comando:
$ docker pull --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-mariner
Para forçar uma arquitetura dentro de uma 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 de várias plataformas, verifique a documentação do runtime do contêiner. Por exemplo, Docker e Podman.
Como usar essas imagens
Crie um Dockerfile com o conteúdo a seguir:
# 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"]
Sem distribuição
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 completa do Linux, não há nenhum shell, por exemplo.
Essas ENTRYPOINT
imagens já estão configuradas apontando para o java
comando. O consumo dos Dockerfiles deve usar a CMD
instrução para concluir os argumentos de linha de comando do processo de inicialização da JVM.
Crie um Dockerfile com o conteúdo a seguir:
FROM mcr.microsoft.com/openjdk/jdk:21-distroless
COPY app.jar /app.jar
CMD ["-Xmx256m", "-jar", "/app.jar"]
Usar uma imagem ou versão do sistema operacional base diferente
Se você preferir usar uma distribuição de imagem base do sistema operacional diferente, poderá 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.
Leia mais.
Usar 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 usuários criem suas próprias Dockerfiles
. Para referência, o abaixo Dockerfile
cria 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, fornecemos um conjunto limitado de binários JDK compilados por musl para o Alpine Linux.
Os usuários são bem-vindos para criar imagens de contêiner para o Linux alpino usando os binários disponíveis.
Crie um Dockerfile com o conteúdo a seguir:
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 runtime personalizado do Java
Para criar uma imagem de execução personalizada do Java, 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 com jlink
Usuário não raiz
As imagens vêm com um app
usuário que pode ser opcionalmente habilitado 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. Em seguida, o aplicativo é executado como app
. A pasta /home/app
também pertence ao usuário app
, dando ao aplicativo um sistema de arquivos gravável.
Localidade padrão
As imagens do Microsoft Build do OpenJDK são configuradas por padrão com a en_US.UTF-8
localização. Se você quiser usar uma localidade diferente ou uma imagem base diferente, conforme descrito anteriormente, será necessário configurar manualmente variáveis de ambiente em seu próprio Dockerfile e verificar se a localidade desejada está instalada.
Por exemplo, para usar o pt_BR.UTF-8
local em uma imagem baseada em Ubuntu, você pode adicionar as seguintes linhas ao 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 é para sugerir as configurações mais ideais.
Fique em versões secundárias mais antigas
As imagens de contêiner do OpenJDK, construídas pela Microsoft, estão disponíveis somente sob as tags listadas anteriormente. Não fornecemos marcas para versões secundárias e as principais marcas de versão 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 de gerenciador de pacotes subjacente das distribuições do 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 um build de imagem de contêiner em estágio multi ou como parte do fluxo de instalação tradicional de pacotes Linux. Para obter mais informações, consulte a seção Instalar no Ubuntu 18.04+ do Install the Microsoft Build of OpenJDK.
Para CBL-Mariner
e outras imagens do sistema operacional com base em RPM/yum, veja os detalhes fornecidos mais à frente neste artigo.
Para Ubuntu
e outras imagens baseadas em Debian, você pode exibir todas as versões secundárias disponíveis publicadas nos repositórios do Microsoft Linux, como mostrado no seguinte exemplo de Bash, com comandos e resultados. Os comandos mostrados aqui pressupõem 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 do Bash mostra como fazer com que sua imagem seja revertida 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
...
Agendamento de recompilação de 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. Esse agendamento de recompilação regular nos permite incorporar prontamente os patches e atualizações de segurança mais recentes.
Você pode esperar os seguintes benefícios deste cronograma de reconstrução:
- Atualizações de segurança oportunas: Ao recompilar as imagens três vezes por semana, garantimos que todas as novas vulnerabilidades de segurança sejam resolvidas rapidamente.
- Estabilidade aprimorada: As atualizações regulares ajudam a manter a estabilidade e o desempenho de seus aplicativos, incluindo as correções e melhorias de bugs mais recentes.
Se você tiver dúvidas 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 o 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:
- CLI de notação
-
msft_supply_chain.crt
- Baixe esse arquivo e salve-o em seu computador local usando um nome de arquivo como msft_supply_chain.crt.
Em seguida, execute as seguintes etapas:
Adicione o certificado ao repositório de confiança 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
A seguinte saída deve ser exibida:
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.
Fornecer comentários sobre o Build do OpenJDK da Microsoft
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 ou marcas registradas da Oracle e/ou de suas afiliadas.