Java 11 diumumkan sebagai versi LTS terbaru. Jadi, kami mencoba memulai layanan baru berdasarkan versi Java ini.
Namun, gambar Docker dasar untuk Java 11 jauh lebih besar daripada yang setara untuk Java 8:
openjdk:8-jre-alpine
: 84 MBopenjdk:11-jre-slim
: 283 MB
(Saya hanya mempertimbangkan OpenJDK resmi dan gambar paling ringan untuk setiap versi Java.)
Penggalian yang lebih dalam mengungkap "hal-hal" berikut:
yang
openjdk:11-jre-slim
gambar menggunakan gambar dasardebian:sid-slim
. Ini membawa 2 masalah:ini 60 MB lebih besar dari
alpine:3.8
yang Debian
sid
versi yang tidak stabil
yang
openjdk-11-jre-headless
paket dipasang di gambar adalah 3 kali lebih besar daripadaopenjdk8-jre
(dalam menjalankan Docker kontainer):openjdk:8-jre-alpine
:/ # du -hs /usr/lib/jvm/java-1.8-openjdk/jre/lib/ 57.5M /usr/lib/jvm/java-1.8-openjdk/jre/lib/
openjdk:11-jre-slim
:# du -sh /usr/lib/jvm/java-11-openjdk-amd64/lib/ 179M /usr/lib/jvm/java-11-openjdk-amd64/lib/
Lebih dalam saya menemukan "root" dari berat ini - itu adalah
modules
file JDK:# ls -lhG /usr/lib/jvm/java-11-openjdk-amd64/lib/modules 135M /usr/lib/jvm/java-11-openjdk-amd64/lib/modules
Jadi, sekarang pertanyaan yang datang:
Mengapa
alpine
tidak digunakan lagi sebagai gambar dasar untuk gambar tipis Java 11?Mengapa versi sid yang tidak stabil digunakan untuk gambar LTS Java?
Mengapa paket slim / headless / JRE untuk OpenJDK 11 begitu besar dibandingkan dengan paket OpenJDK 8 yang serupa?
- Apa file modul ini yang membawa 135 MB di OpenJDK 11?
UPD : sebagai solusi untuk tantangan ini orang dapat menggunakan jawaban ini: aplikasi Java 11 sebagai docker image
Jawaban:
Itu karena, sayangnya, tidak ada OpenJDK 11 build stabil resmi untuk Alpine saat ini.
Alpine menggunakan musl libc, berbeda dengan glibc standar yang digunakan oleh kebanyakan Linux di luar sana, yang berarti bahwa JVM harus kompatibel dengan musl libc untuk mendukung vanilla Alpine. Port OpenJDK musl sedang dikembangkan di bawah proyek Portola OpenJDK .
Status saat ini dirangkum pada halaman OpenJDK 11 :
Satu-satunya versi OpenJDK yang stabil untuk Alpine saat ini adalah 7 dan 8, disediakan oleh proyek IcedTea .
Namun - jika Anda ingin mempertimbangkan selain OpenJDK resmi, Zulu OpenJDK Azul menawarkan alternatif yang menarik:
Untuk ketersediaan dan peta jalan dukungan , lihat Peta jalan dukungan Azul .
Pembaruan, 3/6/19: Sampai kemarin,
openjdk11
tersedia di repositori Alpine! Itu bisa diambil di Alpine menggunakan:Paket ini didasarkan pada
jdk11u
cabang OpenJDK plus perbaikan porting dari proyek Portola, diperkenalkan dengan PR berikut . Kudos dan terima kasih yang sebesar-besarnya kepada tim Alpine.Itu pertanyaan / permintaan yang adil. Sebenarnya ada tiket terbuka untuk menyediakan Java 11 pada rilis Debian yang stabil:
https://github.com/docker-library/openjdk/issues/237
Pembaruan, 26/12/18: Masalah ini telah diatasi, dan sekarang gambar ramping OpenJDK 11 didasarkan pada
stretch-backports
OpenJDK 11 yang baru-baru ini tersedia ( tautan PR ).Java 9 memperkenalkan sistem modul, yang merupakan pendekatan baru dan lebih baik untuk pengelompokan paket dan sumber daya, dibandingkan dengan file jar. Artikel dari Oracle ini memberikan pengantar yang sangat rinci untuk fitur ini:
https://www.oracle.com/corporate/features/understanding-java-9-modules.html
The
modules
berkas bundel semua modul dikirimkan dengan JRE. Daftar lengkap modul dapat dicetak denganjava --list-modules
.modules
memang file yang sangat besar, dan seperti dikomentari, itu berisi semua modul standar, dan karena itu cukup membengkak.Satu hal yang perlu diperhatikan adalah bahwa itu menggantikan
rt.jar
dantools.jar
yang menjadi usang, antara lain, jadi ketika menghitung ukuranmodules
ketika membandingkan dengan pra-9 OpenJDK build, ukuranrt.jar
dantools.jar
harus dikurangi (mereka harus mengambil sekitar 80MB gabungan) .sumber
untuk 07.2019 https://adoptopenjdk.net/ memiliki dukungan Alpine resmi untuk Java 11:
https://github.com/AdoptOpenJDK/openjdk-docker/blob/master/11/jdk/alpine/
https://hub.docker.com/r/adoptopenjdk/openjdk11
Namun, modul ( jmods ,
jlink
) masih harus dipertimbangkan ketika seseorang mengumpulkan aplikasi minimal.Catatan : gambar ramping tidak mengandung beberapa modul (seperti
java.sql
) - mereka dikecualikan secara eksplisit ( https://github.com/AdoptOpenJDK/openjdk-docker/blob/21b8393b9c23f94d6921a56cce27b026537c6ca2/11/jdk/alpine/slim-java.sh#L233 )sumber
https://hub.docker.com/_/openjdk?tab=tags&page=1&name=11.0.7-jre-slim
dalam repositori openjdk buruh pelabuhan, gambar slim jre 11 kurang dari 70mb
sumber