क्या doer के लिए कोई 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

जब ओरेकल JDK को तैनात किया जाता है तो डॉकटर का आकार दोगुना से अधिक हो जाता है!

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

विचार-विमर्श

जब "Doer के लिए कोई Oracle JDK नहीं होता है" तो docker की छवि के कुछ लिंक को हटा दिया जाता है, जिसमें docker होते हैं, वापस कर दिए जाते हैं। जब ओरेकल जेडडीके को डॉक इमेज में तैनात किया जाता है तो आकार दोगुना से अधिक हो जाता है। मैं डॉकरों की छवियों को यथासंभव छोटा रखना चाहता हूं, लेकिन ओरेकल जेडडीके खुद को छवि से बड़ा लगता है!

सवाल

क्या doer के लिए कोई Oracle JDK नहीं है?


अगर आप इस पर चर्चा करना चाहते हैं तो @peter बेझिझक कूद सकते हैं :)
Tensibai

जवाबों:


20

नहीं, क्योंकि आप Oracle JDK या JRE वितरित नहीं कर सकते हैं, वास्तव में लाइसेंस वितरण की अनुमति नहीं देता है । जब किसी तीसरे पक्ष द्वारा वितरित किया जाता है (आपके ऐप के साथ एम्बेडेड) तो उस पर काम नहीं करने के लिए सभी देयता उस पार्टी पर होती है। यही कारण है कि आप Oracle JDK / JRE को किसी भी सार्वजनिक डॉकर रजिस्ट्रियों पर या उस मामले के लिए किसी भी लिनक्स पैकेज रिपॉजिटरी में नहीं पाएंगे।

आप अपनी खुद की छवि बना सकते हैं, और Ubuntu JDK के लिए webupd8team / java पैकेज का उपयोग करके Oracle JDK या JRE स्थापित कर सकते हैं ।

और अगर आप अल्पाइन लिनक्स का उपयोग कर रहे हैं, तो यह ब्लॉग पोस्ट बताती है कि कौन सी निर्भरताएं आवश्यक हैं, और स्थापना निर्देशों के लिए स्टैकऑवरफ्लो से लिंक

अपडेट : ओरेकल की अब डॉकरी स्टोर पर एक आधिकारिक डॉकर छवि है । https://blogs.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers

डॉकर स्टोर ओरेकल जावा इमेज का लिंक - https://store.docker.com/images/oracle-serverjre-8



मैं लंबे समय के लिए उपलब्ध होने पर भरोसा नहीं करता। जैसा कि मैंने लिखा है, ओरेकल से लाइसेंस सार्वजनिक रूप से इसे वितरित करने की अनुमति नहीं देता है - केवल ओरेकल अपने जेडीके या जेआरई को कानूनी रूप से वितरित कर सकता है। तो मूल रूप से, यह भंडार अवैध है और सबसे अधिक संभावना गायब हो जाएगा।
एवगेनी

आप क्या कर सकते हैं, Dockerfileअपने स्वयं के डॉक की छवि को जावा के साथ प्राप्त करने के लिए गीथहब पर उनके एस का उपयोग करें । उदाहरण के लिए github.com/anapsix/docker-alpine-java/blob/master/8/121b13/jdk/...
एव्जेनी

और एक बार docker की इमेज बन जाने के बाद मुझे इसे हमारे प्राइवेट डॉकटर रजिस्ट्री में स्टोर करने की अनुमति है?
030

1
हाँ। लाइसेंस JDK / JRE को बाइनरी रूप में सार्वजनिक रूप से वितरित करने से प्रतिबंधित करता है।
एवगेनी

8

जैसा कि docker एक ऑपरेटिंग सिस्टम नहीं है, नहीं docker के लिए कोई JDK नहीं है।

जैसा कि मैंने आपके प्रश्न को समझा है, यह है कि आपकी इच्छाओं के लिए एक पूर्ण JDK बहुत बड़ा है, इस मामले में आप केवल JRE पर स्विच करने का प्रयास कर सकते हैं और केवल आवश्यक लाइब्रेरी शामिल कर सकते हैं।

JDK जावा डेवलपमेंट किट का संक्षिप्त नाम है, JRE जावा रनटाइम इंजन के लिए एक है। प्रत्येक आवश्यक निर्भरता को सूचीबद्ध करने की जटिलता के कारण "आलसीता" से कोई भी केवल आवश्यक पुस्तकालयों के लिए नीचे पट्टी नहीं करता है, लेकिन अगर आप स्थापित आकार को कम से कम सख्त करना चाहते हैं तो यह जाने का तरीका है।

एक अधिक प्रयोग करने योग्य तरीका कुछ स्थापित चीजों को छीन सकता है जो बहुत अधिक स्थान ले रही हैं:

/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 हैं, जिन्हें हटाया जा सकता है, वे उपयोग के नहीं होंगे, और जैसा कि आप देख सकते हैं कि लिबर डायरेक्टरी आधे आकार की है और इसके भीतर आपके पास उन चीजों का एक गुच्छा है जिनकी आपको वास्तव में आवश्यकता नहीं है:

/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 को हटा सकते हैं, मुझे लगता है कि आप विज़ुअल्म से भी छुटकारा पा सकते हैं, आपको यह जांचना होगा कि क्या आपको इस आवश्यक निर्देशिका में कुछ चाहिए, लेकिन मैं आपके ऐप को जाने बिना नहीं बता सकता हूं।

Oracle jdk को स्थापित करते समय आपको अपने dockerfile में एक काम करना चाहिए, डाउनलोड की गई .tar.gzफ़ाइल को हटाने के लिए है जो लगभग उसी आकार की है जिसके परिणामस्वरूप .jarफ़ाइलें पहले से ही संपीड़ित हैं, tar.gz बस उन्हें "पैकेज" करने के लिए है।

आपको यह सब उसी RUNकमांड में करना है, &&जिससे आप लेयर जोड़ने से बचेंगे, जहां आप पिछली लेयर से फाइल्स निकालकर साइज नहीं हटाएंगे।


3

डॉकर द्वारा प्रदान किया गया कोई आधिकारिक ओरेकल जेडडीके कार्यान्वयन नहीं है। Docker hub.docker.com पर अपने स्वयं के जावा पुस्तकालय का समर्थन करता था, लेकिन उन्होंने इसे वास्तविक OpenJDK कार्यान्वयन के पक्ष में चित्रित किया क्योंकि यह "OpenJDK- विशिष्ट था क्योंकि यह पहली बार पेश किया गया था"। उनका तर्क:

चूंकि सभी प्रमुख अपस्ट्रीम लिनक्स वितरण अपने स्वयं के वितरण चैनलों में ओरेकल जावा को पुनर्वितरित करने के लिए तैयार नहीं हैं, इसलिए हमने उनका पालन करने के लिए चुना है। नीचे दिए गए संदर्भ देखें कि प्रत्येक वितरण ओरेकल जावा को कैसे वितरित नहीं करता है।

इसलिए यदि आप अपनी डॉकर छवि को यथासंभव छोटा रखना चाहते हैं, तो इसके बजाय OpenJDK का उपयोग करने पर विचार करें। एक आधिकारिक OpenJDK Dockerfile भंडार है या आप बस उपयोग कर सकते हैं docker pull openjdk। OpenJDK 7 के लिए मूल "आसान चलाना" डॉकरफाइल निम्नानुसार है (पिछले वाक्य में सूचीबद्ध वेबसाइट से लिया गया है):

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

1
कोई आधिकारिक ओरेकल JDK नहीं है? ऐसा लगता है कि कुछ गलत है, या कम से कम गलत तरीके से प्रकाशित किया गया है।
एव्जेनी

1
@ मैं सहमत हूँ, मुझे लगता है कि यह कहने का इरादा है: "ओरेकल से ओरेकल जेडडीके सहित कोई आधिकारिक डॉकटर छवि नहीं है", शायद
जेडीके

उफ़, हाँ मेरा मतलब था कि डॉक को विशिष्ट बनाना। मैंने अपना उत्तर ठीक कर लिया है।
पीटर जी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.