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


23

कंटेनरों के बारे में कुछ सवाल हैं , जैसे:

मेरे सवाल :

  • वास्तव में एक "कंटेनर" (DevOps के संदर्भ में) क्या है?
  • उनका उपयोग क्यों किया जाता है?

आसानी से समझाया गया shivab.com/blog/docker/2019/01/10/…
illusionist

जवाबों:


18

एक कंटेनर के बारे में जानने वाली पहली बात यह है:

यह, सबसे पहले और सबसे महत्वपूर्ण, एक प्रक्रिया है।

एक बार जब यह समझ में आ जाता है, तो कोई यह समझना शुरू कर सकता है कि कंटेनर आभासी मशीनों के साथ तुलना और विपरीत कैसे करते हैं। कंटेनर और वीएम दोनों अपने मेजबानों से अलगाव साझा करते हैं। अलगाव की विधि महत्वपूर्ण अंतर है।

कंटेनर प्रक्रिया ओएस कर्नेल होस्ट पर एक्सटेंशन का उपयोग करती है, जिस पर वे खुद को अन्य प्रक्रियाओं से अलग करने के लिए चलाते हैं। अन्य एक्सटेंशन भी डिस्क और संसाधन अलगाव प्रदान करते हैं। कंटेनर होस्ट ओएस के साथ अपनी कर्नेल और मेमोरी साझा करते हैं।

वर्चुअल मशीन्स अपने मेजबानों से VMs को अलग करने के लिए एक हाइपरविजर का उपयोग करती हैं । यह सॉफ़्टवेयर की एक परत है जो हार्डवेयर में "मेहमान" (वीएम) से संसाधनों के लिए अनुरोध करता है। डिस्क अलगाव को डिस्क वर्चुअलाइजेशन द्वारा प्रदान किया जाता है। VMs होस्ट के साथ कर्नेल साझा नहीं करते हैं- वे अपने स्वयं के कर्नेल को VM में समर्पित मेमोरी स्पेस में लोड करते हैं।

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

परिचालन अंतर चपलता में हैं: कंटेनर एक सामान्य प्रक्रिया के रूप में तेजी से शुरू और बंद हो जाते हैं। VMs "भारी" हैं, समर्पित संसाधनों की आवश्यकता होती है जो उनके लिए अलग सेट होते हैं और शुरू होने और बंद होने में अधिक समय लेते हैं।

कंटेनर एक DevOps ऑपरेटिंग मॉडल को बहुत लचीलापन प्रदान करते हैं:

  • कंटेनर सॉफ्टवेयर घटक निर्भरता को अलग करते हैं। डेवलपर्स यह सुनिश्चित करने के लिए कंटेनरों का उपयोग कर सकते हैं कि एक एप्लिकेशन मॉड्यूल उनके विकास मशीनों पर भी क्यूए / यूए / उत्पादन में कार्य करेगा
  • कंटेनर संचार करने के लिए सॉफ़्टवेयर-परिभाषित नेटवर्किंग का उपयोग करते हैं
  • कंटेनर की परिभाषाएं घोषणात्मक हैं और स्रोत-नियंत्रित हो सकती हैं
  • कंटेनर प्रबंधन प्रणाली (कुबेरनेट्स, डीसी / ओएस, झुंड) हार्डवेयर संसाधन (कंप्यूट / रैम / स्टोरेज) पूल और गतिशील पैमाने पर कंटेनरों का प्रबंधन कर सकती है

1
मैं आपके 3 अंतिम गोली बिंदु को vSphere पर भी करता हूं, योनि के लिए धन्यवाद :)
Tensibai

8

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

एक पुराना, गैर-कंटेनर-सक्षम, लिनक्स कर्नेल प्रक्रियाओं को समवर्ती रूप से चलाने में सक्षम है। सिस्टम की कुछ विशेषताएँ प्रक्रिया करने के लिए निजी हैं, जैसे प्रक्रिया वातावरण या प्रक्रिया मेमोरी: इन विशेषताओं के मालिक केवल प्रक्रिया और ऑपरेटिंग सिस्टम ही इस डेटा तक पहुँच प्राप्त करने में सक्षम हैं। (कुछ पीएस कार्यान्वयन की तरह, कई खामियां हैं, लेकिन यह अनिवार्य रूप से सच है!) कुछ अन्य विशेषताओं को प्रक्रियाओं के बीच साझा किया जाता है, उदाहरण के लिए फाइलसिस्टम और नेटवर्क इंटरफेस।

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

बेशक, यह सिर्फ एक बहुत ही मोटे स्पष्टीकरण है, लेकिन मुझे उम्मीद है कि यह इस विचार को स्पष्ट करने में मदद करता है कि कंटेनर क्या हैं। अब, वे किसके लिए अच्छे हैं?

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

कंटेनर आधारित प्रौद्योगिकियां इसके लिए सुविधाजनक हैं:

  • स्केलेबल जटिल तैनाती का वर्णन करें ।
  • एप्लिकेशन डेवलपर्स को उत्पादन वातावरण के समान वातावरण प्रदान करें।
  • अपरिवर्तनीय सर्वर पैटर्न को लागू करें, क्योंकि सॉफ्टवेयर आर्टिफैक्ट आमतौर पर एक पूर्ण ऑपरेटिंग-सिस्टम का वर्णन करते हैं, न कि केवल एक आवेदन पैकेज।

(जैसा कि आप वर्चुअल बॉक्स जैसी अन्य वर्चुअलाइजेशन तकनीकों से परिचित हैं, आप टिप्पणी कर सकते हैं कि ये प्रौद्योगिकियां ऊपर दिए गए तीन बिंदुओं को आसानी से संबोधित कर सकती हैं। आजकल, वर्चुअलाइजेशन तकनीकों का काफी छोटा स्पेक्ट्रम है, और हम उनकी लोकप्रियता के सवाल की तुलना कर सकते हैं। कंप्यूटर भाषाओं की लोकप्रियता के साथ कुछ संदर्भ: यह संभवतः प्रत्येक व्यक्ति के समाधान की तकनीकी खूबियों पर निर्भर करता है, लेकिन बहुत सारे कारकों पर भी निर्भर करता है कि मैं "मौका" लेबल करूंगा।)


1
अब लिनक्स तक सीमित नहीं है, विंडोज़ 16 में एक ही तरह की क्षमता है
तेंसिबाई

1
मेरे दावे का समर्थन करने के लिए लिंक docs.microsoft.com/en-us/virtualization/windowscontainers/…
Tensibai

7

आमतौर पर कंटेनरों का मतलब डॉकटर कंटेनरों की तरह होता है, जिन्होंने नाम को लोकप्रिय बनाया है

मैं वहाँ docker परिभाषा से उद्धृत करता हूं:

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

रूट नामकरण में लिनक्स कंटेनर (lxc) आता है जिसका लक्ष्य अपने मेजबान सिस्टम से एक प्रक्रिया को अलग करना था, पहला लक्ष्य मेजबान सिस्टम को लेने के लिए प्रक्रिया के समझौता से बचने का था।

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

दूसरा फायदा यह है कि यह एक ही निर्भरता के साथ एक से अधिक अनुप्रयोगों का उपयोग करने की अनुमति देता है बिना इसके पर्यावरण चर को भारी रूप से अलग किए बिना ताकि यह सही लोड हो।

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

एक वर्चुअल मशीन हार्डवेयर स्तर पर आभासी है, और आप एक ऑपरेटिंग सिस्टम चलाते हैं, एक कंटेनर OS स्तर पर वर्चुअल होता है, और आपका एक प्रोसेस भीतर चलता है।


1
हम्म, इसलिए एक वर्चुअलबॉक्स-छवि (या जो कुछ भी वर्चुअलबॉक्स में कहा जाता है) भी एक "कंटेनर" के रूप में अर्हता प्राप्त कर सकता है, या मुझे समझ में नहीं आता है?
Pierre.Vriens

देखा, मैं सवाल का एक हिस्सा भूल गया था, जवाब बढ़ाते हुए अंतर जोड़ा।
तेंसीबाई

3

से एडब्ल्यूएस की परिभाषा :

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

कंटेनरीकरण किसी विशेष कार्य / वातावरण को करने के लिए आवश्यक सभी आवश्यक चीजों को पैक कर रहा है ताकि यह आत्मनिर्भर हो और किसी भी प्लेटफॉर्म पर चलाया जा सके, जो सामान को स्थापित करने और स्थापित करने के लिए बहुत दर्द उठाता है।

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