Không có Oracle JDK cho docker?


15
REPOSITORY          TAG       IMAGE ID       CREATED             SIZE
an-image            1         X              26 seconds ago      279 MB

khi hình ảnh docker sẽ được chạy, thông báo sau được hiển thị:

No java installations was detected.
Please go to http://www.java.com/getjava/ and download

Khi Oracle JDK được triển khai, kích thước hình ảnh của docker tăng hơn gấp đôi!

REPOSITORY          TAG       IMAGE ID       CREATED             SIZE
an-image            2         X              26 seconds ago      666 MB

Thảo luận

Khi "Không có Oracle JDK cho docker", chỉ một số liên kết đến hình ảnh docker có chứa docker được trả về. Khi Oracle JDK được triển khai trong hình ảnh docker, kích thước sẽ tăng hơn gấp đôi. Tôi muốn giữ hình ảnh docker càng nhỏ càng tốt, nhưng Oracle JDK dường như lớn hơn hình ảnh của chính nó!

Câu hỏi

Không có Oracle JDK cho docker?


@peter cứ thoải mái nhảy vào chatops nếu bạn muốn thảo luận về nó :)
Tensibai

Câu trả lời:


20

Không. Bởi vì bạn không thể phân phối Oracle JDK hoặc JRE, giấy phép có hiệu lực không cho phép phân phối . Khi được phân phối bởi một bên thứ ba (được nhúng với ứng dụng của bạn), tất cả trách nhiệm đối với nó không hoạt động là thuộc về bên đó. Đây là lý do tại sao bạn sẽ không tìm thấy Oracle JDK / JRE trên bất kỳ cơ quan đăng ký Docker công khai nào, hoặc trong bất kỳ kho lưu trữ gói Linux nào cho vấn đề đó.

Bạn có thể tạo hình ảnh của riêng mình và cài đặt Oracle JDK hoặc JRE bằng gói webupd8team / java cho Ubuntu / Debian.

Và nếu bạn đang sử dụng Alpine Linux , bài đăng trên blog này sẽ giải thích những phụ thuộc nào là bắt buộc và liên kết đến StackOverflow để biết hướng dẫn cài đặt.

Cập nhật : Oracle có hình ảnh Docker chính thức trên Docker Store ngay bây giờ. https://bloss.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers

Liên kết với Docker Store Hình ảnh Java của Oracle - https://store.docker.com/images/oracle-serverjre-8



Tôi sẽ không dựa vào nó có sẵn lâu dài. Như tôi đã viết, giấy phép từ Oracle không cho phép phân phối công khai nó - chỉ có Oracle mới có thể phân phối JDK hoặc JRE của họ. Về cơ bản, kho lưu trữ này là bất hợp pháp và rất có thể sẽ biến mất.
Evgeny

Những gì bạn có thể làm là sử dụng Dockerfiles của họ trên GitHub để lấy hình ảnh Docker của riêng bạn với Java. Ví dụ github.com/anapsix/docker-alpine-java/blob/master/8/121b13/jdk/...
Evgeny

Và một khi hình ảnh docker được tạo ra tôi có được phép lưu trữ nó trong registry docker riêng của chúng tôi không?
030

1
Đúng. Giấy phép cấm phân phối công khai JDK / JRE ở dạng nhị phân.
Evgeny

8

Vì docker không phải là một hệ điều hành, nên không có JDK cho docker.

Theo tôi hiểu câu hỏi của bạn, đó là một JDK đầy đủ quá lớn so với mong muốn của bạn, trong trường hợp này bạn có thể thử chuyển sang chỉ JRE và chỉ bao gồm các thư viện cần thiết.

JDK là từ viết tắt của Java Development Kit, JRE là từ viết tắt của Java Runtime Engine. Bởi "sự lười biếng" do sự phức tạp để liệt kê mọi phụ thuộc cần thiết, không ai chỉ rút xuống các thư viện cần thiết, nhưng đó là cách để đi nếu bạn muốn giảm kích thước cài đặt xuống mức tối thiểu nghiêm ngặt.

Một cách dễ sử dụng hơn có thể loại bỏ một số thứ được cài đặt đang chiếm nhiều dung lượng:

/usr/lib/jvm/jdk1.8.0_101$ du -hs *
776K    bin
4.0K    COPYRIGHT
5.7M    db
208K    include
4.9M    javafx-src.zip
187M    jre
133M    lib
4.0K    LICENSE
2.0M    man
4.0K    README.html
4.0K    release
21M     src.zip
108K    THIRDPARTYLICENSEREADME-JAVAFX.txt
176K    THIRDPARTYLICENSEREADME.txt

Có hai * src.zip có thể bị xóa, chúng sẽ không được sử dụng và như bạn có thể thấy thư mục lib có kích thước bằng một nửa và trong đó bạn có một loạt những thứ bạn không thực sự cần:

/usr/lib/jvm/jdk1.8.0_101$ du -hs lib/*
120K    lib/amd64
1.2M    lib/ant-javafx.jar
18M     lib/ct.sym
160K    lib/dt.jar
20K     lib/ir.idl
36K     lib/javafx-mx.jar
400K    lib/jconsole.jar
12K     lib/jexec
60M     lib/missioncontrol
4.0K    lib/orb.idl
8.0K    lib/packager.jar
2.4M    lib/sa-jdi.jar
18M     lib/tools.jar
34M     lib/visualvm

Bạn có thể không gặp sự cố khi xóa missoncontrol trên máy chủ, tôi giả sử bạn cũng có thể thoát khỏi visualvm, bạn sẽ phải kiểm tra xem bạn có cần gì trong thư mục lib này không, nhưng tôi không thể biết mà không biết ứng dụng của bạn ..

Một điều bạn nên làm trong dockerfile của mình trong khi cài đặt oracle jdk là xóa .tar.gztệp đã tải xuống có kích thước tương đương với thư mục kết quả vì .jarcác tệp đã được nén, tar.gz chỉ ở đó để "đóng gói" chúng.

Bạn phải thực hiện tất cả điều này trong cùng một RUNlệnh, kết hợp với &&để tránh thêm các lớp mà bạn sẽ không xóa kích thước bằng cách xóa các tệp khỏi lớp trước đó.


3

Không có triển khai Oracle JDK chính thức do Docker cung cấp. Docker được sử dụng để hỗ trợ thư viện Java của riêng họ trên hub.docker.com, nhưng họ không chấp nhận việc triển khai OpenJDK thực tế vì nó là "OpenJDK dành riêng cho nó kể từ khi nó được giới thiệu lần đầu tiên". Lý luận của họ:

Vì tất cả các bản phân phối Linux chính ngược dòng đều không muốn phân phối lại Java Java trong các kênh phân phối của riêng họ, chúng tôi đã chọn theo dõi chúng. Xem các tài liệu tham khảo dưới đây về cách mỗi phân phối không phân phối Oracle Java.

Vì vậy, nếu bạn muốn giữ hình ảnh Docker của mình càng nhỏ càng tốt, thay vào đó hãy xem xét sử dụng OpenJDK. Có kho lưu trữ Dockerfile OpenJDK chính thức hoặc bạn chỉ có thể sử dụng docker pull openjdk. Dockerfile "dễ chạy" cơ bản cho OpenJDK 7 như sau (lấy từ trang web được liệt kê trong câu trước):

FROM openjdk:7
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN javac Main.java
CMD ["java", "Main"]

1
Không có Oracle JDK chính thức? Điều đó có vẻ hơi không chính xác, hoặc ít nhất là phrased không chính xác.
Evgeny

1
@Evgeny Tôi đồng ý, tôi giả sử mục đích là để nói: "Không có ảnh Docker chính thức bao gồm cả Oracle JDK từ Oracle", có lẽ chỉ là một "Docker" mất tích giữa JDK và thực hiện ...
Tensibai

Rất tiếc, vâng tôi có ý làm cho Docker đó cụ thể. Tôi đã sửa câu trả lời của tôi.
Peter G
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.