docker - वर्चुअल मशीन से डॉकर अलग कैसे है?




containers virtual-machine (13)

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

सॉफ़्टवेयर को एक डॉकर छवि (यदि यह सही शब्द है) को एक सतत उत्पादन वातावरण पर तैनात करने से आसान क्यों है?


1. हल्के वजन

यह शायद कई डॉकर शिक्षार्थियों के लिए पहली छाप है।

सबसे पहले, डॉकर छवियां आमतौर पर वीएम छवियों से छोटी होती हैं, जिससे इसे बनाना, कॉपी करना, साझा करना आसान बनाता है।

दूसरा, डॉकर कंटेनर कई मिलीसेकंड में शुरू हो सकते हैं, जबकि वीएम सेकंड में शुरू होता है।

2. स्तरित फ़ाइल सिस्टम

यह डॉकर की एक और प्रमुख विशेषता है। छवियों में परतें होती हैं, और विभिन्न छवियां परतों को साझा कर सकती हैं, इसे और भी अधिक स्थान-बचत और निर्माण के लिए तेज़ी से बना सकती हैं।

यदि सभी कंटेनर उबंटू को अपनी मूल छवियों के रूप में उपयोग करते हैं, तो प्रत्येक छवि की अपनी फ़ाइल प्रणाली नहीं होती है, लेकिन समान अंडरलाइन यूबंटू फाइलें साझा करती हैं, और केवल अपने स्वयं के एप्लिकेशन डेटा में भिन्न होती हैं।

3. साझा ओएस कर्नेल

प्रक्रियाओं के रूप में कंटेनर के बारे में सोचो!

मेजबान पर चल रहे सभी कंटेनर वास्तव में विभिन्न फाइल सिस्टम के साथ प्रक्रियाओं का एक गुच्छा है। वे एक ही ओएस कर्नेल साझा करते हैं, केवल सिस्टम लाइब्रेरी और निर्भरताओं को encapsulates।

यह ज्यादातर मामलों के लिए अच्छा है (कोई अतिरिक्त ओएस कर्नेल बरकरार नहीं है) लेकिन कंटेनरों के बीच सख्त अलगाव आवश्यक होने पर समस्या हो सकती है।

यह क्यों मायने रखता है?

ये सभी सुधार की तरह लगते हैं, क्रांति नहीं। खैर, मात्रात्मक संचय गुणात्मक परिवर्तन की ओर जाता है

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

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

यह बदलता है कि सेवाओं को कैसे वितरित किया जाता है। हम आवेदन चाहते हैं, लेकिन वीएम को बनाए रखना है (जो दर्द है और हमारे अनुप्रयोगों के साथ बहुत कम करना है)। डॉकर आपको अनुप्रयोगों पर ध्यान केंद्रित करता है और सब कुछ सुचारू बनाता है।


अच्छा जवाब कंटेनर बनाम वीएम की छवि प्रस्तुति प्राप्त करने के लिए, नीचे दिए गए एक को देखें।

Source


डॉकर अपनी सभी निर्भरताओं के साथ एक आवेदन encapsulates।

एक वर्चुअलाइज़र एक ओएस को एन्सेप्लेट करता है जो किसी भी अनुप्रयोग को चला सकता है जो सामान्य रूप से एक नंगे धातु मशीन पर चलाया जा सकता है।


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

एयूएफएस एक स्तरित फ़ाइल सिस्टम है, इसलिए आपके पास केवल एक हिस्सा और एक लेखन भाग हो सकता है जो एक साथ विलय हो जाता है। एक ऑपरेटिंग सिस्टम के सामान्य हिस्सों को केवल पढ़ने के लिए (और आपके सभी कंटेनर के बीच साझा किया जा सकता है) और फिर प्रत्येक कंटेनर को लिखने के लिए अपना माउंट दे सकता है।

तो, मान लें कि आपके पास 1 जीबी कंटेनर छवि है; यदि आप एक पूर्ण वीएम का उपयोग करना चाहते हैं, तो आपको अपने इच्छित वीएम की 1 जीबी गुणा x संख्या की आवश्यकता होगी। डॉकर और एयूएफएस के साथ आप सभी कंटेनरों के बीच 1 जीबी का बड़ा हिस्सा साझा कर सकते हैं और यदि आपके पास 1000 कंटेनर हैं तो आपके पास कंटेनर ओएस के लिए केवल 1 जीबी स्पेस हो सकता है (माना जाता है कि वे सभी एक ही ओएस छवि चला रहे हैं) ।

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

एक पूर्ण आभासी प्रणाली आमतौर पर शुरू करने में कुछ मिनट लगती है, जबकि डॉकर / एलएक्ससी / रनसी कंटेनर सेकंड लेते हैं, और अक्सर एक सेकंड से भी कम।

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

अधिक जानकारी के लिए, ब्लॉग पोस्ट के इस सेट को देखें जो एलएक्ससी कैसे काम करता है, यह समझाने का अच्छा काम करता है।

सॉफ़्टवेयर को एक डॉकर छवि (यदि यह सही शब्द है) को लगातार उत्पादन वातावरण में तैनात करने से आसान क्यों है?

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

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

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

टिप्पणियों से ...

दिलचस्प! मुझे लगता है कि मैं अभी भी "स्नैपशॉट [टिंग] ओएस" की धारणा से उलझन में हूं। ओएस की छवि बनाने के बिना, कोई कैसे करता है?

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


मुझे केन कोक्रैन का जवाब पसंद है।

लेकिन मैं अतिरिक्त दृष्टिकोण जोड़ना चाहता हूं, यहां विस्तार से शामिल नहीं है। मेरी राय में डॉकर पूरी प्रक्रिया में भी अलग है। वीएम के विपरीत, डॉकर हार्डवेयर के इष्टतम संसाधन साझाकरण के बारे में (केवल) नहीं है, इसके अलावा यह पैकेजिंग एप्लिकेशन के लिए "सिस्टम" प्रदान करता है (माइक्रोवेर्सेस के सेट के रूप में, अधिमानतः, लेकिन जरूरी नहीं)।

मेरे लिए यह आरपीएम, Debian पैकेज, Maven , एनपीएम + गिट जैसे डेवलपर-ओरिएंटेड टूल्स और Puppet , वीएमवेयर, ज़ेन जैसे ऑप्स टूल के बीच के अंतर में फिट बैठता है, आप इसे नाम देते हैं ...

सॉफ़्टवेयर को एक डॉकर छवि (यदि यह सही शब्द है) को लगातार उत्पादन वातावरण में तैनात करने से आसान क्यों है?

आपका प्रश्न कुछ सुसंगत उत्पादन वातावरण मानता है। लेकिन इसे लगातार कैसे बनाए रखें? पाइपलाइन में चरणों, सर्वर और अनुप्रयोगों की कुछ राशि (> 10) पर विचार करें।

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

तो इस से बचने के लिए एक ज्ञात पैटर्न है, तथाकथित अपरिवर्तनीय सर्वर । लेकिन अपरिवर्तनीय सर्वर पैटर्न प्यार नहीं था। ज्यादातर डॉकर्स की सीमाओं की वजह से जो डॉकर से पहले इस्तेमाल किया गया था। कई गीगाबाइट बड़ी छवियों से निपटने, उन बड़ी छवियों को चारों ओर ले जाने के लिए, एप्लिकेशन में कुछ फ़ील्ड बदलने के लिए, बहुत श्रमिक था। समझा जा सकता ...

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

और आखिरकार आप अपने लिनक्स लैपटॉप पर भी जटिल उत्पादन वातावरण को पुन: उत्पन्न करने में सक्षम होंगे (अगर आपको अपने मामले में काम नहीं करता है तो मुझे कॉल न करें;))

और निश्चित रूप से आप वीएम में डॉकर कंटेनर शुरू कर सकते हैं (यह एक अच्छा विचार है)। वीएम स्तर पर अपने सर्वर प्रावधान को कम करें। उपरोक्त सभी को डॉकर द्वारा प्रबंधित किया जा सकता है।

पीएस इस बीच डॉकर एलएक्ससी के बजाय अपने स्वयं के कार्यान्वयन "libcontainer" का उपयोग करता है। लेकिन एलएक्ससी अभी भी प्रयोग योग्य है।


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

डॉकर एक प्रक्रिया चलाने के लिए सिर्फ एक शानदार तरीका है, न कि वर्चुअल मशीन।

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

एक डॉकर कंटेनर केवल एक प्रक्रिया (और इसके बच्चों) है जो मेजबान सिस्टम के कर्नेल के अंदर शेष प्रक्रियाओं से cgroups का उपयोग करके cgroups किया जाता है। मेजबान पर ps aux चलाकर आप वास्तव में अपने डॉकर कंटेनर प्रक्रियाओं को देख सकते हैं। उदाहरण के लिए, apache2 "कंटेनर में" शुरू करना मेजबान पर एक विशेष प्रक्रिया के रूप में apache2 शुरू कर रहा है। इसे मशीन पर अन्य प्रक्रियाओं से विभाजित किया गया है। यह ध्यान रखना महत्वपूर्ण है कि आपके कंटेनर आपके कंटेनरकृत प्रक्रिया के जीवनकाल के बाहर मौजूद नहीं हैं। जब आपकी प्रक्रिया मर जाती है, तो आपका कंटेनर मर जाता है। ऐसा इसलिए है क्योंकि डॉकर आपके कंटेनर के अंदर आपके आवेदन के साथ pid 1 को प्रतिस्थापित करता है ( pid 1 आमतौर पर इनिट सिस्टम है)। pid 1 बारे में यह अंतिम बिंदु बहुत महत्वपूर्ण है।

जहां तक ​​प्रत्येक कंटेनर प्रक्रियाओं द्वारा उपयोग की जाने वाली फाइल सिस्टम, डॉकर UnionFS छवियों का उपयोग करता है, जो आप एक docker pull ubuntu करते समय डाउनलोड कर रहे हैं। प्रत्येक "छवि" परतों और संबंधित मेटाडेटा की एक श्रृंखला है। लेयरिंग की अवधारणा यहां बहुत महत्वपूर्ण है। प्रत्येक परत केवल नीचे परत से एक बदलाव है। उदाहरण के लिए, जब आप डॉकर कंटेनर बनाते समय अपने डॉकरफ़ाइल में फ़ाइल हटाते हैं, तो आप वास्तव में केवल अंतिम परत के शीर्ष पर एक परत बनाते हैं जो कहता है "यह फ़ाइल हटा दी गई है"। संयोग से, यही कारण है कि आप अपने फाइल सिस्टम से एक बड़ी फाइल को हटा सकते हैं, लेकिन छवि अभी भी डिस्क स्पेस की एक ही मात्रा लेती है। वर्तमान में नीचे परतों में फ़ाइल अभी भी है। परतें स्वयं फाइलों के टैरबॉल हैं। आप इसे docker save --output /tmp/ubuntu.tar ubuntu और फिर cd /tmp && tar xvf ubuntu.tar । फिर आप चारों ओर एक नज़र डाल सकते हैं। उन सभी निर्देशिका जो लंबे हैंश की तरह दिखती हैं वास्तव में व्यक्तिगत परतें हैं। प्रत्येक में उस विशेष परत के बारे में जानकारी के साथ फाइलें ( layer.tar ) और मेटाडेटा ( layer.tar ) होती हैं। वे परतें केवल फाइल सिस्टम में परिवर्तनों का वर्णन करती हैं जिन्हें "मूल के शीर्ष पर" परत के रूप में सहेजा जाता है। "वर्तमान" डेटा को पढ़ते समय, फाइल सिस्टम डेटा को पढ़ता है जैसे कि यह केवल परिवर्तनों की शीर्षतम परतों पर देख रहा था। यही कारण है कि फ़ाइल को हटाया जाना प्रतीत होता है, भले ही यह अभी भी "पिछली" परतों में मौजूद है, क्योंकि फाइल सिस्टम केवल शीर्ष-परतों को देख रहा है। यह पूरी तरह से अलग कंटेनरों को अपनी फाइल सिस्टम परतों को साझा करने की अनुमति देता है, भले ही प्रत्येक कंटेनर में शीर्ष-परतों पर फाइल सिस्टम के साथ कुछ महत्वपूर्ण परिवर्तन हो सकते हैं। यह आपके कंटेनर अपनी मूल छवि परतों को साझा करते समय डिस्क स्थान का एक टन बचा सकता है। हालांकि, जब आप वॉल्यूम के माध्यम से मेजबान सिस्टम से अपने कंटेनर में निर्देशिकाओं और फ़ाइलों को माउंट करते हैं, तो वे वॉल्यूम्स यूनियनएफएस को "बायपास" करते हैं, इसलिए परतों में परिवर्तन संग्रहीत नहीं होते हैं।

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

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


ऐसे कई जवाब हैं जो मतभेदों पर अधिक विस्तृत व्याख्या करते हैं, लेकिन यहां मेरी बहुत संक्षिप्त व्याख्या है।

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

डॉकर में, कंटेनर मेजबान के साथ कर्नेल साझा करते हैं ; इसलिए यह हल्का वजन है और जल्दी से शुरू और बंद कर सकता है।

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

डॉकर यूनियन फाइल सिस्टम का उपयोग करता है .. डॉकर कंटेनरों द्वारा उपभोग की गई मेमोरी स्पेस को कम करने के लिए एक कॉपी-ऑन-राइट तकनीक का उपयोग करता है। यहां और पढ़ें


के संदर्भ में:-

"एक सतत उत्पादन वातावरण पर तैनाती की तुलना में एक डॉकर छवि को सॉफ़्टवेयर को तैनात करना क्यों आसान है?"

अधिकांश सॉफ़्टवेयर कई वातावरणों पर तैनात किए जाते हैं, आमतौर पर निम्न में से कम से कम तीन में से:

  1. व्यक्तिगत डेवलपर पीसी (ओं)
  2. साझा डेवलपर पर्यावरण
  3. व्यक्तिगत परीक्षक पीसी (ओं)
  4. साझा परीक्षण पर्यावरण
  5. क्यूए पर्यावरण
  6. यूएटी पर्यावरण
  7. लोड / प्रदर्शन परीक्षण
  8. लाइव स्टेजिंग
  9. उत्पादन
  10. पुरालेख

विचार करने के लिए निम्नलिखित कारक भी हैं:

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

जैसा कि आप देख सकते हैं कि किसी संगठन के लिए सर्वर की एक्स्ट्राप्रोलेटेड कुल संख्या शायद ही कभी एकल आंकड़ों में होती है, अक्सर ट्रिपल आंकड़ों में होती है और आसानी से काफी अधिक हो सकती है।

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

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


यहां बहुत सारे अच्छे तकनीकी उत्तर हैं जो वीएम और कंटेनर के साथ-साथ डॉकर की उत्पत्ति के बीच अंतरों पर स्पष्ट रूप से चर्चा करते हैं।

मेरे लिए वीएम और डॉकर के बीच मौलिक अंतर यह है कि आप अपने आवेदन के प्रचार को कैसे प्रबंधित करते हैं।

वीएम के साथ आप अपने आवेदन और इसकी निर्भरताओं को एक वीएम से अगले डीवी में यूएटी से पीआरडी तक बढ़ावा देते हैं।

  1. अक्सर इन वीएम के अलग-अलग पैच और पुस्तकालय होंगे।
  2. एक वीएम साझा करने के लिए कई अनुप्रयोगों के लिए असामान्य नहीं है। इसके लिए सभी अनुप्रयोगों के लिए विन्यास और निर्भरता प्रबंधन की आवश्यकता है।
  3. बैकआउट को वीएम में बदलावों को पूर्ववत करने की आवश्यकता है। या यदि संभव हो तो इसे बहाल करना।

डॉकर के साथ विचार यह है कि आप अपने आवेदन को अपने कंटेनर के अंदर पुस्तकालयों के साथ बंडल करते हैं और फिर पूरे कंटेनर को एक इकाई के रूप में बढ़ावा देते हैं ।

  1. कर्नेल के अलावा पैच और पुस्तकालय समान हैं।
  2. एक सामान्य नियम के रूप में प्रति कंटेनर केवल एक आवेदन है जो विन्यास को सरल बनाता है।
  3. बैकआउट में कंटेनर को रोकना और हटाना शामिल है।

तो वीएम के साथ सबसे मौलिक स्तर पर आप एप्लिकेशन और इसकी निर्भरताओं को अलग-अलग घटकों के रूप में बढ़ावा देते हैं जबकि डॉकर के साथ आप सब कुछ एक हिट में प्रचार करते हैं।

और हां, उन्हें प्रबंधित करने सहित कंटेनरों के साथ समस्याएं हैं हालांकि कुबेरनेट या डॉकर स्वार जैसे टूल कार्य को सरल बनाते हैं।


स्रोत: क्रिया में कुबर्नेट्स।


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

दूसरी तरफ डॉकर कंटेनर थोड़ा अलग हैं। हमारे पास सर्वर है। हमारे पास मेजबान ऑपरेटिंग सिस्टम है। लेकिन इसके बजाय एक हाइपरवाइजर , हमारे पास डॉकर इंजन है , इस मामले में। इस मामले में, हम अपने साथ एक अतिथि अतिथि ऑपरेटिंग सिस्टम नहीं ला रहे हैं। हम ऑपरेटिंग सिस्टम की एक बहुत पतली परत ला रहे हैं , और कर्नेल कार्यक्षमता प्राप्त करने के लिए कंटेनर मेजबान ओएस में बात कर सकता है। और यह हमें बहुत हल्का कंटेनर रखने की अनुमति देता है।

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

प्रत्येक कंटेनर सोचता है कि यह ऑपरेटिंग सिस्टम की अपनी प्रतिलिपि पर चल रहा है। इसे अपनी फाइल सिस्टम, अपनी रजिस्ट्री इत्यादि मिल गई है जो एक झूठ है। यह वास्तव में वर्चुअलाइज्ड किया जा रहा है।


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

डॉकर में, कंटेनर होस्ट होस्ट ओएस कर्नेल साझा करते हैं, जबकि वीएम में उनकी अपनी ओएस फाइलें होती हैं। पर्यावरण (ओएस) जिसमें आप एक अनुप्रयोग विकसित करते हैं, वही होगा जब आप इसे "परीक्षण" या "उत्पादन" जैसे विभिन्न सेवारत वातावरण में तैनात करते हैं।

उदाहरण के लिए, यदि आप पोर्ट 4000 पर चलने वाले वेब सर्वर को विकसित करते हैं, जब आप इसे अपने "परीक्षण" वातावरण पर तैनात करते हैं, तो उस पोर्ट का उपयोग पहले से ही किसी अन्य प्रोग्राम द्वारा किया जाता है, इसलिए यह काम करना बंद कर देता है। कंटेनरों में परतें हैं; ओएस में आपके द्वारा किए गए सभी परिवर्तन एक या अधिक परतों में सहेजे जाएंगे और वे परतें छवि का हिस्सा होंगी, इसलिए जहां भी छवि निर्भरताएं चलती हैं, भी मौजूद होंगी।

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

स्रोत: https://azure.microsoft.com/en-us/blog/containers-docker-windows-and-trends/ विन्डोज़-and- https://azure.microsoft.com/en-us/blog/containers-docker-windows-and-trends/


वे दोनों बहुत अलग हैं। डॉकर हल्का वजन है और एलएक्ससी / libcontainer (जो कर्नेल नेमस्पेसिंग और cgroups पर निर्भर करता है) का उपयोग करता है और इसमें मशीन / हार्डवेयर इम्यूलेशन जैसे हाइपरवाइजर, केवीएम नहीं है। ज़ेन जो भारी हैं।

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

स्मृति, आई / ओ, सीपीयू, आदि के बारे में क्या? यह cgroups का उपयोग करके नियंत्रित होता है जहां आप कुछ संसाधन (सीपीयू, मेमोरी, इत्यादि) विनिर्देश / प्रतिबंध के साथ समूह बना सकते हैं और अपनी प्रक्रियाओं को वहां डाल सकते हैं। एलएक्ससी के शीर्ष पर, डॉकर स्टोरेज बैकएंड प्रदान करता है ( http://www.projectatomic.io/docs/filesystems/ ) उदाहरण के लिए, यूनियन माउंट फाइल सिस्टम जहां आप परतों को जोड़ सकते हैं और विभिन्न माउंट नेमस्पेस के बीच परत साझा कर सकते हैं।

यह एक शक्तिशाली विशेषता है जहां मूल छवियां आम तौर पर केवल पढ़ने योग्य होती हैं और केवल जब कंटेनर परत में कुछ संशोधित करता है, तो यह कुछ पढ़ने-लिखने के विभाजन (लिखने पर उर्फ ​​प्रतिलिपि) लिखने के लिए कुछ लिखता है। यह छवियों के रजिस्ट्री और संस्करण जैसे कई अन्य रैपर भी प्रदान करता है।

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

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

डॉकर / एलएक्ससी लगभग किसी भी सस्ते हार्डवेयर पर चलाया जा सकता है (1 जीबी से कम स्मृति भी तब तक ठीक है जब तक आपके पास नया कर्नेल हो) बनाम सामान्य वीएम को कम से कम 2 जीबी मेमोरी आदि की आवश्यकता होती है, इसके साथ सार्थक कुछ भी करने के लिए । लेकिन मेजबान ओएस पर डॉकर समर्थन विंडोज़ (नवंबर 2014 तक) में ओएस में उपलब्ध नहीं है, जहां विंडोज़, लिनक्स और मैक्स पर वीएम के प्रकार चल सकते हैं।

डॉकर / राइट्सकेल से एक तस्वीर यहां दी गई है:







virtualization