Java 11 ได้รับการประกาศให้เป็นรุ่น LTS ล่าสุด ดังนั้นเราจึงพยายามที่จะเริ่มบริการใหม่ ๆ โดยใช้ Java เวอร์ชันนี้
อย่างไรก็ตามอิมเมจ Docker พื้นฐานสำหรับ Java 11 มีขนาดใหญ่กว่าเทียบเท่าสำหรับ Java 8:
openjdk:8-jre-alpine
: 84 MBopenjdk:11-jre-slim
: 283 MB
(ฉันกำลังพิจารณาเฉพาะOpenJDK อย่างเป็นทางการและรูปภาพที่มีน้ำหนักเบาที่สุดสำหรับแต่ละเวอร์ชัน Java)
Deeper ขุดค้นพบสิ่งต่าง ๆ ต่อไปนี้:
ภาพใช้ภาพฐาน
openjdk:11-jre-slim
debian:sid-slim
สิ่งนี้นำมาซึ่ง 2 ประเด็น:นี่คือใหญ่กว่า 60 MB
alpine:3.8
Debian
sid
รุ่นจะไม่แน่นอน
openjdk-11-jre-headless
แพคเกจติดตั้งในภาพเป็น3 ครั้งมีขนาดใหญ่กว่าopenjdk8-jre
(ภายในวิ่งหางภาชนะ):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/
ฉันจะค้นพบ "รากฐาน" ของความหนักหน่วงนี้ - มันเป็น
modules
ไฟล์ของ JDK:# ls -lhG /usr/lib/jvm/java-11-openjdk-amd64/lib/modules 135M /usr/lib/jvm/java-11-openjdk-amd64/lib/modules
ดังนั้นตอนนี้คำถามที่มา:
เหตุใดจึง
alpine
ไม่ใช้อีกเป็นอิมเมจพื้นฐานสำหรับ Java 11 อิมเมจแบบบางทำไมเวอร์ชันsid ที่ไม่เสถียรใช้สำหรับอิมเมจ LTS Java?
เหตุใดแพ็คเกจ slim / headless / JRE สำหรับ OpenJDK 11 จึงใหญ่กว่าเมื่อเทียบกับแพ็คเกจ OpenJDK 8 ที่คล้ายกัน
- นี่คือสิ่งที่โมดูลไฟล์ที่นำ 135 MB ใน OpenJDK 11?
UPD : ในฐานะที่เป็นโซลูชั่นสำหรับความท้าทายเหล่านี้เราสามารถใช้คำตอบนี้: แอปพลิเคชัน Java 11 เป็นอิมเมจนักเทียบท่า