Udostępnij za pośrednictwem


Obrazy kontenerów dla zestawu Microsoft Build of OpenJDK

Ten artykuł zawiera informacje na temat dostępnych obrazów kontenerowych dla Microsoft Build of OpenJDK.

Obrazy oparte na systemie Linux

Obecnie dostarczamy obrazy kontenerów oparte na systemie Linux dla Ubuntu i Microsoft CBL-Mariner, obecnie znany jako Azure Linux. Obrazy są publikowane w rejestrze Microsoft Artifact Registry znajdującym się w lokalizacji mcr.microsoft.com/openjdk/jdk.

Aby ściągnąć najnowszy obraz dla określonego tagu, użyj następującego polecenia:

docker pull mcr.microsoft.com/openjdk/jdk:<tag>

W poniższej tabeli przedstawiono tag, którego użyć do dystrybucji systemu Linux i wersji JDK.

Podstawowy system operacyjny 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 Bez dystrybucji 21-distroless 17-distroless 11-distroless 8-distroless

Uwaga:Obrazy dla OpenJDK 8 zawierają pliki binarne Eclipse Temurin z projektu Eclipse Adoptium.

Architektury

Powyższe obrazy są oferowane zarówno dla obu architektur: amd64 i arm64. Środowisko uruchomieniowe kontenera pobierze odpowiedni obraz na podstawie środowiska. Aby wymusić ściągnięcie obrazu dla określonej architektury, użyj następującego polecenia:

$ docker pull --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-mariner

Aby wymusić architekturę wewnątrz Dockerfileelementu , możesz użyć następujących elementów:

FROM --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-mariner AS build
# ...

Aby uzyskać więcej informacji na temat tworzenia obrazów kontenerów wieloplatformowych, zapoznaj się z dokumentacją środowiska uruchomieniowego kontenera. Na przykład Docker i Podman.

Jak używać tych obrazów

Utwórz plik Dockerfile z następującą zawartością:

# 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"]

Bez dystrybucji

Obrazy distroless są oparte na dystrybucji CBL-Mariner 2.0 firmy Microsoft. Wymagają one innego podejścia do wdrażania aplikacji. Ponieważ obrazy typu distroless nie zawierają pełnej dystrybucji Linuxa, nie ma w nich na przykład powłoki.

Te obrazy ENTRYPOINT są już skonfigurowane, kierując do polecenia java. Korzystanie z plików Dockerfile musi użyć CMD instrukcji w celu ukończenia argumentów wiersza polecenia procesu uruchamiania JVM.

Utwórz plik Dockerfile z następującą zawartością:

FROM mcr.microsoft.com/openjdk/jdk:21-distroless

COPY app.jar /app.jar

CMD ["-Xmx256m", "-jar", "/app.jar"]

Używanie innego obrazu lub wersji podstawowego systemu operacyjnego

Jeśli wolisz użyć innej dystrybucji obrazów podstawowych systemu operacyjnego, możesz skopiować zestaw JDK z istniejącego wstępnie utworzonego obrazu przy użyciu COPY --from instrukcji w pliku Dockerfile, podobnie jak w poniższym przykładzie:

# 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"]

Można także zainstalować JDK, używając yum lub apt-get, albo po prostu wyodrębniając plik tar.gz i odpowiednio konfigurując JAVA_HOME. Dowiedz się więcej.

Korzystanie z innej wersji systemu Ubuntu

Aby wdrożyć Microsoft Build of OpenJDK w różnych wersjach obrazów podstawowych systemu Ubuntu, firma Microsoft zaleca, aby użytkownicy utworzyli własny Dockerfiles. Dla odniesienia poniższy Dockerfile buduje obraz z systemem 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"]

Obrazy alpejskie

Chociaż firma Microsoft nie dostarcza obrazów opartych na alpine, dostarczamy ograniczony zestaw plików binarnych JDK skompilowanych przez musl dla systemu Alpine Linux.

Użytkownicy są mile widziani, aby tworzyć obrazy kontenerów dla systemu Alpine Linux przy użyciu dostępnych plików binarnych.

Utwórz plik Dockerfile z następującą zawartością:

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" ]

Tworzenie niestandardowego środowiska uruchomieniowego Java

Aby utworzyć niestandardowy obraz środowiska uruchomieniowego Java, użyj wieloetapowego pliku Dockerfile podobnego do następującego przykładu:

# 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"]

Aby uzyskać więcej informacji na temat tworzenia niestandardowych środowisk uruchomieniowych Java, zobacz Java Runtimes with jlink (Środowiska uruchomieniowe Java za pomocą linku jlink)

Użytkownik niebędący użytkownikiem głównym

Obrazy są dostarczane z użytkownikiem app, który może być opcjonalnie włączany i używany przez warstwy korzystające.

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"]

W powyższym przykładzie plik binarny aplikacji jest kopiowany jako root, ponieważ obrazy pozostają root domyślnie. Następnie aplikacja jest wykonywana jako app. Folder /home/app jest również własnością użytkownika app, dając aplikacji możliwość zapisywania na systemie plików.

Domyślne ustawienia regionalne

Obrazy zestawu OpenJDK w programie Microsoft Build są domyślnie konfigurowane przy użyciu en_US.UTF-8 ustawień regionalnych. Jeśli chcesz użyć innych ustawień regionalnych lub innego obrazu podstawowego zgodnie z opisem wcześniej, musisz ręcznie skonfigurować zmienne środowiskowe we własnym pliku Dockerfile i upewnić się, że ustawienia regionalne, które chcesz zainstalować.

Aby na przykład użyć pt_BR.UTF-8 ustawienia regionalnego na obrazie Ubuntu, możesz dodać następujące linijki do pliku 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
...

Ten plik Dockerfile jest udostępniany jako przykład. Nie jest przeznaczona do sugerowania najbardziej optymalnych konfiguracji.

Pozostań na starszych wersjach podrzędnych

Microsoft Build OpenJDK jest dostępny tylko pod wcześniej wymienionymi tagami kontenerowymi. Nie dostarczamy tagów dla wersji pomocniczych, a tagi wersji głównej zawsze mają najnowszą wersję pomocniczą, aby zapewnić, że deweloperzy będą mieć najnowszą aktualizację dla danej wersji głównej.

Te bazowe obrazy wykorzystują mechanizm menedżera pakietów dystrybucji Linuksa do zainstalowania pakietu JDK. W związku z tym, aby pozostać w określonej starszej wersji, należy użyć narzędzi takich jak apt-get lub yum, aby zainstalować określoną wersję pomniejszą zestawu JDK.

Aby przywrócić określone wersje na różnych bazowych obrazach systemów operacyjnych poza listą dostarczonych obrazów, na przykład debian:buster-slim, można użyć tego samego podejścia poniżej, zarówno w pierwszym etapie kompilacji obrazu kontenera wieloetapowego, jak i w ramach tradycyjnego przepływu instalacji pakiety systemu Linux. Aby uzyskać więcej informacji, zobacz sekcję Instalowanie w systemie Ubuntu 18.04+ w temacie Instalowanie kompilacji Microsoft OpenJDK.

W przypadku CBL-Mariner i innych obrazów systemów operacyjnych opartych na RPM/yum zobacz szczegóły podane w dalszej części tego artykułu.

W przypadku Ubuntu i innych obrazów opartych na Debianie, można wyświetlić wszystkie dostępne wersje podrzędne opublikowane w repozytoriach Microsoft Linux, jak pokazano w poniższym przykładzie Bash z poleceniami i danymi wyjściowymi. Pokazane tutaj polecenia zakładają, że repozytorium systemu Microsoft Linux jest skonfigurowane zgodnie z opisem w temacie Instalowanie w systemie Ubuntu 18.04 lub nowszym.

$ 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
...

Przykład skryptu Bash pokazuje, jak spowodować, aby obraz przeszedł do starszej wersji, np.: msopenjdk-11.

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) ...

Aby wykonać to samo w pliku Dockerfile, użyj następujących poleceń:

FROM mcr.microsoft.com/openjdk/jdk:11-ubuntu
...
RUN apt-get update && \
    apt-get install -y --allow-downgrades msopenjdk-11=11.0.16-1
...

Ten przykład Bash wykorzystuje obrazy oparte na 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

Aby wykonać to samo w pliku Dockerfile, użyj następujących poleceń:

FROM mcr.microsoft.com/openjdk/jdk:11-mariner
...
RUN yum update && \
    yum install -y --nogpgcheck msopenjdk-11-11.0.15-1
...

Harmonogram ponownej kompilacji obrazu kontenera

Aby zapewnić najwyższy poziom bezpieczeństwa i stabilności, nasze obrazy kontenerów są odbudowywane co poniedziałek, środę i piątek. Ten regularny harmonogram ponownej kompilacji umożliwia nam szybkie włączenie najnowszych poprawek zabezpieczeń i aktualizacji.

Możesz oczekiwać następujących korzyści z tego harmonogramu ponownego kompilowania:

  • Terminowe aktualizacje zabezpieczeń: Przez ponowne skompilowanie obrazów trzy razy w tygodniu gwarantujemy, że wszystkie nowe luki w zabezpieczeniach zostaną szybko rozwiązane.
  • Zwiększona stabilność: Regularne aktualizacje pomagają utrzymać stabilność i wydajność aplikacji przez uwzględnienie najnowszych poprawek błędów i ulepszeń.

Jeśli masz jakiekolwiek pytania lub napotkasz problemy związane z tymi aktualizacjami, zapoznaj się z tym harmonogramem przed otwarciem biletu pomocy technicznej.

Aby uzyskać więcej informacji na temat naszych zasad pomocy technicznej, zobacz Plan pomocy technicznej dla zestawu Microsoft Build of OpenJDK.

Weryfikowanie podpisów obrazów kontenera

Aby sprawdzić podpisy obrazów kontenera, najpierw zainstaluj następujące wymagania wstępne:

Następnie wykonaj następujące czynności:

  1. Dodaj certyfikat do magazynu zaufania przy użyciu następującego polecenia:

    notation cert add --type ca --store supplychain msft_supply_chain.crt
    
  2. Skonfiguruj zasady zaufania, tworząc plik trustpolicy.json o następującej zawartości:

    {
        "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"
                ]
            }
        ]
    }
    
  3. Zaimportuj zasady zaufania przy użyciu następującego polecenia:

    notation policy import trustpolicy.json
    
  4. Sprawdź obraz przy użyciu następującego polecenia:

    notation verify mcr.microsoft.com/openjdk/jdk:21-distroless
    

    Powinny zostać wyświetlone następujące dane wyjściowe:

    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
    

Obrazy oparte na systemie Windows

Obecnie nie dostarczamy obrazów kontenerów opartych na systemie Windows.

Prześlij opinię na temat zestawu Microsoft Build of OpenJDK

Wyślij nam swoje komentarze, myśli i pomysły, aby pomóc nam ulepszyć microsoft build of OpenJDK. Odwiedź naszą stronę dyskusji OpenJDK w witrynie GitHub , aby wysłać nam swoją opinię.

Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi firmy Oracle i/lub jej podmiotami partnerskimi.