Apakah tidak ada Oracle JDK untuk buruh pelabuhan?


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

ketika gambar buruh pelabuhan akan dijalankan, pesan berikut ini ditampilkan:

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

Ketika Oracle JDK digunakan, ukuran gambar buruh pelabuhan lebih dari dua kali lipat!

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

Diskusi

Ketika "Apakah tidak ada Oracle JDK untuk buruh pelabuhan" googled hanya beberapa tautan ke gambar buruh pelabuhan yang berisi buruh pelabuhan dikembalikan. Ketika Oracle JDK digunakan dalam gambar buruh pelabuhan ukurannya lebih dari dua kali lipat. Saya ingin menyimpan gambar buruh pelabuhan sekecil mungkin, tetapi Oracle JDK tampaknya lebih besar dari gambar itu sendiri!

Pertanyaan

Apakah tidak ada Oracle JDK untuk buruh pelabuhan?


@peter merasa bebas untuk melompat ke obrolan jika Anda ingin membahasnya :)
Tensibai

Jawaban:


20

Tidak. Karena Anda tidak dapat mendistribusikan Oracle JDK atau JRE, lisensi yang berlaku tidak mengizinkan distribusi . Ketika didistribusikan oleh pihak ketiga (disematkan dengan aplikasi Anda) semua tanggung jawab untuk itu tidak berfungsi adalah pihak itu. Inilah sebabnya mengapa Anda tidak akan menemukan Oracle JDK / JRE di salah satu pendaftar Docker publik, atau dalam repositori paket Linux apa pun.

Anda dapat membuat gambar Anda sendiri, dan menginstal Oracle JDK atau JRE menggunakan paket webupd8team / java untuk Ubuntu / Debian.

Dan jika Anda menggunakan Alpine Linux , posting blog ini menjelaskan dependensi mana yang diperlukan, dan tautan ke StackOverflow untuk instruksi instalasi.

Pembaruan : Oracle memiliki gambar Docker resmi di Docker Store sekarang. https://blogs.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers

Tautan ke Docker Store Oracle Java Image - https://store.docker.com/images/oracle-serverjre-8



Saya tidak akan bergantung pada itu tersedia lama. Seperti yang saya tulis, lisensi dari Oracle tidak memungkinkan untuk mendistribusikannya secara publik - hanya Oracle yang dapat secara legal mendistribusikan JDK atau JRE mereka. Jadi pada dasarnya, repositori ini ilegal dan kemungkinan besar akan hilang.
Evgeny

Apa yang dapat Anda lakukan, adalah menggunakan Dockerfiledi GitHub untuk mendapatkan gambar Docker Anda sendiri dengan Java. Misalnya github.com/anapsix/docker-alpine-java/blob/master/8/121b13/jdk/…
Evgeny

Dan setelah gambar buruh pelabuhan dibuat saya diizinkan untuk menyimpannya di registri buruh pelabuhan pribadi kami?
030

1
Iya. Lisensi melarang untuk mendistribusikan JDK / JRE secara publik dalam bentuk biner.
Evgeny

8

Karena buruh pelabuhan bukan sistem operasi, tidak ada JDK untuk buruh pelabuhan.

Ketika saya memahami pertanyaan Anda, itu adalah JDK penuh terlalu besar untuk keinginan Anda, dalam hal ini Anda dapat mencoba beralih ke JRE saja dan hanya menyertakan perpustakaan yang diperlukan.

JDK adalah singkatan dari Java Development Kit, JRE adalah satu untuk Java Runtime Engine. Dengan "lazyness" karena kerumitan untuk mendaftar setiap ketergantungan yang diperlukan, tidak ada yang menghapus hanya ke perpustakaan yang diperlukan, tetapi itu adalah cara untuk pergi jika Anda ingin mengurangi ukuran yang diinstal ke minimum yang ketat.

Cara yang lebih bermanfaat dapat menghapus beberapa hal yang diinstal yang menghabiskan banyak ruang:

/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

Ada dua * src.zip yang dapat dihapus, mereka tidak akan berguna, dan seperti yang Anda lihat direktori lib adalah setengah ukuran dan di dalamnya Anda memiliki banyak hal yang tidak Anda perlukan:

/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

Anda dapat tanpa masalah menghapus missoncontrol di server, saya berasumsi Anda dapat menyingkirkan visualvm juga, Anda harus memeriksa apakah Anda memerlukan sesuatu di direktori lib ini, tapi saya tidak tahu tanpa mengetahui aplikasi Anda ..

Satu hal yang harus Anda lakukan di dockerfile saat memasang oracle jdk adalah menghapus .tar.gzfile yang diunduh yang kira-kira sama ukurannya dengan direktori yang dihasilkan karena .jarfile sudah dikompresi, tar.gz ada di sana untuk "mengemas" mereka.

Anda harus melakukan semua ini dalam RUNperintah yang sama , chaining dengan &&untuk menghindari menambahkan lapisan di mana Anda tidak akan menghapus ukuran dengan menghapus file dari lapisan sebelumnya.


3

Tidak ada implementasi Oracle JDK resmi yang disediakan oleh Docker. Docker digunakan untuk mendukung perpustakaan Java mereka sendiri di hub.docker.com, tetapi mereka menolaknya demi implementasi OpenJDK yang sebenarnya karena "khusus-OpenJDK sejak pertama kali diperkenalkan". Alasan mereka:

Karena semua distribusi Linux hulu utama tidak mau mendistribusikan Oracle Java di saluran distribusi mereka sendiri, kami telah memilih untuk mengikuti mereka. Lihat referensi di bawah tentang bagaimana setiap distribusi tidak mendistribusikan Oracle Java.

Jadi jika Anda ingin menyimpan gambar Docker sekecil mungkin, pertimbangkan untuk menggunakan OpenJDK sebagai gantinya. Ada repositori OpenJDK Dockerfile resmi atau Anda bisa menggunakannya docker pull openjdk. Dockerfile 7 "mudah dijalankan" untuk OpenJDK 7 adalah sebagai berikut (diambil dari situs web yang tercantum dalam kalimat sebelumnya):

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

1
Tidak ada Oracle JDK resmi? Tampaknya agak salah, atau paling tidak diucapkan dengan tidak benar.
Evgeny

1
@ Evgeny Saya setuju, saya berasumsi maksudnya adalah untuk mengatakan: "Tidak ada gambar buruh pelabuhan resmi termasuk Oracle JDK dari Oracle", mungkin hanya "buruh pelabuhan" yang hilang antara JDK dan implementasi ...
Tensibai

Ups, ya saya bermaksud membuat Docker itu spesifik. Saya telah mengoreksi jawaban saya.
Peter G
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.