Java 11 được công bố là phiên bản LTS gần đây nhất. Vì vậy, chúng tôi đang cố gắng bắt đầu các dịch vụ mới dựa trên phiên bản Java này.
Tuy nhiên, hình ảnh Docker cơ sở cho Java 11 lớn hơn nhiều so với tương đương với Java 8:
openjdk:8-jre-alpine
: 84 MBopenjdk:11-jre-slim
: 283 MB
(Tôi chỉ xem xét OpenJDK chính thức và hình ảnh nhẹ nhất cho mỗi phiên bản Java.)
Đào sâu hơn đã phát hiện ra những "điều" sau:
những
openjdk:11-jre-slim
hình ảnh sử dụng hình ảnh cơ bảndebian:sid-slim
. Điều này mang lại 2 vấn đề:cái này lớn hơn 60 MB
alpine:3.8
các phiên bản Debian
sid
không ổn định
các
openjdk-11-jre-headless
gói cài đặt trong hình ảnh là lớn hơn 3 lần so vớiopenjdk8-jre
(bên trong chạy Docker container):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/
Đi sâu hơn tôi phát hiện ra "gốc" của sự nặng nề này - đó là
modules
tệp của JDK:# ls -lhG /usr/lib/jvm/java-11-openjdk-amd64/lib/modules 135M /usr/lib/jvm/java-11-openjdk-amd64/lib/modules
Vì vậy, bây giờ các câu hỏi đã đến:
Tại sao
alpine
không được sử dụng nữa làm hình ảnh cơ sở cho hình ảnh mỏng Java 11?Tại sao phiên bản sid không ổn định được sử dụng cho hình ảnh Java LTS?
Tại sao gói mỏng / không đầu / JRE cho OpenJDK 11 lại lớn như vậy so với gói OpenJDK 8 tương tự?
- Đây là những gì các module tập tin mà mang 135 MB trong OpenJDK 11?
CẬP NHẬT : như một giải pháp cho những thách thức này, người ta có thể sử dụng câu trả lời này: ứng dụng Java 11 làm hình ảnh docker