Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menyediakan informasi tentang gambar kontainer yang tersedia untuk Microsoft Build of OpenJDK.
Gambar berbasis Linux
Saat ini kami menyediakan gambar kontainer berbasis Linux untuk Ubuntu dan Microsoft CBL-Mariner, yang sekarang dikenal sebagai Azure Linux. Gambar diterbitkan di Microsoft Artifact Registry yang terletak di mcr.microsoft.com/openjdk/jdk
.
Untuk menarik gambar terbaru untuk tag tertentu, gunakan perintah berikut:
docker pull mcr.microsoft.com/openjdk/jdk:<tag>
Tabel berikut menunjukkan tag yang akan digunakan untuk distribusi Linux dan versi JDK Anda.
OS Dasar | 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 Distroless | 21-distroless |
17-distroless |
11-distroless |
8-distroless |
Catatan:Gambar untuk OpenJDK 8 dikirim dengan biner Eclipse Temurin, dari proyek Eclipse Adoptium .
Arsitektur
Gambar di atas ditawarkan untuk arsitektur amd64
dan arm64
. Runtime kontainer Anda akan menarik gambar yang tepat berdasarkan lingkungan Anda. Untuk memaksa pengambilan gambar untuk arsitektur tertentu, gunakan cara berikut.
$ docker pull --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-mariner
Untuk memaksa arsitektur di dalam Dockerfile
, Anda dapat menggunakan yang berikut:
FROM --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-mariner AS build
# ...
Untuk informasi lebih lanjut tentang membuat citra kontainer multi-platform, lihat dokumentasi runtime kontainer Anda. Misalnya, Docker dan Podman.
Cara menggunakan gambar-gambar ini
Buat Dockerfile dengan konten berikut:
# 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
Gambar distroless didasarkan pada distribusi CBL-Mariner 2.0 dari Microsoft. Mereka memerlukan pendekatan yang berbeda untuk menyebarkan aplikasi. Karena gambar distroless tidak berisi distribusi Linux lengkap, tidak ada shell, misalnya.
Gambar-gambar ENTRYPOINT
ini sudah dikonfigurasi untuk menunjuk ke perintah java
. Mengonsumsi Dockerfiles harus memakai CMD
instruksi untuk melengkapi argumen baris perintah dari proses peluncur JVM.
Buat Dockerfile dengan konten berikut:
FROM mcr.microsoft.com/openjdk/jdk:21-distroless
COPY app.jar /app.jar
CMD ["-Xmx256m", "-jar", "/app.jar"]
Menggunakan gambar atau versi OS Dasar yang berbeda
Jika Anda lebih suka menggunakan distribusi gambar dasar OS yang berbeda, Anda dapat menyalin JDK dari gambar bawaan yang ada menggunakan COPY --from
instruksi dalam Dockerfile, mirip dengan contoh berikut:
# 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"]
Anda juga dapat menginstal JDK menggunakan yum
atau apt-get
, atau hanya mengekstrak tar.gz
file dan mengonfigurasi JAVA_HOME
yang sesuai.
Baca selengkapnya.
Menggunakan versi Ubuntu yang berbeda
Untuk menerapkan Microsoft Build of OpenJDK pada berbagai versi gambar dasar Ubuntu, Microsoft merekomendasikan agar pengguna membuat sendiri Dockerfiles
. Sebagai referensi, di bawah ini Dockerfile
membangun gambar dengan 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"]
Gambar alpine
Meskipun Microsoft tidak menyediakan citra berbasis Alpine, kami menyediakan serangkaian terbatas biner JDK yang dikompilasi musl untuk Alpine Linux.
Pengguna dipersilakan untuk membuat gambar kontainer untuk Alpine Linux menggunakan biner yang tersedia.
Buat Dockerfile dengan konten berikut:
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" ]
Membuat runtime Java kustom
Untuk membuat citra runtime Java kustom, gunakan Dockerfile multi-tahap seperti contoh berikut:
# 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"]
Untuk informasi selengkapnya tentang membuat runtime Java kustom, lihat Java Runtimes dengan jlink
Pengguna yang bukan root
Gambar dilengkapi dengan app
pengguna yang dapat diaktifkan dan digunakan secara opsional dengan mengonsumsi lapisan:
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"]
Dalam contoh di atas, biner aplikasi disalin sebagai root
, karena secara default gambar tetap dengan root
. Aplikasi kemudian dijalankan sebagai app
. Folder /home/app
ini juga dimiliki oleh pengguna app
, memberi aplikasi sistem file yang dapat ditulis.
Lokal bawaan
Gambar untuk Microsoft Build of OpenJDK dikonfigurasi secara default dengan en_US.UTF-8
lokal. Jika Anda ingin menggunakan lokal yang berbeda, atau gambar dasar yang berbeda seperti yang dijelaskan sebelumnya, Anda harus mengonfigurasi variabel lingkungan secara manual di Dockerfile Anda sendiri, dan memastikan lokal yang Anda inginkan diinstal.
Misalnya, untuk menggunakan pt_BR.UTF-8
lokal pada gambar berbasis Ubuntu, Anda dapat menambahkan baris berikut ke Dockerfile Anda:
...
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
...
Dockerfile ini disediakan sebagai contoh. Ini tidak dimaksudkan untuk menyarankan konfigurasi yang paling optimal.
Tetap menggunakan versi-versi minor yang lebih lama
Gambar kontainer Microsoft Build of OpenJDK hanya tersedia di bawah tag yang tercantum sebelumnya. Kami tidak menyediakan tag untuk versi minor, dan tag versi utama selalu memiliki versi minor terbaru untuk memastikan bahwa pengembang akan memiliki pembaruan terbaru untuk versi utama tertentu.
Gambar dasar ini menggunakan mekanisme manajer paket yang mendasar dari distribusi Linux untuk menginstal paket JDK. Oleh karena itu, untuk tetap menggunakan versi lama tertentu, Anda harus menggunakan alat seperti apt-get
atau yum
untuk menginstal JDK versi minor tertentu.
Untuk memutar kembali ke versi tertentu pada gambar OS dasar yang berbeda di luar daftar gambar yang disediakan, misalnya debian:buster-slim
, Anda dapat menggunakan pendekatan yang sama di bawah ini baik pada tahap pertama build gambar kontainer tahap multi, atau sebagai bagian dari alur penginstalan paket Linux tradisional. Untuk informasi selengkapnya, lihat bagian Instal di Ubuntu 18.04+ dari Menginstal Microsoft Build of OpenJDK.
Untuk CBL-Mariner
dan citra OS lainnya berdasarkan RPM/yum, lihat detil yang nanti disediakan di artikel ini.
Untuk Ubuntu
, dan gambar berbasis Debian lainnya, Anda dapat menampilkan semua versi minor yang tersedia yang diterbitkan di repositori Microsoft Linux, seperti yang ditunjukkan dalam contoh Bash berikut yang menunjukkan perintah dan output. Perintah yang ditampilkan di sini mengasumsikan repositori Linux Microsoft dikonfigurasi, seperti yang dijelaskan di Instal pada Ubuntu 18.04+.
$ 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
...
Contoh Bash ini menunjukkan cara mengembalikan gambar msopenjdk-11
Anda ke versi yang lebih lama, katakan 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) ...
Untuk melakukan hal yang sama di Dockerfile Anda, gunakan perintah berikut:
FROM mcr.microsoft.com/openjdk/jdk:11-ubuntu
...
RUN apt-get update && \
apt-get install -y --allow-downgrades msopenjdk-11=11.0.16-1
...
Contoh Bash ini menggunakan gambar berbasis 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
Untuk melakukan hal yang sama di Dockerfile Anda, gunakan perintah berikut:
FROM mcr.microsoft.com/openjdk/jdk:11-mariner
...
RUN yum update && \
yum install -y --nogpgcheck msopenjdk-11-11.0.15-1
...
Jadwal pembangunan ulang gambar kontainer
Untuk memastikan tingkat keamanan dan stabilitas tertinggi, gambar kontainer kami dibangun kembali setiap Hari Senin, Rabu, dan Jumat. Jadwal pembangunan ulang reguler ini memungkinkan kami untuk segera menggabungkan patch dan pembaruan keamanan terbaru.
Anda dapat mengharapkan manfaat berikut dari jadwal pembangunan ulang ini:
- Pembaruan keamanan tepat waktu: Dengan membangun kembali gambar tiga kali seminggu, kami memastikan bahwa kerentanan keamanan baru ditangani dengan cepat.
- Peningkatan stabilitas: Pembaruan rutin membantu menjaga stabilitas dan performa aplikasi Anda dengan menyertakan perbaikan dan peningkatan bug terbaru.
Jika Anda memiliki pertanyaan atau mengalami masalah yang terkait dengan pembaruan ini, lihat jadwal ini sebelum Anda membuka tiket dukungan.
Untuk informasi selengkapnya tentang kebijakan dukungan kami, lihat Peta jalan dukungan untuk Microsoft Build of OpenJDK.
Memverifikasi tanda tangan gambar kontainer
Untuk memverifikasi tanda tangan gambar kontainer, pertama-tama instal prasyarat berikut:
- Notasi CLI
-
msft_supply_chain.crt
- Unduh file ini dan simpan ke komputer lokal Anda menggunakan nama file seperti msft_supply_chain.crt.
Kemudian, gunakan langkah berikut:
Tambahkan sertifikat ke penyimpanan kepercayaan dengan menggunakan perintah berikut:
notation cert add --type ca --store supplychain msft_supply_chain.crt
Konfigurasikan kebijakan kepercayaan dengan membuat file trustpolicy.json dengan konten berikut:
{ "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" ] } ] }
Impor kebijakan kepercayaan dengan menggunakan perintah berikut:
notation policy import trustpolicy.json
Verifikasi gambar dengan menggunakan perintah berikut:
notation verify mcr.microsoft.com/openjdk/jdk:21-distroless
Anda akan melihat output berikut:
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
Gambar berbasis Windows
Saat ini kami tidak menyediakan citra kontainer berbasis Windows.
Memberikan umpan balik tentang Microsoft Build of OpenJDK
Kirimi kami komentar, pemikiran, dan ide Anda untuk membantu kami meningkatkan Microsoft Build of OpenJDK. Kunjungi halaman diskusi OpenJDK kami di GitHub untuk mengirimkan umpan balik Anda kepada kami.
Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar Oracle dan/atau afiliasinya.