डॉकर कंटेनर के अंदर की प्रक्रियाएं क्या दिखती हैं?


33

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

क्या कोई कृपया उच्च स्तर का अवलोकन प्रदान कर सकता है कि क्या हो रहा है?


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

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

जवाबों:


53

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

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

यहाँ एक उदाहरण है जो दिखाता है कि जब हम एक डॉकटर कंटेनर को शुरू करते हैं तो क्या हो रहा है और फिर इसे मंगलाचरण के माध्यम से दर्ज करते हैं /bin/bash

$ docker run -it ubuntu:latest /bin/bash
root@c0c5c54062df:/#

अब इस कंटेनर के अंदर से, यदि हम चलते हैं ps -eaf:

    SS01

एक अन्य टर्मिनल टैब पर स्विच करना, जहां हम होस्ट सिस्टम में लॉग इन कर रहे हैं, जो डॉकर कंटेनर को होस्ट कर रहा है, हम प्रक्रिया स्थान को देख सकते हैं कि कंटेनर "वास्तव में" ले रहा है:

    SS02

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

नोट: प्रक्रियाएँ 4 sleep 1000कमांड्स हैं जिन्हें बैकग्राउंड किया जा रहा है।

    ss03

ध्यान दें कि डॉकर कंटेनर के अंदर प्रक्रियाओं को 48-51 की प्रक्रिया आईडी (पीआईडी) कैसे सौंपी जाती है। उन्हें ps -eafआउटपुट में उनके साथ ही देखें:

    ss04

हालांकि, इस अगली छवि के साथ, डॉकर जो प्रदर्शन कर रहा है उसका बहुत "जादू" पता चला है।

    ss05

देखें कि 4 sleep 1000प्रक्रियाएं वास्तव में हमारी मूल बैश प्रक्रिया के लिए सिर्फ बाल प्रक्रियाएं कैसे हैं? यह भी ध्यान रखें कि हमारे मूल डॉकटर कंटेनर /bin/bashवास्तव में डॉकटर डेमन के लिए एक बच्चे की प्रक्रिया है।

अब अगर हम मूल sleep 1000कमांड को समाप्त करने के लिए 1000+ सेकंड इंतजार करना चाहते हैं, और फिर 4 और नए चलाएं, और इस तरह से एक और डॉक कंटेनर शुरू करें:

$ docker run -it ubuntu:latest /bin/bash
root@450a3ce77d32:/#

होस्ट कंप्यूटर का आउटपुट ps -eafइस तरह दिखेगा:

    ss06

और अन्य डॉकर कंटेनर, सभी सिर्फ डॉकर डेमन के तहत प्रक्रियाओं के रूप में दिखाई देंगे।

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


डॉकटर प्रति रनिंग कंटेनर के लिए एक अलग यूजरस्पेस बनाता है।
भार्गव नेनकलेवा

3

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

EDIT: VMs के बजाय चेरोट के साथ समानता।


1
संपादित, मैं एक विरासत एक्सईएन टोपी पर सोच रहा था। स्पष्ट रूप से ऐसा नहीं है जब केवीएम / केमू के तहत विंडोज चल रहा हो या वर्चुअलबॉक्स के तहत 32 बिट होस्ट पर 64 बिट वीएम चल रहा हो। (मत पूछो)। यह AWS के लिए pv बनाम hvm तर्क के समान है।
मैकेंज़म
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.