ไม่มี Oracle JDK สำหรับนักเทียบท่าหรือไม่?


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

เมื่อภาพนักเทียบท่าจะทำงานข้อความต่อไปนี้จะปรากฏขึ้น:

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

เมื่อปรับใช้ Oracle JDK ขนาดภาพของนักเทียบท่าจะเพิ่มขึ้นเป็นสองเท่า!

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

อภิปรายผล

เมื่อ "ไม่มี Oracle JDK สำหรับนักเทียบท่า" จะถูก googled เฉพาะบางลิงค์ไปยังรูปภาพนักเทียบท่าที่มีนักเทียบท่าจะถูกส่งกลับ เมื่อปรับใช้ Oracle JDK ในอิมเมจ docker ขนาดจะเพิ่มขึ้นเป็นสองเท่า ฉันต้องการให้ภาพนักเทียบท่าเล็กที่สุดเท่าที่จะเป็นไปได้ แต่ Oracle JDK ดูเหมือนว่าจะใหญ่กว่าภาพตัวเอง!

คำถาม

ไม่มี Oracle JDK สำหรับนักเทียบท่าหรือไม่?


@ Peter รู้สึกอิสระที่จะกระโดดในchatopsถ้าคุณต้องการที่จะหารือเกี่ยวกับมัน :)
Tensibai

คำตอบ:


20

เลขที่เพราะคุณไม่สามารถแจกจ่ายออราเคิล JDK หรือ JRE ใบอนุญาตในผลกระทบที่ไม่อนุญาตให้มีการกระจาย เมื่อจัดจำหน่ายโดยบุคคลที่สาม (ฝังตัวอยู่กับแอปของคุณ) ความรับผิดชอบทั้งหมดที่เกิดขึ้นนั้นไม่ได้เกิดขึ้นกับบุคคลนั้น นี่คือเหตุผลที่คุณจะไม่พบ Oracle JDK / JRE ในรีจิสเตอร์ Docker สาธารณะใด ๆ หรือในที่เก็บแพคเกจ Linux สำหรับเรื่องนั้น

คุณสามารถสร้างรูปภาพของคุณเองและติดตั้ง Oracle JDK หรือ JRE โดยใช้แพ็คเกจ webupd8team / javaสำหรับ Ubuntu / Debian

และถ้าคุณใช้อัลไพน์ลินุกซ์โพสต์บล็อกนี้จะอธิบายถึงสิ่งที่ต้องพึ่งพาและลิงก์ไปยัง StackOverflowสำหรับคำแนะนำในการติดตั้ง

อัปเดต : Oracle มีอิมเมจ Docker อย่างเป็นทางการในDocker Storeทันที https://blogs.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers

ลิงก์ไปยังDocker Store Oracle Java Image - https://store.docker.com/images/oracle-serverjre-8



ฉันจะไม่พึ่งพามันนาน ตามที่ฉันเขียนใบอนุญาตจาก Oracle ไม่อนุญาตให้เผยแพร่แบบสาธารณะ - เฉพาะ Oracle เท่านั้นที่สามารถแจกจ่าย JDK หรือ JRE ของตนได้ ดังนั้นโดยทั่วไปพื้นที่เก็บข้อมูลนี้ผิดกฎหมายและส่วนใหญ่จะหายไป
Evgeny

สิ่งที่คุณสามารถทำได้คือใช้งานDockerfileบน GitHub เพื่อสร้างอิมเมจ Docker ด้วย Java ตัวอย่างเช่นgithub.com/anapsix/docker-alpine-java/blob/master/8/121b13/jdk/…
Evgeny

และเมื่อสร้างภาพนักเทียบท่าฉันได้รับอนุญาตให้จัดเก็บในรีจิสทรีนักเทียบท่าส่วนตัวของเราหรือไม่
030

1
ใช่. ใบอนุญาตห้ามมิให้เผยแพร่ JDK / JRE แบบสาธารณะในรูปแบบไบนารี
Evgeny

8

เนื่องจากนักเทียบท่าไม่ใช่ระบบปฏิบัติการจึงไม่มี JDK สำหรับนักเทียบท่า

เมื่อฉันเข้าใจคำถามของคุณแล้ว JDK แบบเต็มมีขนาดใหญ่เกินไปสำหรับความปรารถนาของคุณในกรณีนี้คุณอาจลองเปลี่ยนเป็น JRE และรวมเฉพาะไลบรารีที่จำเป็นเท่านั้น

JDK เป็นตัวย่อของ Java Development Kit, JRE เป็นตัวย่อสำหรับ Java Runtime Engine โดย "lazyness" เนื่องจากความซับซ้อนในการแสดงรายการการพึ่งพาที่จำเป็นทุกคนไม่มีใครตัดลงไปที่ไลบรารีที่จำเป็นเท่านั้น แต่นั่นเป็นวิธีที่จะไปหากคุณต้องการลดขนาดที่ติดตั้งไว้ให้น้อยที่สุด

วิธีที่สามารถใช้งานได้มากขึ้นสามารถตัดสิ่งที่ติดตั้งบางส่วนซึ่งใช้พื้นที่มาก:

/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

มีสอง * src.zip ซึ่งสามารถลบออกได้พวกเขาจะไม่ใช้งานและเนื่องจากคุณสามารถเห็นไดเรกทอรี lib มีขนาดครึ่งหนึ่งและภายในนั้นคุณมีสิ่งต่าง ๆ ที่คุณไม่ต้องการ:

/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

คุณทำได้โดยไม่มีปัญหาลบ missoncontrol บนเซิร์ฟเวอร์ฉันคิดว่าคุณสามารถกำจัด visualvm ได้ด้วยคุณจะต้องตรวจสอบว่าคุณต้องการบางสิ่งบางอย่างในไดเรกทอรี lib นี้หรือไม่ แต่ฉันบอกไม่ได้ว่าไม่รู้แอปของคุณหรือไม่

สิ่งหนึ่งที่คุณควรทำในไฟล์ dockerfile ของคุณขณะติดตั้ง oracle jdk คือการลบ.tar.gzไฟล์ที่ดาวน์โหลดซึ่งมีขนาดเท่ากับคร่าวๆของไดเร็กตอรี่ที่เป็น.jarไฟล์ที่ถูกบีบอัดแล้ว tar.gz จะอยู่ที่ "แพ็คเกจ"

คุณต้องทำทั้งหมดนี้ในRUNคำสั่งเดียวกันผูกมัดกับ&&เพื่อหลีกเลี่ยงการเพิ่มเลเยอร์ที่คุณจะไม่ลบขนาดโดยการลบไฟล์จากเลเยอร์ก่อนหน้า


3

ไม่มีการนำ Oracle JDK มาใช้อย่างเป็นทางการโดย Docker Docker ใช้เพื่อสนับสนุนไลบรารี Javaของตัวเองใน hub.docker.com แต่พวกเขาเลิกใช้งานเพื่อสนับสนุนการใช้งาน OpenJDK จริงเนื่องจากเป็น "OpenJDK-specific ตั้งแต่เปิดตัวครั้งแรก" เหตุผลของพวกเขา

เนื่องจากดิสทริบิวชั่นลีนุกซ์หลัก ๆ ทั้งหมดไม่ต้องการเผยแพร่ Oracle Java ในช่องทางการจำหน่ายของตนเองอีกต่อไปเราจึงเลือกที่จะติดตามพวกเขา ดูการอ้างอิงด้านล่างว่าแต่ละการแจกจ่ายไม่กระจาย Oracle Java อย่างไร

ดังนั้นหากคุณต้องการรักษาภาพ Docker ให้เล็กที่สุดให้ลองใช้ OpenJDK แทน มีอย่างเป็นทางการเป็นที่เก็บ OpenJDK Dockerfiledocker pull openjdkหรือคุณก็สามารถใช้ พื้นฐาน "ง่ายต่อการเรียกใช้" Dockerfile สำหรับ OpenJDK 7 มีดังต่อไปนี้ (นำมาจากเว็บไซต์ที่ปรากฏในประโยคก่อนหน้า):

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

1
ไม่มี Oracle JDK อย่างเป็นทางการหรือไม่ ดูเหมือนว่าจะค่อนข้างไม่ถูกต้องหรืออย่างน้อยก็ใช้ประโยคไม่ถูกต้อง
Evgeny

1
@Evgeny ผมเห็นด้วยผมถือว่าเป็นความตั้งใจที่จะพูดว่า: "ไม่มีภาพนักเทียบท่าอย่างเป็นทางการรวมถึง Oracle JDK จาก Oracle" อาจจะเป็นเพียงแค่ "นักเทียบท่า" ขาดหายไประหว่าง JDK และการดำเนินการ ...
Tensibai

โอ๊ะโอใช่ฉันตั้งใจจะทำให้ Docker นั้นเจาะจง ฉันแก้ไขคำตอบของฉันแล้ว
Peter G
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.