Udostępnij za pośrednictwem


Obrazy kontenerów dla zestawu Microsoft Build of OpenJDK

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

Obrazy oparte na systemie Linux

Obecnie dostarczamy obrazy kontenerów oparte na systemie Linux dla systemów Ubuntu i Microsoft CBL-Mariner, obecnie znane jako Azure Linux. Obrazy są publikowane w Rejestr Artefaktów Microsoft znajdujące 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 używany do dystrybucji systemu Linux i wersji zestawu JDK.

Podstawowy system operacyjny OpenJDK 21 OpenJDK 17 OpenJDK 11 OpenJDK 8
Ubuntu 22.04 21-ubuntu 17-ubuntu 11-ubuntu Nie dotyczy
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 zestawu OpenJDK 8 z plikami binarnymi środowiska Eclipse Temurin z projektu Eclipse Adoptium .

Architektury

Powyższe obrazy są oferowane zarówno dla architektury, jak 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 platformy 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 bez dystrybucji są oparte na dystrybucji CBL-Mariner 2.0 firmy Microsoft. Wymagają one innego podejścia do wdrażania aplikacji. Ponieważ obrazy bez dystrybucji nie zawierają kompletnej dystrybucji systemu Linux, na przykład nie ma powłoki.

Te ENTRYPOINT obrazy są już skonfigurowane, wskazując polecenie 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"]

Zestaw JDK można również zainstalować przy użyciu zestawu lub apt-getlub lub po prostu wyodrębnić tar.gz plik i odpowiednio skonfigurowaćJAVA_HOME.yum Dowiedz się więcej.

Korzystanie z innej wersji systemu Ubuntu

Aby wdrożyć zestaw Microsoft Build of OpenJDK w różnych wersjach obrazów podstawowych systemu Ubuntu, firma Microsoft zaleca, aby użytkownicy utworzyli własny Dockerfileszestaw . Na potrzeby dokumentacji poniżej Dockerfile przedstawiono kompilację obrazu 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łączony i używany przez korzystanie z warstw:

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. /home/app Folder jest również własnością użytkownika app, dając aplikacji zapisywalny system 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 ustawień regionalnych na obrazie opartym na systemie Ubuntu, możesz dodać następujące wiersze 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.

Bądź na starszych wersjach pomocniczych

Microsoft Build of OpenJDK container images are available only under the tags listed previously .Microsoft Build of OpenJDK container images are available only under the tags listed previously . 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 podstawowe obrazy używają podstawowego mechanizmu menedżera pakietów dystrybucji systemu Linux 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 zainstalować określoną wersję pomocniczą zestawu JDK.

Aby wycofać się do określonych wersji na różnych podstawowych obrazach systemu operacyjnego poza listą dostarczonych obrazów, na przykład debian:buster-slimmożna użyć tego samego podejścia poniżej w pierwszym etapie kompilacji obrazu kontenera muli-stage lub w ramach tradycyjnego przepływu instalacji pakietu 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 systemu operacyjnego na podstawie obr./yum zobacz szczegóły podane w dalszej części tego artykułu.

W przypadku Ubuntuobrazów opartych na systemie i innych systemach Debian można wyświetlić wszystkie dostępne wersje pomocnicze opublikowane w repozytoriach systemu Microsoft Linux, jak pokazano w poniższym przykładzie powłoki 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
...

W tym przykładzie powłoki Bash pokazano, jak przywrócić starszą wersję obrazu msopenjdk-11 , np 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) ...

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

W tym przykładzie powłoki Bash są używane CBL-Mariner obrazy oparte na:

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 ponownego kompilowanie 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 kompilowanie:

  • Terminowe aktualizacje zabezpieczeń: przez ponowne skompilowanie obrazów trzy razy w tygodniu gwarantujemy, że wszystkie nowe luki w zabezpieczeniach zostaną szybko rozwiązane.
  • Większa 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.

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