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 udostępniamy obrazy kontenerów oparte na systemie Linux dla systemów Ubuntu i Microsoft CBL-Mariner. Obrazy są publikowane w usłudze Microsoft Container Registry znajdującej 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:17-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:17-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:17-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:17-distroless

COPY app.jar /app.jar

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

Używanie innego obrazu 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-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"]

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.

Obrazy alpejskie

Chociaż firma Microsoft nie tworzy obrazów opartych na alpine, udostępniamy pliki binarne zestawu JDK skompilowane musl dla systemu Alpine Linux.

Użytkownicy są mile widziani, aby tworzyć obrazy kontenerów dla systemu Alpine Linux przy użyciu naszych 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: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"]

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:17-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 dostarczany jako przykład i nie jest przeznaczony 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 publikujemy tagów dla wersji pomocniczych, a tagi wersji głównej zawsze mają najnowszą wersję pomocniczą, aby zapewnić, że deweloperzy będą zawsze 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 zachować określoną wersję, należy użyć narzędzi, takich jak apt-get lub yum zainstalować określoną wersję pomocniczą zestawu JDK.

Aby zainstalować określone wersje na różnych podstawowych obrazach systemu operacyjnego, na przykład debian:buster-slimmożna użyć tego samego podejścia 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 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.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

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

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.11+9-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.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!

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.10+9-1
...

Obrazy oparte na systemie Windows

Obecnie nie udostępniamy 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.