यदि कंटेनर में कोई अतिथि ओएस नहीं है तो हम डॉकर के साथ ओएस बेस छवि का उपयोग क्यों करते हैं?

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

मैंने यह भी पढ़ा है कि एक कंटेनर में अतिथि ओएस स्थापित नहीं है । इसके बजाय यह अंतर्निहित ओएस कर्नेल पर निर्भर करता है ।

वह सब ठीक है । मैं उलझन में हूं कि ऑपरेटिंग सिस्टम के नाम पर डॉकर छवियां हैं । हम छवियों की तरह Ubuntu, डेबियन, फेडोरा, CentOS,,, और इतने पर ।

मेरा कहना है: वे चित्र क्या हैं, वास्तव में? वर्चुअल मशीन बनाने और डेबियन को स्थापित करने की तुलना में डेबियन छवि के आधार पर कंटेनर बनाना अलग कैसे है?

मैंने सोचा था कि कंटेनरों में कोई अतिथि ओएस स्थापित नहीं था, लेकिन जब हम चित्र बनाते हैं तो हम उन्हें एक ओएस के नाम पर कुछ छवि पर आधारित करते हैं ।

इसके अलावा, उदाहरणों में मैंने देखा जब हम करते हैं docker run ubuntu echo "hello world", ऐसा लगता है कि हम उबंटू के साथ एक वीएम कताई कर रहे हैं और इसे कमांड चला रहे हैं echo "hello world".

उसी तरह जब हम करते हैं docker run -it ubuntu /bin/bash, ऐसा लगता है कि हम उबंटू के साथ एक वीएम कताई कर रहे हैं और कमांड लाइन का उपयोग करके इसे एक्सेस कर रहे हैं ।

वैसे भी, उन छवियों को ऑपरेटिंग सिस्टम के नाम पर क्या रखा गया है? उन छवियों में से एक के साथ एक कंटेनर चलाने और संबंधित अतिथि ओएस के साथ एक वीएम को कताई करने के लिए यह कितना अलग है?

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

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

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

यदि यह आसान होगा, तो आप सोच सकते हैं कि डॉकर बहुत परिष्कृत और उन्नत क्रोट वातावरण है ।

मैं उसी सवाल से जूझ रहा था जो आप पूछ रहे हैं, और यही मुझे समझ में आया है ।

कंटेनर में अतिथि ओएस नहीं है, आप इसके बारे में सही हैं ।

फिर हम कंटेनर को ओएस छवि पर क्यों आधार बनाते हैं?

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

इस उत्तर को बेहतर समझने के लिए देखें कि हमें आधार छवि की भी आवश्यकता क्यों है: https://stackoverflow.com/a/62384611

कंटेनर एकल कर्नेल पर चलते हैं । दूसरे शब्दों में सभी कंटेनरों में एकल कर्नेल (होस्ट ओएस) होता है । जबकि दूसरी ओर hypervisors कई kernals. प्रत्येक वर्चुअल मशीन अलग-अलग कर्नेल पर चलती है ।

और" डॉकर रन उबंटू " सिर्फ क्रोट वातावरण बनाने की तरह है ।

मेरी राय में, वर्चुअलाइजेशन में आपके उद्देश्य कुंजी हैं । यदि आपको पुस्तकालयों, भाषाओं आदि की आवश्यकता है । ओएस पर, इसलिए ओएस कंटेनर आपकी आवश्यकता के साथ उपयुक्त हैं । लेकिन अगर आपकी ज़रूरत केवल घटकों के रूप में आवेदन है, तो ओएस को अपनी आधार छवि के रूप में उपयोग करना आवश्यक नहीं है । मुझे लगता है कि यह लेख इसे स्पष्ट रूप से समझा सकता है Operating System Containers vs. Application Containers - RisingStack Engineering