यदि कंटेनर में कोई अतिथि OS नहीं है, तो हम डॉकर के साथ OS बेस इमेज का उपयोग क्यों करते हैं?


83

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

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

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

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

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

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

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

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

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


2
मेरी राय में, वर्चुअलाइजेशन में आपके उद्देश्य कुंजी हैं। यदि आपको ओएस पर पुस्तकालयों, भाषाओं आदि की आवश्यकता है, तो ओएस कंटेनर आपकी आवश्यकता के साथ उपयुक्त हैं। लेकिन अगर आपकी ज़रूरत केवल घटकों के रूप में अनुप्रयोग की है, तो आपके आधार चित्र के रूप में ओएस का उपयोग करना आवश्यक नहीं है। मुझे लगता है कि यह लेख इसे स्पष्ट रूप से समझा सकता है blog.risingstack.com/…
metamorph

जवाबों:


68

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

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

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


3
इसलिए मैं खाली स्क्रैच कंटेनर में अपने संकलित गोलंग कोड की मेजबानी कर सकता हूं - क्योंकि संकलित कोड को केवल कर्नेल की आवश्यकता है?
फ्रांसिस नॉर्टन

तो अतिथि OS होस्ट ओएस 'कर्नेल (और ऐसा कैसे करें) का उपयोग करना जानता है? AFAIK, docker छवि आधार मानक OS छवियों का उपयोग करते हैं। आपके उदाहरण में, ऐसा नहीं है कि एक कस्टम CentOS बिल्ड है जो माता-पिता की गिरी का उपयोग करना जानता है? या यह एक फ़ाइल सिस्टम (aufs) चाल के रूप में सरल है, जहां डॉकर मेहमानों (CentOS ') को होस्ट (उबंटू) को बूट / रीड रीडायरेक्ट करता है? उस स्थिति में, अतिथि (CentOS) / बूट की अपनी प्रति स्थापित करेगा, लेकिन यह कभी नहीं पढ़ा जाएगा?
जेम्स एस

मुझे आपकी व्याख्या पसंद है लेकिन आप विंडोज पर लिनक्स कंटेनर चलाने की व्याख्या कैसे करते हैं? क्या डॉकर के उपयोग को सक्षम करने के लिए सर्वर 2016 और विंडोज 10 में लिनक्स कर्नेल है? क्या इसलिए कि वे संस्करण आवश्यक हैं?
duct_tape_coder

यह सरल है: वे हाइपर-वी के पूर्ण-वर्चुअलाइज्ड वर्चुअलाइजेशन स्टैक के तहत एक देशी लिनक्स वीएम के अंदर चलते हैं : डॉक्स.मेडिसियन . com / en-us / virtualization / windowscontainers/…
drookie

1

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

और "docker run ubuntu" सिर्फ चुरोट वातावरण बनाने के लिए है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.