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-slimdebian:sid-slimสิ่งนี้นำมาซึ่ง 2 ประเด็น:นี่คือใหญ่กว่า 60 MB
alpine:3.8Debian
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 เป็นอิมเมจนักเทียบท่า