डॉकटर कंटेनरों का अपना कर्नेल है या नहीं?


65

मैं देख रहा हूं कि docker रिपॉजिटरी में बहुत सारे docker की इमेज एक Ubuntu बेस के साथ बनी हैं।

इसका क्या मतलब है? क्या प्रत्येक कंटेनर लिनक्स कर्नेल के एक स्ट्रिप डाउन संस्करण को बंडल करता है?

क्या कंटेनर अपनी गुठली के ऊपर बैठते हैं? लेकिन मुझे लगा कि कंटेनर होस्ट के कर्नेल को साझा करते हैं (जो कुछ मामलों में बूट 2 डॉक है, एक कस्टम टिनी कोर लिनक्स बिल्ड है, और अन्य में कोरोस जैसे कुछ)।

संपादित करें: सवाल को थोड़ा स्पष्ट करना। हाँ, मुझे पता है कि डॉक एक प्रक्रिया कंटेनर है, न कि पूर्ण वीएम। लेकिन चूंकि आधिकारिक docker hub रजिस्ट्री में "Ubuntu" कंटेनर और CentOS जैसे अन्य OSes हैं, ऐसे में उबंटू को एक कंटेनर में चलाने का क्या मतलब है?

उत्तर: आह यह मुझ पर बस dawned। यह उबंटू उपयोगकर्ता भूमि प्रक्रियाएं हैं, जिनमें एक विशेष उबंटू बिल्ड के लिए उपयुक्त-प्राप्त और अन्य कॉन्फ़िगरेशन प्रक्रियाएं हैं। इसी तरह CentOS के लिए। डॉकर एकल प्रक्रिया नहीं है, केवल एकल प्रविष्टि है। तो इन वितरणों के लिए प्रवेश बिंदु कुछ प्रकार की init प्रक्रिया है जो अन्य प्रक्रियाओं को जन्म देती है।


2
"यह उबंटू उपयोगकर्ता भूमि प्रक्रिया है," - न केवल प्रक्रियाएं, बल्कि पुस्तकालय भी।
19

जवाबों:


37

डॉकर होस्ट ओएस कर्नेल का उपयोग करता है, कंटेनर के अंदर कोई कस्टम या अतिरिक्त कर्नेल नहीं है। मशीन पर चलने वाले सभी कंटेनर इस "होस्ट" कर्नेल को साझा कर रहे हैं।

विकिपीडिया कहता है कि http://en.wikipedia.org/wiki/Docker_(software) है कि

डॉकर लिनक्स के कर्नेल जैसे संसाधन अलगाव सुविधाओं का उपयोग करता है जैसे कि स्वतंत्र "कंटेनर" को एक एकल लिनक्स उदाहरण में चलाने की अनुमति देने के लिए cgroups और कर्नेल नेमस्पेस जैसे वर्चुअल मशीन शुरू करने के ओवरहेड से बचें।

cgroups, नाम स्थान और LXC लिनक्स कर्नेल की विशेषताएं हैं जो प्रक्रियाओं के समूहों को अलग करती हैं; अभी भी सिंगल कर्नेल, सिंगल शेड्यूलर और कर्नेल मेमोरी मैनेजर का एक उदाहरण है।

Boot2docker और CoreOS कुछ होस्ट कर्नेल के साथ हल्के लिनक्स वितरण हैं; उनका उपयोग डॉकटर कंटेनरों को लोड करने के लिए किया जा सकता है।

http://boot2docker.io/

boot2docker टिनी कोर लिनक्स पर आधारित एक हल्का लिनक्स वितरण है जो विशेष रूप से डॉकर कंटेनरों को चलाने के लिए बनाया गया है। यह पूरी तरह से रैम से चलता है, ~ 5 एमबी (वाईएमएमवी) में ~ 27 एमबी और जूते का वजन होता है।

http://en.wikipedia.org/wiki/CoreOS

एक एकल नियंत्रण होस्ट (कोरओएस उदाहरण) कई पृथक लिनक्स सिस्टम (कंटेनर) चलाता है, जो डॉकर को लिनक्स कर्नेल के अंतर्निहित ऑपरेटिंग-सिस्टम-स्तरीय वर्चुअलाइजेशन सुविधाओं में अमूर्त और इंटरफ़ेस [14] की अतिरिक्त परत के रूप में उपयोग करता है। ... यह दृष्टिकोण लिनक्स कर्नेल की cgroups कार्यक्षमता पर निर्भर करता है, जो प्रक्रियाओं के संग्रह के लिए नामस्थान अलगाव और सीमा, खाते और संसाधन उपयोग (सीपीयू, मेमोरी, डिस्क I / O, आदि) को अलग करने की क्षमता प्रदान करता है।


1
इस सवाल का जवाब नहीं है।
ईएमएल

2
ईएमएल, कौन सा सवाल? डिफ़ॉल्ट रूप से सभी डॉकटर कंटेनरों की अपनी गुठली नहीं होती है। सभी डॉकटर कंटेनरों के लिए केवल एक होस्ट कर्नेल है।
ऑगक्स

निश्चित रूप से, आपका उत्तर ठीक है जहां तक ​​यह जाता है, लेकिन ओपी यह जानना चाहता था कि FROMजब उबंटू पहले से ही उबंटू चल रहा है तो उसे उबंटू आधार छवि क्यों चाहिए । प्रश्न का उत्तर देने के लिए आपको यह बताना होगा कि आधार छवि क्या है।
ईएमएल

2
ईएमएल, मेरे जवाब पोस्ट किए जाने के बाद प्रश्न को "क्लेरिफाइंग" ( सुपरयूज़र.com/posts/889472/revisions ) के साथ संपादित किया गया था, इसलिए यह बिना स्पष्टीकरण के मूल प्रश्न का उत्तर है। यदि आपके पास आधार चित्र और कर्नेल में कर्नेल के बारे में साझा करने के लिए कुछ जानकारी है, तो एक और उत्तर जोड़ें।
15

17

लगभग सभी मामलों में, होस्ट ओएस कर्नेल साझा किया जाता है। एक अलग कर्नेल चलाने के लिए आपको वर्चुअलाइजेशन का उपयोग करने की आवश्यकता है। यह प्रदर्शन में गिरावट के कारण आवश्यक होने पर ही दुर्लभ और उपयोग किया जाता है।

"डॉकर इंजन कंटेनर में सिर्फ एप्लिकेशन और उसकी निर्भरताएं शामिल हैं। यह अन्य कंटेनरों के साथ कर्नेल साझा करते हुए, होस्ट ऑपरेटिंग सिस्टम पर यूजरस्पेस में एक अलग प्रक्रिया के रूप में चलता है। इस प्रकार, यह वीएम के संसाधन अलगाव और आवंटन लाभ प्राप्त करता है, लेकिन बहुत अधिक है। पोर्टेबल और कुशल। ”

यह समझाने में मदद कर सकता है कि यह कैसे काम करता है: यहाँ छवि विवरण दर्ज करें

स्रोत: https://www.docker.com/whatisdocker/


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

2
पैकेज क्या है? डॉकर कंटेनर में इसके अंदर कोई कर्नेल नहीं है; यह बस उस कर्नेल पर स्थापित और शुरू हुआ जो होस्ट पर उपयोग किया जाता है। तो: एक डॉकर = एक सर्वर = एक कर्नेल, जैसा कि चित्र में दिखाया गया है। सिंगल डॉकर इंजन के साथ दो गुठली का उपयोग करने का कोई तरीका नहीं; इस इंजन के अंदर सभी कंटेनर एक ही कर्नेल का उपयोग करेंगे। मुझे लगता है कि सही उत्तर है "नहीं, डॉक कंटेनर
डॉक

1
प्रत्येक डॉकटर कंटेनर जो भी कोड चाहता है उसे चला सकता है, जिसमें वर्चुअलाइजेशन सॉफ्टवेयर शामिल है जो आपके सॉफ़्टवेयर को किसी भी कर्नेल को लोड करने में सक्षम है। आप चाहें तो विंडोज को एक कंटेनर में चला सकते हैं।
यिर्मयाह

1
JeremiahBarrar, समझ गया, स्पष्टीकरण के लिए धन्यवाद। डॉकर कंटेनर के अंदर से वर्चुअलाइजेशन सॉफ्टवेयर चल रहा है और क्या यह डॉकटर द्वारा समर्थित है? डॉकर (सॉफ्टवेयर qemu, qemu + kvm, xen, ...) से किस तरह का वर्चुअलाइजेशन काम करेगा?
ऑस्क्स

2
पहला वाक्य भ्रामक है। एक कंटेनर प्रकार के अंदर एक वीएम का उपयोग करके डॉकर का उपयोग करने के बिंदु को हराया जाता है।
user2707671
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.