Gambar kontainer untuk Microsoft Build of OpenJDK
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 20.04 dan Microsoft CBL-Mariner. Gambar diterbitkan di Microsoft Container 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 1.0 | N/A | 17-mariner-cm1 |
11-mariner-cm1 |
N/A |
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 tarikan gambar untuk arsitektur tertentu, gunakan yang berikut ini:
$ docker pull --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:17-mariner
Untuk memaksa arsitektur di dalam Dockerfile
, Anda dapat menggunakan yang berikut ini:
FROM --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:17-mariner AS build
# ...
Untuk informasi selengkapnya tentang membangun gambar kontainer multi-platform, periksa 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:17-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 oleh Microsoft. Mereka memerlukan pendekatan yang berbeda untuk menyebarkan aplikasi. Karena gambar distroless tidak berisi distribusi Linux lengkap, tidak ada shell, misalnya.
Dari ENTRYPOINT
gambar-gambar ini sudah dikonfigurasi menunjuk ke java
perintah . Menggunakan Dockerfiles harus menggunakan CMD
instruksi untuk menyelesaikan argumen baris perintah dari proses peluncur JVM.
Buat Dockerfile dengan konten berikut:
FROM mcr.microsoft.com/openjdk/jdk:17-distroless
COPY app.jar /app.jar
CMD ["-Xmx256m", "-jar", "/app.jar"]
Menggunakan gambar 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 di 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-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"]
Anda juga dapat menginstal JDK menggunakan yum
atau apt-get
, atau hanya mengekstrak tar.gz
file dan mengonfigurasi JAVA_HOME
yang sesuai.
Baca selengkapnya.
Gambar Alpine
Meskipun Microsoft tidak menghasilkan gambar berbasis Alpine, kami menyediakan biner JDK yang dikompilasi musl untuk Alpine Linux.
Pengguna dipersilakan untuk membuat gambar kontainer untuk Alpine Linux menggunakan biner kami.
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 gambar runtime Java kustom, gunakan Dockerfile multi-tahap yang mirip dengan contoh berikut:
# 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"]
Untuk informasi selengkapnya tentang membuat runtime Java kustom, lihat Java Runtime dengan jlink
Pengguna non-root
Gambar dilengkapi dengan app
pengguna yang dapat diaktifkan dan digunakan secara opsional dengan menggunakan lapisan:
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"]
Dalam contoh di atas, biner aplikasi disalin sebagai root
, karena gambar tetap dengan root
secara default. Aplikasi kemudian dijalankan sebagai app
. Folder /home/app
ini juga dimiliki oleh pengguna app
, memberi aplikasi sistem file yang dapat ditulis.
Lokal Default
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, dan tidak dimaksudkan untuk menyarankan konfigurasi yang paling optimal.
Tetap pada versi minor yang lebih lama
Gambar kontainer Microsoft Build of OpenJDK hanya tersedia di bawah tag yang tercantum sebelumnya. Kami tidak menerbitkan tag untuk versi minor, dan tag versi utama selalu memiliki versi minor terbaru untuk memastikan bahwa pengembang akan selalu 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 tertentu, Anda harus menggunakan alat seperti apt-get
atau yum
untuk menginstal JDK versi minor tertentu.
Untuk menginstal versi tertentu pada gambar OS dasar yang berbeda, misalnya debian:buster-slim
, Anda dapat menggunakan pendekatan yang sama baik pada tahap pertama build gambar kontainer tahap muli, atau sebagai bagian dari alur penginstalan paket Linux tradisional. Untuk informasi selengkapnya, lihat Instal di Ubuntu 18.04+ bagian dari Instal Microsoft Build of OpenJDK.
Untuk CBL-Mariner
dan gambar OS lainnya berdasarkan RPM/yum, lihat detail yang disediakan nanti 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 Microsoft Linux dikonfigurasi, seperti yang dijelaskan di Instal di 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.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
Contoh Bash ini menunjukkan cara mengembalikan gambar Anda msopenjdk-11
ke versi yang lebih lama, katakan 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) ...
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.11+9-1
...
Contoh Bash ini menggunakan CBL-Mariner
gambar berbasis:
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!
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.10+9-1
...
Gambar berbasis Windows
Saat ini kami tidak menyediakan gambar 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 merupakan merek dagang yang terdaftar dari Oracle dan/atau afiliasinya.