डॉकर एक वर्चुअलाइजेशन पद्धति नहीं है। यह अन्य उपकरणों पर निर्भर करता है जो वास्तव में कंटेनर-आधारित वर्चुअलाइजेशन या ऑपरेटिंग सिस्टम स्तर वर्चुअलाइजेशन को लागू करते हैं। उसके लिए, Docker शुरू में LXC ड्राइवर का उपयोग कर रहा था, फिर libcontainer पर चला गया जिसे अब runc के रूप में नाम दिया गया है। डॉकर मुख्य रूप से एप्लिकेशन कंटेनरों के अंदर अनुप्रयोगों की तैनाती को स्वचालित करने पर केंद्रित है। एप्लिकेशन कंटेनरों को एक एकल सेवा पैकेज और चलाने के लिए डिज़ाइन किया गया है, जबकि सिस्टम कंटेनर वर्चुअल मशीन की तरह कई प्रक्रियाओं को चलाने के लिए डिज़ाइन किए गए हैं। तो, डॉकटर को कंटेनरीकृत सिस्टम पर एक कंटेनर प्रबंधन या एप्लिकेशन परिनियोजन उपकरण माना जाता है।
यह जानने के लिए कि यह अन्य वर्चुअलाइजेशन से कैसे भिन्न है, आइए वर्चुअलाइजेशन और इसके प्रकारों से गुजरें। फिर, यह समझना आसान होगा कि वहां क्या अंतर है।
वर्चुअलाइजेशन
अपने कल्पित रूप में, यह कई अनुप्रयोगों को एक साथ चलाने की अनुमति देने के लिए तार्किक रूप से मेनफ्रेम को विभाजित करने का एक तरीका माना जाता था। हालाँकि, परिदृश्य बहुत बदल गया जब कंपनियां और खुले स्रोत समुदाय एक या दूसरे तरीके से विशेषाधिकार प्राप्त निर्देशों को संभालने की एक विधि प्रदान करने में सक्षम थे और एक ही x86 आधारित प्रणाली पर एक साथ कई ऑपरेटिंग सिस्टम चलाने की अनुमति देते थे।
सूत्र
हाइपरविजर वर्चुअल वातावरण बनाने का काम करता है, जिस पर अतिथि वर्चुअल मशीनें संचालित होती हैं। यह अतिथि प्रणालियों की देखरेख करता है और यह सुनिश्चित करता है कि मेहमानों को आवश्यक रूप से संसाधन आवंटित किए जाएं। हाइपरविजर भौतिक मशीन और आभासी मशीनों के बीच बैठता है और आभासी मशीनों को वर्चुअलाइजेशन सेवाएं प्रदान करता है। इसे महसूस करने के लिए, यह वर्चुअल मशीनों पर अतिथि ऑपरेटिंग सिस्टम के संचालन को स्वीकार करता है और होस्ट मशीन के ऑपरेटिंग सिस्टम पर ऑपरेशन का अनुकरण करता है।
वर्चुअलाइजेशन तकनीकों का तेजी से विकास, मुख्य रूप से क्लाउड में, ने वर्चुअलाइजेशन के उपयोग को आगे बढ़ाया है, जिससे एक ही भौतिक सर्वर पर कई वर्चुअल सर्वर बनाए जा सकते हैं, जैसे कि एक्सपीरिएंस, जैसे एक्सएमएन, वीएमवेयर प्लेयर, केवीएम, इत्यादि। कमोडिटी प्रोसेसर में हार्डवेयर सपोर्ट का समावेश, जैसे इंटेल वीटी और एएमडी-वी।
वर्चुअलाइजेशन के प्रकार
वर्चुअलाइजेशन विधि को इस आधार पर वर्गीकृत किया जा सकता है कि यह एक अतिथि ऑपरेटिंग सिस्टम में हार्डवेयर की नकल कैसे करता है और अतिथि ऑपरेटिंग वातावरण का अनुकरण करता है। मुख्य रूप से, तीन प्रकार के वर्चुअलाइजेशन हैं:
- अनुकरण
- पैरावर्चुअलाइजेशन
- कंटेनर आधारित वर्चुअलाइजेशन
अनुकरण
इम्यूलेशन, जिसे पूर्ण वर्चुअलाइजेशन के रूप में भी जाना जाता है, पूरी तरह से सॉफ्टवेयर में वर्चुअल मशीन OS कर्नेल चलाता है। इस प्रकार में प्रयुक्त हाइपरवाइजर को टाइप 2 हाइपरवाइजर के रूप में जाना जाता है। यह मेजबान ऑपरेटिंग सिस्टम के शीर्ष पर स्थापित है जो सॉफ्टवेयर निर्देशों के लिए अतिथि ओएस कर्नेल कोड का अनुवाद करने के लिए जिम्मेदार है। अनुवाद पूरी तरह से सॉफ़्टवेयर में किया जाता है और इसके लिए किसी हार्डवेयर की भागीदारी की आवश्यकता नहीं होती है। अनुकरण किसी भी गैर-संशोधित ऑपरेटिंग सिस्टम को चलाने के लिए संभव बनाता है जो पर्यावरण के अनुकरण का समर्थन करता है। इस प्रकार के वर्चुअलाइजेशन का नकारात्मक पहलू एक अतिरिक्त सिस्टम संसाधन ओवरहेड है जो अन्य प्रकार के वर्चुअलाइजेशन की तुलना में प्रदर्शन में कमी की ओर जाता है।
इस श्रेणी के उदाहरणों में VMware Player, VirtualBox, QEMU, Boch, Parallels, आदि शामिल हैं।
पैरावर्चुअलाइजेशन
Paravirtualization, जिसे टाइप 1 हाइपरविजर के रूप में भी जाना जाता है, सीधे हार्डवेयर या "नंगे-धातु" पर चलता है, और इस पर चलने वाली आभासी मशीनों को सीधे वर्चुअलाइजेशन सेवाएं प्रदान करता है। यह ऑपरेटिंग सिस्टम, वर्चुअलाइज्ड हार्डवेयर और वास्तविक हार्डवेयर को इष्टतम प्रदर्शन प्राप्त करने में सहयोग करने में मदद करता है। इन हाइपरविज़रों में आमतौर पर छोटे फुटप्रिंट होते हैं और खुद को व्यापक संसाधनों की आवश्यकता नहीं होती है।
इस श्रेणी के उदाहरणों में एक्सएन, केवीएम आदि शामिल हैं।
कंटेनर आधारित वर्चुअलाइजेशन
कंटेनर आधारित वर्चुअलाइजेशन, जिसे ऑपरेटिंग सिस्टम-स्तरीय वर्चुअलाइजेशन के रूप में भी जाना जाता है, एकल ऑपरेटिंग सिस्टम कर्नेल के भीतर कई अलग-अलग निष्पादन को सक्षम करता है। इसमें सर्वोत्तम संभव प्रदर्शन और घनत्व है और गतिशील संसाधन प्रबंधन सुविधाएँ हैं। इस प्रकार के वर्चुअलाइजेशन द्वारा प्रदान किए गए पृथक आभासी निष्पादन पर्यावरण को कंटेनर कहा जाता है और इसे प्रक्रियाओं के एक ट्रेस समूह के रूप में देखा जा सकता है।
लिनक्स कर्नेल संस्करण 2.6.24 में जोड़े गए नाम स्थान सुविधा द्वारा कंटेनर की अवधारणा संभव है। कंटेनर हर प्रक्रिया में अपनी आईडी जोड़ता है और हर सिस्टम कॉल में नए एक्सेस कंट्रोल चेक जोड़ता है। इसे क्लोन () सिस्टम कॉल द्वारा एक्सेस किया जाता है जो पहले-वैश्विक नामस्थानों के अलग-अलग उदाहरण बनाने की अनुमति देता है।
नेमस्पेस का उपयोग कई अलग-अलग तरीकों से किया जा सकता है, लेकिन सबसे आम तरीका एक पृथक कंटेनर बनाना है जिसमें कंटेनर के बाहर वस्तुओं की कोई दृश्यता या पहुंच नहीं है। कंटेनर के अंदर चलने वाली प्रक्रियाएं एक सामान्य लिनक्स सिस्टम पर चल रही प्रतीत होती हैं, हालांकि वे अन्य नामस्थानों में स्थित प्रक्रियाओं के साथ अंतर्निहित कर्नेल को साझा कर रहे हैं, अन्य प्रकार की वस्तुओं के लिए भी। उदाहरण के लिए, नामस्थान का उपयोग करते समय, कंटेनर के अंदर रूट उपयोगकर्ता को कंटेनर के बाहर रूट के रूप में नहीं माना जाता है, अतिरिक्त सुरक्षा को जोड़ता है।
लिनक्स नियंत्रण समूह (cgroups) सबसिस्टम, कंटेनर-आधारित वर्चुअलाइजेशन को सक्षम करने के लिए अगला प्रमुख घटक है, समूह प्रक्रियाओं के लिए और उनके समग्र संसाधन खपत का प्रबंधन करने के लिए उपयोग किया जाता है। यह आमतौर पर कंटेनरों की मेमोरी और सीपीयू खपत को सीमित करने के लिए उपयोग किया जाता है। चूंकि कंटेनरीकृत लिनक्स सिस्टम में केवल एक कर्नेल होता है और कर्नेल की कंटेनर में पूर्ण दृश्यता होती है, इसलिए संसाधन आवंटन और शेड्यूलिंग का केवल एक स्तर होता है।
लिनक्स कंटेनर के लिए कई प्रबंधन उपकरण उपलब्ध हैं, जिनमें LXC, LXD, systemd-nspawn, lmctfy, Warden, Linux-VServer, OpenVZ, Docker, आदि शामिल हैं।
वर्चुअल मशीन बनाम कंटेनर
वर्चुअल मशीन के विपरीत, एक कंटेनर को ऑपरेटिंग सिस्टम कर्नेल को बूट करने की आवश्यकता नहीं होती है, इसलिए कंटेनर को एक सेकंड से भी कम समय में बनाया जा सकता है। यह विशेषता अन्य वर्चुअलाइजेशन दृष्टिकोण की तुलना में कंटेनर-आधारित वर्चुअलाइजेशन को अद्वितीय और वांछनीय बनाती है।
चूंकि कंटेनर-आधारित वर्चुअलाइजेशन मेजबान मशीन में बहुत कम या कोई ओवरहेड जोड़ता है, इसलिए कंटेनर-आधारित वर्चुअलाइजेशन में लगभग मूल प्रदर्शन होता है
कंटेनर-आधारित वर्चुअलाइजेशन के लिए, अन्य वर्चुअलाइजेशन के विपरीत, कोई अतिरिक्त सॉफ़्टवेयर की आवश्यकता नहीं है।
एक मेजबान मशीन पर सभी कंटेनर अतिरिक्त संसाधनों की आवश्यकता वाले होस्ट मशीन बचत के अनुसूचक को साझा करते हैं।
कंटेनर स्टेट्स (डॉकर या LXC इमेज) वर्चुअल मशीन इमेज की तुलना में आकार में छोटे होते हैं, इसलिए कंटेनर इमेज को वितरित करना आसान होता है।
कंटेनरों में संसाधन प्रबंधन cgroups के माध्यम से प्राप्त किया जाता है। Cgroups कंटेनरों को उनके लिए आवंटित से अधिक संसाधनों का उपभोग करने की अनुमति नहीं देते हैं। हालाँकि, अब तक, होस्ट मशीन के सभी संसाधन आभासी मशीनों में दिखाई देते हैं, लेकिन इसका उपयोग नहीं किया जा सकता है। यह एक ही समय में कंटेनरों और होस्ट मशीन पर चलाकर top
या महसूस किया जा सकता है htop
। सभी परिवेशों में आउटपुट समान दिखाई देगा।
अपडेट करें:
नॉन-लिनक्स सिस्टम में डॉकटर कंटेनर कैसे चलाता है?
यदि लिनक्स कर्नेल में उपलब्ध सुविधाओं के कारण कंटेनर संभव हैं, तो स्पष्ट सवाल है कि गैर-लिनक्स सिस्टम कंटेनर कैसे चलाते हैं। मैक और विंडोज के लिए डोकर दोनों ही कंटेनर को चलाने के लिए लिनक्स वीएम का उपयोग करते हैं। डॉकरी टूलबॉक्स वर्चुअल बॉक्स वीएम में कंटेनरों को चलाने के लिए उपयोग किया जाता है। लेकिन, नवीनतम डॉकर मैक में विंडोज और हाइपरविजर.फ्रामवर्क में हाइपर-वी का उपयोग करता है।
अब, मैं बताता हूं कि मैक के लिए डॉकर कैसे कंटेनरों को विस्तार से बताता है।
मैक के लिए डॉकर https://github.com/moby/hyperkit का उपयोग हाइपरवाइजर क्षमताओं का अनुकरण करने के लिए करता है और हाइपरकिट अपने मूल में hypervisor.framework का उपयोग करता है। Hypervisor.framework मैक का देशी हाइपरवाइज़र समाधान है। हाइपरकिट क्रमशः वीपीएनकिट और डेटाकीट से लेकर नेमस्पेस नेटवर्क और फाइल सिस्टम तक का उपयोग करता है।
मैक में चलने वाला लिनक्स वीएम केवल-पढ़ने के लिए है। हालाँकि, आप इसे चलाकर भी मिटा सकते हैं:
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
।
अब, हम इस VM के कर्नेल संस्करण को भी देख सकते हैं:
# uname -a
Linux linuxkit-025000000001 4.9.93-linuxkit-aufs #1 SMP Wed Jun 6 16:86_64 Linux
।
सभी कंटेनर इस वीएम के अंदर चलते हैं।
Hypervisor.framework की कुछ सीमाएँ हैं। उस वजह से Docker docker0
Mac में नेटवर्क इंटरफ़ेस को उजागर नहीं करता है । इसलिए, आप मेजबान से कंटेनरों तक नहीं पहुंच सकते। अब तक, docker0
केवल वीएम के अंदर ही उपलब्ध है।
हाइपर- v विंडोज में देशी हाइपरवाइजर है। वे लिनक्स सिस्टम को मूल रूप से चलाने के लिए विंडोज 10 की क्षमताओं का लाभ उठाने की कोशिश कर रहे हैं।