Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 artık Azure Linux olarak bilinen Microsoft CBL-Mariner için Linux tabanlı konteyner görüntüleri sağlıyoruz. Görüntüler, Microsoft Artifact Registry'de mcr.microsoft.com/openjdk/jdk
yayı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.
Temel İşletim Sistemi | 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 görüntüleri taşır.
Mimariler
Yukarıdaki görüntüler hem amd64
hem de arm64
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 bir görüntünün indirilmesini zorlamak için aşağıdakileri kullanın:
$ docker pull --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-mariner
içinde Dockerfile
bir mimariyi zorlamak için aşağıdakileri kullanabilirsiniz:
FROM --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-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 nasıl kullanacağınız
Aşağıdaki içeriklere sahip bir Dockerfile oluşturun:
# 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"]
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.
Bu görüntülerin ENTRYPOINT
zaten java
komutuna işaret edecek şekilde yapılandırılmıştır.
Dockerfiles kullanımı, JVM başlatıcı işleminin komut satırı bağımsız değişkenlerini tamamlamak için CMD
yönergesini kullanmalıdır.
Aşağıdaki içeriklere sahip bir Dockerfile oluşturun:
FROM mcr.microsoft.com/openjdk/jdk:21-distroless
COPY app.jar /app.jar
CMD ["-Xmx256m", "-jar", "/app.jar"]
Farklı bir Temel İşletim Sistemi görüntüsü veya sürümü 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-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"]
JDK'yi ya yum
ya da apt-get
kullanarak yükleyebilir veya sadece bir tar.gz
dosyasını ayıklayıp JAVA_HOME
'ü uygun şekilde yapılandırabilirsiniz.
Daha fazla bilgi edinin.
Ubuntu'nun farklı bir sürümünü kullanma
Microsoft Build of OpenJDK'yi Ubuntu temel görüntülerinin farklı sürümlerine dağıtmak için Microsoft, kullanıcıların kendi Dockerfiles
yazmalarını önerir. Referans amacıyla, aşağıdaki Dockerfile
Ubuntu 24.04 kullanarak bir görüntü oluşturur.
# 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"]
Alp resimleri
Microsoft Alpine tabanlı imajlar sağlamasa da, Alpine Linux için musl ile derlenmiş JDK binaries sınırlı bir kümesini sağlarız.
Kullanıcılar kullanılabilir ikili dosyaları 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: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"]
Ö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, tüketen katmanlar tarafından kullanılabilecek ve isteğe bağlı olarak etkinleştirilebilen bir app
kullanıcıyla birlikte gelir.
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"]
Uygulama ikili dosyası yukarıdaki örnekte root
olarak kopyalanır, çünkü görüntüler varsayılan olarak root
olarak kalır. Ardından uygulama olarak app
yürütülür. Klasör /home/app
ayrıca kullanıcıya app
aittir ve uygulamaya yazılabilir bir dosya sistemi verir.
Varsayılan yerel ayar
OpenJDK'nin Microsoft Build görüntüleri, varsayılan olarak en_US.UTF-8
yerel ayarıyla yapılandırılmıştı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 örneği verilmiştir. 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'un Build sürümü, yalnızca daha önce listelenen etiketler altında kullanılabilir. İkincil sürümler için etiketler sağlamayız ve geliştiricilerin belirli bir ana sürüm için 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 eski sürümde kalmak istiyorsanız, apt-get
veya yum
gibi araçları kullanarak JDK'nin belirli bir alt sürümünü yüklemeniz gerekecek.
Sağlanan görüntüler listesinin dışındaki farklı temel işletim sistemi görüntülerinde belirli sürümlere geri dönmek için debian:buster-slim
, çok 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 aşağıda belirtilen yaklaşımı kullanabilirsiniz. Daha fazla bilgi için OpenJDK'nin Microsoft Derlemesini Yükleme'ninUbuntu 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.
Ubuntu
için ve diğer Debian tabanlı görüntüler için, Microsoft Linux depolarında yayımlanan tüm kullanılabilir ikincil sürümleri, komutları ve çıkışı gösteren aşağıdaki Bash örneğinde gösterildiği gibi 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.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
...
Bu Bash örneği, görüntünüzü daha eski bir sürüme, msopenjdk-11
örneğin 11.0.16-1
, nasıl döndürebileceğinizi gösterir.
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) ...
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.16-1
...
Bu Bash örneği, CBL-Mariner
tabanlı görüntüleri kullanır:
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
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.15-1
...
Kapsayıcı görüntüsü yeniden oluşturma zamanlaması
En yüksek güvenlik ve kararlılık düzeyini sağlamak için kapsayıcı görüntülerimiz her Pazartesi, Çarşamba ve Cuma günü yeniden oluşturulur. Bu düzenli yeniden derleme zamanlaması, en son güvenlik düzeltme eklerini ve güncelleştirmeleri hemen eklememizi sağlar.
Bu yeniden yapılandırma zamanlamasından aşağıdaki avantajları bekleyebilirsiniz.
- Zamanında güvenlik güncelleştirmeleri: Görüntüleri haftada üç kez yeniden oluşturarak yeni güvenlik açıklarının hızla giderilmesini sağlıyoruz.
- Geliştirilmiş kararlılık: Düzenli güncelleştirmeler, en son hata düzeltmelerini ve iyileştirmeleri ekleyerek uygulamalarınızın kararlılığını ve performansını korumaya yardımcı olur.
Bu güncelleştirmelerle ilgili sorularınız varsa veya sorunlarla karşılaşırsanız destek bileti açmadan önce bu zamanlamaya bakın.
Destek ilkelerimiz hakkında daha fazla bilgi için bkz . OpenJDK'nin Microsoft Derlemesi için destek yol haritası.
Kapsayıcı görüntüsü imzalarını doğrulama
Kapsayıcı görüntüsü imzalarını doğrulamak için önce aşağıdaki önkoşulları yükleyin:
- Notasyon CLI'sı
-
msft_supply_chain.crt
- Bu dosyayı indirin ve msft_supply_chain.crt gibi bir dosya adı kullanarak yerel makinenize kaydedin.
Ardından aşağıdaki adımları kullanın:
Aşağıdaki komutu kullanarak sertifikayı güven deposuna ekleyin:
notation cert add --type ca --store supplychain msft_supply_chain.crt
Aşağıdaki içeriğe sahip birtrustpolicy.json dosyası oluşturarak güven ilkelerini yapılandırın:
{ "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" ] } ] }
Aşağıdaki komutu kullanarak güven ilkesini içeri aktarın:
notation policy import trustpolicy.json
Aşağıdaki komutu kullanarak görüntüyü doğrulayın:
notation verify mcr.microsoft.com/openjdk/jdk:21-distroless
Aşağıdaki çıkışı görmeniz gerekir:
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
Windows tabanlı görüntüler
Şu anda Windows tabanlı kapsayıcı görüntüleri sağlamıyoruz.
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.