डॉकर छवियां - प्रकार। स्लिम बनाम स्लिम-स्ट्रेच बनाम स्ट्रेप बनाम अल्पाइन


110

मैं एक जावा ऐप बनाने के लिए एक डॉकटर इमेज लेने के लिए देख रहा हूं और उपलब्ध ओपनजेडके इमेज के वेरिएंट को देख रहा हूं। मैं यहां https://github.com/docker-library/openjdk/tree/master/8/jdk देख रहा हूं और अल्पाइन, स्लिम और विंडो देख रहा हूं । इनमें से क्या अंतर हैं और प्रत्येक संस्करण क्या देता है?



FROMआपके द्वारा दिए गए लिंक में डॉकरफाइल्स की पंक्तियों को पढ़ना भी जानकारीपूर्ण है। अल्पाइन छवियां डेबियन-आधारित छवियों की तुलना में बहुत छोटी हैं, लेकिन विभिन्न तरीकों से संगतता मुद्दों का सामना भी कर सकती हैं।
डेविड भूलभुलैया

जवाबों:


106

प्रति docker लाइब्रेरी डॉक्स (उद्धरण और लिंक नीचे), यहां एक सारांश है:

  • openjdk:<version>

डिफैक्टो छवि। अनिश्चित होने पर इसका उपयोग करें।

  • openjdk:<version>-buster, openjdk:<version>-stretchऔरopenjdk:<version>-jessie

buster, jessieया डेबियन कीstretch रिलीज़ के लिए सुइट कोड नाम हैं और संकेत देते हैं कि कौन सी छवि जारी है।

  • openjdk:<version>-alpine

इसी तरह, यह छवि अल्पाइन लिनक्स पर आधारित है, इस प्रकार यह बहुत छोटी आधार छवि है। यह अनुशंसा की जाती है यदि आपको एक छवि आकार की आवश्यकता है जितना संभव हो उतना छोटा है। चेतावनी यह है कि यह कुछ असामान्य काम करता है, लेकिन अधिकांश सॉफ्टवेयर के लिए समस्या नहीं होनी चाहिए। संदेह में, नीचे दिए गए आधिकारिक डॉक्स की जांच करें।

  • openjdk:<version>(12 बाद से), openjdk:<version>-oracleऔरopenjdk:<version>-oraclelinux7

के साथ शुरू openjdk:12डिफ़ॉल्ट छवि के साथ-साथ -oracleऔर -oraclelinux7वेरिएंट अधिकारी पर आधारित होते हैं ओरेकल लिनक्स 7 छवि । डिफ़ॉल्ट छवि में OpenJDK binaries के साथ-साथ -oracleऔर -oraclelinux7वेरिएंट ओरेकल द्वारा निर्मित कर रहे हैं और से प्राप्त कर रहे हैं OpenJDK समुदाय

  • openjdk:<version>-slim

इस छवि में केवल जावा को चलाने के लिए आवश्यक न्यूनतम पैकेज हैं (और उदाहरण के लिए, यूआई-संबंधित जावा पुस्तकालयों में से कई को याद कर रहे हैं)। जब तक आप एक वातावरण में काम कर रहे हैं, जहां केवलopenjdk छवि तैनात किया जाएगा और आप स्थान की कमी है, डिफ़ॉल्ट छवि यह एक से अधिक की सिफारिश की है।

  • openjdk:<version>-windowsservercore

यह चित्र विंडोज सर्वर कोर ( microsoft/windowsservercore) पर आधारित है ।



पूर्ण डॉक्स ( यहां नीचे दिखाया गया संस्करण , यहां नवीनतम संस्करण ):

छवि वेरिएंट

openjdkछवियों कई जायके, एक विशिष्ट उपयोग के लिए डिज़ाइन किया गया प्रत्येक में आते हैं।

openjdk:<version>

यह डिफैक्टो छवि है। यदि आप इस बारे में अनिश्चित हैं कि आपकी आवश्यकताएं क्या हैं, तो आप शायद इस एक का उपयोग करना चाहते हैं। यह दोनों को दूर फेंक कंटेनर के रूप में उपयोग करने के लिए डिज़ाइन किया गया है (अपने स्रोत कोड को माउंट करें और अपने ऐप को शुरू करने के लिए कंटेनर शुरू करें), साथ ही साथ अन्य छवियों को बनाने के लिए आधार।

इनमें से कुछ टैगों में जेसी या खिंचाव जैसे नाम हो सकते हैं। ये डेबियन की रिलीज़ के लिए सुइट कोड नाम हैं और संकेत करते हैं कि कौन सी छवि जारी है।

openjdk:<version>-alpine

यह छवि लोकप्रिय अल्पाइन लिनक्स परियोजना पर आधारित है , जो alpineआधिकारिक छवि में उपलब्ध है । अल्पाइन लिनक्स अधिकांश वितरण बेस छवियों (~ 5 एमबी) की तुलना में बहुत छोटा है, और इस तरह सामान्य रूप से बहुत स्लिमर छवियों की ओर जाता है।

यह वैरिएंट अत्यधिक अनुशंसित है जब अंतिम छवि का आकार जितना संभव हो उतना छोटा है। नोट करने के लिए मुख्य चेतावनी यह है कि यह glibc और दोस्तों के बजाय musl libc का उपयोग करता है , इसलिए कुछ सॉफ्टवेयर उनके libc आवश्यकताओं की गहराई के आधार पर मुद्दों में चला सकते हैं। हालाँकि, अधिकांश सॉफ़्टवेयर में यह समस्या नहीं होती है, इसलिए यह संस्करण आमतौर पर एक बहुत ही सुरक्षित विकल्प होता है। देखें इस हैकर समाचार टिप्पणी थ्रेड मुद्दों है कि पैदा हो सकता है और अल्पाइन आधारित छवियों का उपयोग करने के कुछ समर्थक / चोर तुलना की अधिक चर्चा के लिए।

छवि का आकार कम करने के लिए, यह अल्पाइन-आधारित छवियों में शामिल होने के लिए अतिरिक्त संबंधित उपकरणों (जैसे कि gitया bash) के लिए असामान्य है । इस छवि को आधार के रूप में उपयोग करते हुए, अपनी ज़रूरत की चीज़ों को अपने डॉकरफ़ाइल में जोड़ें ( यदि आप अपरिचित हैं तो पैकेजों को कैसे स्थापित किया जाए, इसके उदाहरणों के लिए alpineछवि विवरण देखें )।

openjdk:<version>-windowsservercore

यह चित्र विंडोज सर्वर कोर ( microsoft/windowsservercore) पर आधारित है । जैसे, यह केवल उन जगहों पर काम करता है जो कि छवि करता है, जैसे कि विंडोज 10 प्रोफेशनल / एंटरप्राइज (एनिवर्सरी एडिशन) या विंडोज सर्वर 2016।

विंडोज पर डॉक कैसे प्राप्त करें, इसके बारे में जानकारी के लिए, कृपया Microsoft द्वारा प्रदान किया गया प्रासंगिक "क्विक स्टार्ट" गाइड देखें:

openjdk:<version>-slim

यह छवि -headlessOpenJDK के पैकेज को स्थापित करती है और इसलिए UI से संबंधित जावा पुस्तकालयों और डिफ़ॉल्ट टैग में निहित कुछ सामान्य पैकेजों को याद कर रही है। इसमें केवल जावा चलाने के लिए आवश्यक न्यूनतम पैकेज हैं। जब तक आप एक वातावरण में काम कर रहे हैं, जहां केवलopenjdk छवि तैनात किया जाएगा और आप स्थान की कमी है, हम अत्यधिक इस भंडार की डिफ़ॉल्ट छवि का उपयोग करें।


1

एक बेस डॉकटर छवि चुनें जो आपकी आवश्यकताओं के अनुसार हो और कृपया ध्यान रखें कि छवि का आकार एक महत्वपूर्ण पहलू भी है।

छवि को कंटेनर बनाने के निर्देशों के एक सेट के रूप में माना जा सकता है। डॉकर में, एक छवि दूसरी छवि से विरासत में मिली (या आधारित) हो सकती है, जो आधार के शीर्ष पर अतिरिक्त निर्देश जोड़ती है। प्रत्येक छवि में कई परतें होती हैं, जो प्रभावी रूप से अपरिवर्तनीय होती हैं।

प्लास ने सही जावा डॉकर बिल्ड फ्लो आर्टिकल को क्राफ्टिंग पढ़ा ।

डॉकर छवि का आकार वास्तव में बहुत महत्वपूर्ण है। आकार पर प्रभाव पड़ता है:

  • नेटवर्क विलंबता : वेब पर डॉकर छवि को स्थानांतरित करने की आवश्यकता है
  • भंडारण : इन सभी बिट्स को कहीं स्टोर करने की आवश्यकता है
  • सेवा की उपलब्धता और लोच : डोकर शेड्यूलर का उपयोग करते समय, जैसे कुबेरनेट्स, झुंड, घुमंतू, डीसी / ओएस या अन्य (अनुसूचक मेजबानों के बीच कंटेनर को स्थानांतरित कर सकते हैं)
  • सुरक्षा : क्या आप वास्तव में, मैं वास्तव में अपने जावा अनुप्रयोग के लिए अपने सभी CVE कमजोरियों के साथ libpng पैकेज की आवश्यकता है?
  • विकास की चपलता : छोटे डॉकर चित्र == तेजी से निर्माण समय और तेजी से तैनाती


जावा एप्लिकेशन को चलाने के लिए आपको कम से कम JRE की आवश्यकता होती है। उदाहरण के लिए, एक स्प्रिंग प्रोजेक्ट के लिए आपकी छवि इस पर आधारित हो सकती है slim Alpine Linux with OpenJDK JRE:

#simple dockerFile for java app:

#here we are using Base Alpine Linux based image with OpenJDK JRE only
#For Java 8, try this
FROM openjdk:8-jre-alpine

#For Java 11, try this
#FROM adoptopenjdk/openjdk11:alpine-jre

#copy application WAR/JAR (with libraries inside)
COPY target/spring-boot-*.war/jar yourName.war/jar
# specify default command
CMD ["/usr/bin/java", "-jar", "/yourName.war/jar"]

इसके अलावा, आप docker history yourImageNameअपनी छवि बनाने वाली सभी परतों (और उनके आकार) को देखने के लिए उपयोग कर सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.