डॉकर को वर्चुअलाइजेशन बकेट में फेंक दिया जाता है, क्योंकि लोग मानते हैं कि यह किसी तरह हार्डवेयर को वर्चुअलाइज कर रहा है। यह एक मिथ्या नाम है जो उस शब्दावली से अनुमति देता है जिसका उपयोग डॉकटर करता है, मुख्य रूप से कंटेनर शब्द।
हालाँकि एक सिस्टम के हार्डवेयर को वर्चुअलाइज करने के लिए डॉकर कुछ भी जादुई नहीं कर रहा है। बल्कि यह प्रमुख सुविधाओं के आसपास "बाड़" के निर्माण के लिए लिनक्स कर्नेल की क्षमता का उपयोग कर रहा है, जो एक प्रक्रिया के लिए अनुमति देता है जैसे कि नेटवर्क, फाइल सिस्टम, और अनुमतियों (अन्य चीजों के बीच) के साथ बातचीत करने के लिए जो आप इंटरेक्ट कर रहे हैं। पूरी तरह कार्यात्मक प्रणाली के साथ।
यहाँ एक उदाहरण है जो दिखाता है कि जब हम एक डॉकटर कंटेनर को शुरू करते हैं तो क्या हो रहा है और फिर इसे मंगलाचरण के माध्यम से दर्ज करते हैं /bin/bash
।
$ docker run -it ubuntu:latest /bin/bash
root@c0c5c54062df:/#
अब इस कंटेनर के अंदर से, यदि हम चलते हैं ps -eaf
:
एक अन्य टर्मिनल टैब पर स्विच करना, जहां हम होस्ट सिस्टम में लॉग इन कर रहे हैं, जो डॉकर कंटेनर को होस्ट कर रहा है, हम प्रक्रिया स्थान को देख सकते हैं कि कंटेनर "वास्तव में" ले रहा है:
अब अगर हम डॉकर टैब पर वापस जाते हैं और उसके भीतर कई प्रक्रियाएँ शुरू करते हैं और उन सभी को बैकग्राउंड करते हैं, तो हम देख सकते हैं कि अब हमारे पास प्राथमिक बैश प्रक्रिया के तहत चलने वाली कई बाल प्रक्रियाएँ हैं, जिन्हें हमने मूल रूप से डॉकर कंटेनर लॉन्च के हिस्से के रूप में शुरू किया था।
नोट: प्रक्रियाएँ 4 sleep 1000
कमांड्स हैं जिन्हें बैकग्राउंड किया जा रहा है।
ध्यान दें कि डॉकर कंटेनर के अंदर प्रक्रियाओं को 48-51 की प्रक्रिया आईडी (पीआईडी) कैसे सौंपी जाती है। उन्हें ps -eaf
आउटपुट में उनके साथ ही देखें:
हालांकि, इस अगली छवि के साथ, डॉकर जो प्रदर्शन कर रहा है उसका बहुत "जादू" पता चला है।
देखें कि 4 sleep 1000
प्रक्रियाएं वास्तव में हमारी मूल बैश प्रक्रिया के लिए सिर्फ बाल प्रक्रियाएं कैसे हैं? यह भी ध्यान रखें कि हमारे मूल डॉकटर कंटेनर /bin/bash
वास्तव में डॉकटर डेमन के लिए एक बच्चे की प्रक्रिया है।
अब अगर हम मूल sleep 1000
कमांड को समाप्त करने के लिए 1000+ सेकंड इंतजार करना चाहते हैं, और फिर 4 और नए चलाएं, और इस तरह से एक और डॉक कंटेनर शुरू करें:
$ docker run -it ubuntu:latest /bin/bash
root@450a3ce77d32:/#
होस्ट कंप्यूटर का आउटपुट ps -eaf
इस तरह दिखेगा:
और अन्य डॉकर कंटेनर, सभी सिर्फ डॉकर डेमन के तहत प्रक्रियाओं के रूप में दिखाई देंगे।
तो आप देखते हैं, डॉकर वास्तव में वर्चुअलाइजेशन नहीं कर रहा है ( पारंपरिक अर्थों में ), यह विभिन्न कर्नेल संसाधनों के आसपास "बाड़" का निर्माण कर रहा है और किसी दिए गए प्रक्रिया + बच्चों के लिए दृश्यता को सीमित कर रहा है।