OpenJDK'nin Microsoft Derlemesi için kapsayıcı görüntüleri

Bu makale, OpenJDK'nin Microsoft Derlemesi için kullanılabilir kapsayıcı görüntüleri hakkında bilgi sağlar.

Linux tabanlı görüntüler

Şu anda Ubuntu ve Microsoft CBL-Mariner için Linux tabanlı kapsayıcı görüntüleri sağlıyoruz. Görüntüler, konumundaki Microsoft Container Registry'demcr.microsoft.com/openjdk/jdkyayımlanır.

Belirli bir etiket için en son görüntüyü çekmek için aşağıdaki komutu kullanın:

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

Aşağıdaki tabloda Linux dağıtımınız ve JDK sürümünüz için kullanılacak etiket gösterilmektedir.

Base OS OpenJDK 21 OpenJDK 17 OpenJDK 11 OpenJDK 8
Ubuntu 22.04 21-ubuntu 17-ubuntu 11-ubuntu Yok
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

Not:Eclipse Adoptium projesinden Eclipse Temurin ikili dosyalarını içeren OpenJDK 8 için görüntüler.

Mimariler

Yukarıdaki görüntüler hem hem de amd64arm64 mimariler için sunulur. Kapsayıcı çalışma zamanınız ortamınıza göre doğru görüntüyü çekecektir. Belirli bir mimari için görüntünün çekilmesini zorlamak için aşağıdakileri kullanın:

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

içinde Dockerfilebir mimariyi zorlamak için aşağıdakileri kullanabilirsiniz:

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

Çok platformlu kapsayıcı görüntüleri oluşturma hakkında daha fazla bilgi için kapsayıcı çalışma zamanınızın belgelerine bakın. Örneğin, Docker ve Podman.

Bu görüntüleri kullanma

Aşağıdaki içeriklere sahip bir Dockerfile oluşturun:

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

Distroless

Distroless görüntüleri, Microsoft'un CBL-Mariner 2.0 dağıtımını temel alır. Bir uygulamayı dağıtmak için farklı bir yaklaşıma ihtiyaç duyarlar. Distroless görüntüleri tam bir Linux dağıtımı içermediğinden, örneğin kabuk yoktur.

ENTRYPOINT Bu görüntülerin komutuna java işaret eden şekilde zaten yapılandırılmıştır. Dockerfiles kullanmak, JVM başlatıcı işleminin komut satırı bağımsız değişkenlerini tamamlamak için yönergeyi kullanmalıdırCMD.

Aşağıdaki içeriklere sahip bir Dockerfile oluşturun:

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

COPY app.jar /app.jar

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

Farklı bir Temel İşletim Sistemi görüntüsü kullanma

Farklı bir işletim sistemi temel görüntü dağıtımı kullanmayı tercih ediyorsanız, aşağıdaki örneğe benzer şekilde dockerfile içindeki yönergeyi COPY --from kullanarak mevcut önceden oluşturulmuş görüntüden JDK'yi kopyalayabilirsiniz:

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

JDK'yi veya kullanarak yum da yükleyebilir ya da yalnızca bir tar.gz dosya ayıklayabilir ve uygun şekilde yapılandırabilirsinizJAVA_HOME.apt-get Daha fazla bilgi edinin.

Alp resimleri

Microsoft Alp tabanlı görüntüler üretmese de Alpine Linux için musl ile derlenmiş JDK ikili dosyaları sunuyoruz.

Kullanıcılar ikili dosyalarımızı kullanarak Alpine Linux için kapsayıcı görüntüleri oluşturabilir.

Aşağıdaki içeriklere sahip bir Dockerfile oluşturun:

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

Özel Java çalışma zamanı oluşturma

Özel java çalışma zamanı görüntüsü oluşturmak için aşağıdaki örneğe benzer çok aşamalı bir Dockerfile kullanın:

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

Özel Java çalışma zamanları oluşturma hakkında daha fazla bilgi için bkz. jlink ile Java Çalışma Zamanları

Kök olmayan kullanıcı

Görüntüler, isteğe bağlı olarak etkinleştirilebilen ve katmanlar kullanılarak kullanılabilen bir app kullanıcıyla birlikte gelir:

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

Yukarıdaki örnekte, görüntüler varsayılan olarak ile root kaldığından, uygulama ikili dosyası olarak rootkopyalanır. Ardından uygulama olarak appyürütülür. Klasör /home/app ayrıca kullanıcıya appaittir ve uygulamaya yazılabilir bir dosya sistemi verir.

Varsayılan yerel ayar

OpenJDK'nin Microsoft Build görüntüleri varsayılan olarak yerel ayar ile en_US.UTF-8 yapılandırılır. Daha önce açıklandığı gibi farklı bir yerel ayar veya farklı bir temel görüntü kullanmak istiyorsanız, ortam değişkenlerini kendi Dockerfile dosyanızda el ile yapılandırmanız ve istediğiniz yerel ayarın yüklendiğinden emin olmanız gerekir.

Örneğin, Ubuntu tabanlı bir görüntüde yerel ayarı kullanmak pt_BR.UTF-8 için Dockerfile'ınıza aşağıdaki satırları ekleyebilirsiniz:

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

Bu Dockerfile bir örnek olarak sağlanır ve en uygun yapılandırmaları önermek için tasarlanmamıştır.

Eski ikincil sürümlerde kalın

OpenJDK kapsayıcı görüntülerinin Microsoft Derlemesi yalnızca daha önce listelenen etiketler altında kullanılabilir. İkincil sürümler için etiketler yayımlamayız ve geliştiricilerin belirli bir ana sürüm için her zaman en son güncelleştirmeye sahip olmasını sağlamak için ana sürüm etiketleri her zaman en son ikincil sürüme sahiptir.

Bu temel görüntüler, JDK paketini yüklemek için Linux dağıtımlarının temel paket yöneticisi mekanizmasını kullanır. Bu nedenle, belirli bir sürümde kalmak için veya gibi apt-getyum araçları kullanarak JDK'nin belirli bir ikincil sürümünü yüklemeniz gerekir.

Örneğin debian:buster-slim, farklı temel işletim sistemi görüntülerine belirli sürümleri yüklemek için, muli aşamalı kapsayıcı görüntüsü derlemesinin ilk aşamasında veya geleneksel linux paketi yükleme akışının bir parçası olarak aynı yaklaşımı kullanabilirsiniz. Daha fazla bilgi için OpenJDK'nin Microsoft Derlemesini Yükleme'nin Ubuntu 18.04+ üzerine yükleme bölümüne bakın.

RPM/yum tabanlı diğer işletim sistemi görüntüleri için CBL-Mariner bu makalenin devamında sağlanan ayrıntılara bakın.

ve Ubuntudiğer Debian tabanlı görüntüler için, komutları ve çıkışı gösteren aşağıdaki Bash örneğinde gösterildiği gibi, Microsoft Linux depolarında yayımlanan tüm kullanılabilir ikincil sürümleri görüntüleyebilirsiniz. Burada gösterilen komutlar, Microsoft Linux deposunun Ubuntu 18.04+ üzerine yükleme bölümünde açıklandığı gibi yapılandırıldığını varsayar.

$ 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

Bu Bash örneğinde görüntünüzün daha eski bir sürüme nasıl döndürülür msopenjdk-11 , örneğin 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) ...

Dockerfile dosyanızda da aynı şeyi yapmak için aşağıdaki komutları kullanın:

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

Bu Bash örneği, temel görüntüleri kullanır 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.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!

Dockerfile dosyanızda da aynı şeyi yapmak için aşağıdaki komutları kullanın:

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

Windows tabanlı görüntüler

Şu anda Windows tabanlı kapsayıcı görüntüleri sunmuyoruz.

OpenJDK'nin Microsoft Derlemesi hakkında geri bildirim sağlayın

OpenJDK'nin Microsoft Derlemesi'ni geliştirmemize yardımcı olmak için yorumlarınızı, düşüncelerinizi ve fikirlerinizi bize gönderin. Bize geri bildirim göndermek için GitHub'da OpenJDK tartışmaları sayfamızı ziyaret edin.

Java ve OpenJDK, Oracle’ın ve/veya bağlı kuruluşlarının ticari markaları ya da tescilli ticari markalarıdır.