डॉकर, यह क्या है और उद्देश्य क्या है


111

मैंने कुछ दिन पहले डॉकटर के बारे में सुना है और उस पार जाना चाहता था।

लेकिन वास्तव में, मुझे नहीं पता कि इस "कंटेनर" का उद्देश्य क्या है?

कंटेनर क्या है?

क्या यह विकास के लिए समर्पित एक आभासी मशीन की जगह ले सकता है?

कंपनियों में डॉकर का उपयोग करने का, सरल शब्दों में, उद्देश्य क्या है? मुख्य फायदा?



मुझे यह आसान लगता है shivab.com/blog/docker/2019/01/10/…
illusionist

जवाबों:


115

वीएम: वीएम सॉफ्टवेयर का उपयोग करना, उदाहरण के लिए, उबंटू को विंडोज के अंदर स्थापित किया जा सकता है। और वे दोनों एक ही समय में चलेंगे। यह एक पीसी के निर्माण की तरह है, अपने मुख्य घटकों जैसे सीपीयू, रैम, डिस्क, नेटवर्क कार्ड आदि के साथ, एक ऑपरेटिंग सिस्टम के भीतर और उन्हें इकट्ठा करने के लिए काम करता है जैसे कि यह एक वास्तविक पीसी था। इस तरह, वर्चुअल पीसी एक वास्तविक पीसी के अंदर एक "अतिथि" बन जाता है जो अपने ऑपरेटिंग सिस्टम के साथ होता है, जिसे होस्ट कहा जाता है।

कंटेनर: यह ऊपर के समान है, लेकिन एक संपूर्ण ऑपरेटिंग सिस्टम का उपयोग करने के बजाय, इसने इसका न्यूनतम संस्करण बनाने के लिए वर्चुअल OS के "अनावश्यक" घटकों को काट दिया। यह LXC (लिनक्स कंटेनर) के निर्माण की ओर ले जाता है। यह वीएम मशीनों की तुलना में तेज़ है।

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

(ध्यान दें कि डॉकर के मामले में कोई अतिथि ओएस आवश्यक नहीं है)


1
मैंने डॉकटर के विकास-तैनाती वर्कफ़्लो के बारे में संसाधनों की तलाश करने की कोशिश की, लेकिन मुझे कुछ भी नहीं मिला। उदाहरण के लिए दें मुझे लारवेल + कोणीय 4 के साथ एक लैम्पप वातावरण है। क्या मैं अपने साथियों के लिए एक निश्चित फ़ाइल साझा कर सकता हूँ? अगर मैं एक कंटेनर के अंदर रखता हूं तो मैं एप्लिकेशन स्रोत (php html js / ts) को कैसे संपादित कर सकता हूं? क्या हम अभी भी अपने सोर्स कोड पर git / svn का उपयोग कर सकते हैं?
अवल

13
VM का अर्थ "वर्चुअल मशीन" है। इसे "वीएम मशीन" कहने की आवश्यकता नहीं है क्योंकि तब यह "वर्चुअल मशीन मशीन" बन जाती है। :)
Dzhuneyt

32

[ध्यान दें, यह उत्तर लिनक्स कंटेनरों पर केंद्रित है और अन्य ऑपरेटिंग सिस्टम पर पूरी तरह लागू नहीं हो सकता है। ]

कंटेनर क्या है?

यह एक ऐप है : एक कंटेनर अनुप्रयोगों को चलाने का एक तरीका है जो एक दूसरे से अलग-थलग हैं। कई ऑपरेटिंग सिस्टम को चलाने के लिए हार्डवेयर का वर्चुअलाइजेशन करने के बजाय, कंटेनर कई एप्लिकेशन को चलाने के लिए ऑपरेटिंग सिस्टम के वर्चुअलाइजेशन पर भरोसा करते हैं। इसका मतलब है कि आप VM की तुलना में एक ही हार्डवेयर पर अधिक कंटेनर चला सकते हैं क्योंकि आपके पास केवल OS की एक प्रति चल रही है, और आपको अपने ऐप के प्रत्येक उदाहरण के लिए मेमोरी और CPU कोर को प्रचारित करने की आवश्यकता नहीं है। किसी भी अन्य ऐप की तरह, जब एक कंटेनर को सीपीयू या मेमोरी की आवश्यकता होती है, तो यह उन्हें आवंटित करता है, और फिर उन्हें तब किया जाता है, जब अन्य ऐप्स को बाद में उन्हीं सीमित संसाधनों का उपयोग करने की अनुमति मिलती है।

वे कर्नेल नेमस्पेस का लाभ उठाते हैं : प्रत्येक कंटेनर को डिफ़ॉल्ट रूप से एक वातावरण मिलेगा जहां निम्नलिखित नाम दिए गए हैं:

  • माउंट: फाइल सिस्टम, /कंटेनर में से अलग होगा/ में होस्ट ।
  • PID: प्रोसेस आईडी, कंटेनर में pid 1 आपका लॉन्च किया गया अनुप्रयोग है, यह pid होस्ट से देखने पर अलग होगा।
  • नेटवर्क: कंटेनर अपने स्वयं के लूपबैक इंटरफ़ेस (127.0.0.1) और डिफ़ॉल्ट रूप से एक निजी आईपी के साथ चलते हैं। डॉकर अपने निजी लान में एक साथ कई कंटेनरों को जोड़ने के लिए लिनक्स ब्रिज नेटवर्क जैसी तकनीकों का उपयोग करता है।
  • IPC: इंटरप्रोसेस संचार
  • यूटीएस: इसमें होस्टनाम शामिल है
  • उपयोगकर्ता: आप वैकल्पिक रूप से होस्ट के सभी उपयोगकर्ता आईडी को ऑफ़सेट कर सकते हैं

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

और अन्य लिनक्स सुरक्षा उपकरण : कंटेनर कंटेनर के अंदर अन्य उपयोगकर्ताओं को सीमित करने के लिए SELinux, AppArmor, Capabilities, और Seccomp जैसे अन्य सुरक्षा सुविधाओं का भी उपयोग करते हैं, रूट उपयोगकर्ता सहित, कंटेनर से बचने में सक्षम होते हैं या मेजबान को नकारात्मक रूप से प्रभावित करते हैं।

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

क्या यह विकास के लिए समर्पित एक आभासी मशीन की जगह ले सकता है?

यह निर्भर करता है : यदि आपके विकास का वातावरण लिनक्स चल रहा है, और आपको या तो हार्डवेयर उपकरणों तक पहुंच की आवश्यकता नहीं है, या भौतिक हार्डवेयर तक सीधी पहुंच होना स्वीकार्य है, तो आपको लिनक्स कंटेनर में माइग्रेशन मिलेगा। एक डॉकटर कंटेनर के लिए आदर्श लक्ष्य वेब आधारित एपीआई (जैसे एक बाकी ऐप) जैसे एप्लिकेशन हैं, जो आप नेटवर्क के माध्यम से एक्सेस करते हैं।

कंपनियों में डॉकर का उपयोग करने का, सरल शब्दों में, उद्देश्य क्या है? मुख्य फायदा ?

देव या ऑप्स : डॉकर को आमतौर पर दो रास्तों में से एक वातावरण में लाया जाता है। अधिक तेजी से विकसित होने और स्थानीय रूप से अपने आवेदन का परीक्षण करने के तरीके की तलाश करने वाले डेवलपर्स, और वर्चुअल मशीनों की तुलना में कम हार्डवेयर पर अधिक कार्यभार चलाने के लिए संचालन करना संभव होगा।

या देवोप्स : आदर्श लक्ष्यों में से एक डॉक का लाभ उठाने के लिए तुरंत CI / CD परिनियोजन उपकरण से, एप्लिकेशन को संकलित करना और तुरंत एक छवि बनाना जो कि विकास, CI, ठेस, आदि के लिए तैनात है, कंटेनर अक्सर एप्लिकेशन को स्थानांतरित करने के लिए समय कम करते हैं। कोड चेक-इन से लेकर परीक्षण के लिए उपलब्ध होने तक, डेवलपर्स को अधिक कुशल बनाता है। और जब ठीक से डिजाइन किया जाता है, तो वही छवि जिसे डेवलपर्स और सीआई उपकरण द्वारा परीक्षण और अनुमोदित किया गया था, उत्पादन में तैनात किया जा सकता है। चूंकि उस छवि में सभी एप्लिकेशन निर्भरताएं शामिल हैं, इसलिए उत्पादन में कुछ टूटने का जोखिम जो विकास में काम करता है, काफी कम हो जाता है।

स्केलेबिलिटी : कंटेनरों का एक अंतिम मुख्य लाभ जिसका मैं उल्लेख करूंगा कि वे क्षैतिज स्केलेबिलिटी को ध्यान में रखकर बनाए गए हैं। जब आपके पास भारी भार के तहत स्टेटलेस ऐप्स होते हैं, तो कंटेनर उनके छोटे छवि आकार और कम ओवरहेड के कारण बड़े पैमाने पर आसान और तेज़ होते हैं। इस कारण से आप Google और नेटफ्लिक्स जैसी कई बड़ी वेब आधारित कंपनियों द्वारा उपयोग किए जा रहे कंटेनरों को देखते हैं।


2
+1 मैं आपके उत्तर से पूरी तरह सहमत हूं, विशेष रूप से "यह वर्चुअल मशीन (एस) को बदल सकता है" भाग के साथ। मुझे बहुत सारी टिप्पणियां दिखाई देती हैं, जिसमें इस बात पर जोर दिया गया है कि डॉकर एक वर्चुअल मशीन नहीं है, लेकिन, अनुभव से, कई उपयोग के मामलों के लिए यह ठीक भी काम करता है या एक बेहतर विकल्प भी है। जब आपने कहा कि "भौतिक हार्डवेयर तक सीधी पहुँच के लिए स्वीकार्य" का क्या अर्थ है?
टायर

2
@ एंट्रेस यदि आपका होस्ट लिनक्स है, तो आप सीधे लिनक्स कंटेनर में डिवाइस माउंट कर सकते हैं। मैंने इसे ध्वनि उपकरणों के साथ किया है, लेकिन इसमें कुछ भी / देव जोड़ा जा सकता है। यह कुछ कंटेनर अलगाव को बायपास करता है, लेकिन डेस्कटॉप ऐप जैसे विशिष्ट कार्यों के लिए समझ में आता है।
BMitch

बहुत शानदार है। मैंने उस बारे नही सोचा।
टायर

@ बिच: बहुत साफ और सुंदर जवाब, thx !! मुझे लगता है कि मैं अब कल्पना कर सकता हूं कि कंटेनर क्या है..कभी भी, यह बहुत अच्छा होगा यदि आप अपने जवाब को अपडेट कर सकते हैं कि कंटेनर docker से कैसे संबंधित है? कंटेनर और वीएम की तुलना में, डॉक हाइपरविज़र के बराबर है?
रहलगा_देव

1
डॉकर एक उपकरण है जो कंटेनरों को कार्यान्वित करता है, साथ ही डॉकटर हब और डेस्कटॉप वातावरणों पर रजिस्ट्री जैसे बाकी आवश्यक पारिस्थितिक तंत्र प्रदान करता है जो लिनक्स कंटेनरों को चलाने के लिए VM को एम्बेड करते हैं।
BMitch

6

कुछ सवाल कुछ दिन पहले मेरे सिर पर मंडरा रहे थे और मैंने इसे प्राप्त करने के बाद क्या पाया, आइए बहुत सरल शब्दों में समझते हैं।

क्यों हर कोई आवेदन वास्तुकला और विकास की मौजूदा प्रक्रिया के साथ ठीक लगता है जब docker और कंटेनरों के बारे में सोचना होगा !!

चलिए एक उदाहरण लेते हैं कि हम एक एप्लिकेशन विकसित कर रहे हैं जिसमें नोडज, मोंगोडीबी, रेडिस, रैबिटएमक्यू आदि सेवाएं [आप किसी अन्य सेवाओं के बारे में सोच सकते हैं] का उपयोग कर रहे हैं।

अब हम इन निम्नलिखित बातों का सामना अनुप्रयोग विकास और शिपिंग प्रक्रिया में समस्याओं के रूप में करते हैं यदि हम डॉकिंग अनुप्रयोगों के डॉकटर या अन्य विकल्पों के अस्तित्व के बारे में भूल जाते हैं।

  1. ओएस के साथ सेवाओं (नोडजे, मोंगोडीबी, रेडिस, रैबिटएमक्यू आदि) की संगतता ( ओएस के साथ संगत संस्करण खोजने के बाद भी, अगर कुछ अप्रत्याशित संस्करणों से संबंधित होता है, तो हमें फिर से संगतता को नजरअंदाज करने और उसे ठीक करने की आवश्यकता है)।

  2. यदि दो सिस्टम घटकों को ओएस में आवेदन में विभिन्न संस्करणों के साथ एक पुस्तकालय / निर्भरता की आवश्यकता होती है (पुस्तकालय और निर्भरता संस्करण मुद्दे के कारण आवेदन के अप्रत्याशित व्यवहार के मामले में हर बार एक दृष्टिकोण की आवश्यकता होती है)।

  3. सबसे महत्वपूर्ण बात, अगर नया व्यक्ति टीम में शामिल होता है, तो हमें नए वातावरण को स्थापित करने में बहुत मुश्किल होती है, व्यक्ति को निर्देशों के बड़े सेट का पालन करना पड़ता है और अंत में पर्यावरण को स्थापित करने के लिए सैकड़ों कमांड चलाता है और इसमें समय और मेहनत लगती है।

    लोगों को यह सुनिश्चित करना होगा कि वे ओएस के सही संस्करण का उपयोग कर रहे हैं और ओएस के साथ सेवाओं की संगतता की जांच कर रहे हैं। और प्रत्येक डेवलपर को स्थापित करते समय प्रत्येक बार इसका पालन करना होगा।

  4. हमारे पास देव, परीक्षण और उत्पादन जैसे अलग-अलग परिवेश हैं । यदि एक डेवलपर एक ओएस का उपयोग करने में सहज है और अन्य अन्य ओएस के साथ सहज है और इस मामले में, हम गारंटी नहीं दे सकते कि हमारा आवेदन इन दो अलग-अलग स्थितियों में एक ही तरह से व्यवहार करेगा। ।

ये सभी अनुप्रयोगों के विकास , परीक्षण और शिपिंग की प्रक्रिया में हमारे जीवन को कठिन बनाते हैं ।

इसलिए हमें ऐसी चीज की आवश्यकता है जो संगतता समस्या को संभालती है और हमें अन्य घटकों को प्रभावित किए बिना किसी भी सिस्टम घटक में परिवर्तन और संशोधन करने की अनुमति देती है।

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

यहां छवि विवरण दर्ज करें

कैसे मुद्दों के ऊपर हल करती है-

  1. हम अलग-अलग में प्रत्येक सेवा घटक (NodeJS, MongoDB, Redis, RabbitMQ) चला सकते हैं कंटेनरों अपने स्वयं के साथ निर्भरता और पुस्तकालयों एक ही ओएस में लेकिन अलग अलग वातावरण के साथ।

  2. हमें केवल एक बार docker कॉन्फ़िगरेशन चलाना है, फिर हमारे सभी टीम डेवलपर्स सरल docker रन कमांड के साथ शुरुआत कर सकते हैं, हमने यहां बहुत समय और प्रयासों को बचाया है :)

इसलिए कंटेनरों को सभी आश्रितों और पुस्तकालयों के साथ अलग-अलग वातावरण दिया जाता है, जो अपनी प्रक्रिया और नेटवर्किंग इंटरफेस और माउंट के साथ एक साथ बंडल किए जाते हैं

सभी कंटेनर समान ओएस संसाधनों का उपयोग करते हैं इसलिए वे कम समय लेते हैं और सीपीयू का उपयोग कम हार्डवेयर लागत के साथ कुशलतापूर्वक करते हैं।

मुझे उम्मीद है कि यह मददगार होगा।


2

मुझे यथासंभव सरल उत्तर प्रदान करने का प्रयास करें:

लेकिन वास्तव में, मुझे नहीं पता कि इस "कंटेनर" का उद्देश्य क्या है?

कंटेनर क्या है?

सीधे शब्दों में कहें: एक पैकेज जिसमें सॉफ्टवेयर है । विशेष रूप से, एक आवेदन और उसके सभी निर्भरता एक साथ बंडल। एक नियमित, गैर-डॉक्यूमेंट किए गए एप्लिकेशन वातावरण को सीधे ओएस पर झुका दिया जाता है, जबकि डॉकर कंटेनर ओएस एब्स्ट्रक्शन लेयर है।

और एक कंटेनर एक छवि से अलग होता है जिसमें एक कंटेनर एक छवि का रनटाइम उदाहरण है - ऑब्जेक्ट OOP से परिचित होने की स्थिति में वस्तुओं के रनटाइम इंस्टेंसेस के समान।

क्या यह विकास के लिए समर्पित एक आभासी मशीन की जगह ले सकता है?

VM और Docker कंटेनर दोनों वर्चुअलाइजेशन तकनीक हैं, जिसमें वे सिस्टम इंफ्रास्ट्रक्चर के शीर्ष पर अमूर्तता प्रदान करते हैं।

एक VM एक हाइपरविजर के माध्यम से संसाधनों को होस्ट करने के लिए वर्चुअल एक्सेस के साथ एक पूर्ण "अतिथि" ऑपरेटिंग सिस्टम चलाता है। इसका मतलब यह है कि वीएम अक्सर पर्यावरण को अधिक संसाधनों के साथ प्रदान करता है, जिसकी वास्तव में आवश्यकता होती है। सामान्य तौर पर, वीएम अधिकांश अनुप्रयोगों की तुलना में अधिक संसाधनों के साथ एक वातावरण प्रदान करते हैं। इसलिए, कंटेनर एक हल्के वजन की तकनीक है। दोनों अलग-अलग समस्याओं का समाधान करते हैं।

कंपनियों में डॉकर का उपयोग करने का, सरल शब्दों में, उद्देश्य क्या है? मुख्य फायदा?

कन्ट्रोसिएशन माइक्रोसर्विस के साथ हाथ से जाता है। बड़े अनुप्रयोग बनाने वाली छोटी सेवाओं का अक्सर परीक्षण किया जाता है और डॉकटर कंटेनरों में चलाया जाता है। यह निरंतर परीक्षण को आसान बनाता है।

इसके अलावा, क्योंकि डॉकर कंटेनर केवल पढ़े जाते हैं, वे एक प्रमुख DevOps सिद्धांत को लागू करते हैं: उत्पादन सेवाओं को अनछुए रहना चाहिए

उनके उपयोग के कुछ सामान्य लाभ:

  • सेवाओं के महान अलगाव
  • महान प्रबंधनीयता के रूप में कंटेनरों में वह सब कुछ होता है जो ऐप की आवश्यकता होती है
  • कार्यान्वयन प्रौद्योगिकी का समापन (कंटेनरों में)
  • VMs की तुलना में कुशल संसाधन उपयोग (हल्के वजन वाले ओएस वर्चुअलाइजेशन के कारण)
  • तेजी से तैनाती
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.