Docker lxc-tools (userspace LXC टूल्स) में क्या जोड़ता है?


398

अगर आप डॉकटर की विशेषताओं पर एक नज़र डालें, तो उनमें से अधिकांश पहले से ही एलएक्ससी द्वारा प्रदान किए गए हैं।

तो डॉकर क्या जोड़ता है? मैं सादे LXC पर डॉकर का उपयोग क्यों करूंगा?

जवाबों:


550

से डोकर पूछे जाने वाले प्रश्न :

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

कर्नेल सुविधाओं की इस निम्न-स्तरीय नींव के शीर्ष पर, डॉकर कई शक्तिशाली कार्यात्मकताओं के साथ एक उच्च-स्तरीय उपकरण प्रदान करता है:

  • मशीनों के पार पोर्टेबल तैनाती।डॉकर किसी एप्लिकेशन और उसकी सभी निर्भरताओं को एक ही ऑब्जेक्ट में बदलने के लिए एक प्रारूप को परिभाषित करता है जिसे किसी भी डॉक-सक्षम मशीन में स्थानांतरित किया जा सकता है, और इस गारंटी के साथ वहां निष्पादित किया जाता है कि एप्लिकेशन के संपर्क में आने वाला वातावरण समान होगा। Lxc, सैंडबॉक्सिंग को लागू करता है, जो कि पोर्टेबल परिनियोजन के लिए एक महत्वपूर्ण पूर्व-आवश्यकता है, लेकिन यह कि केवल पोर्टेबल परिनियोजन के लिए पर्याप्त नहीं है। यदि आपने मुझे कस्टम lxc कॉन्फ़िगरेशन में स्थापित अपने एप्लिकेशन की एक प्रति भेजी है, तो यह निश्चित रूप से मेरी मशीन पर नहीं चलेगा जिस तरह से यह आपके ऊपर करता है, क्योंकि यह आपकी मशीन के विशिष्ट कॉन्फ़िगरेशन से बंधा है: नेटवर्किंग, भंडारण, लॉगिंग, डिस्ट्रो आदि डॉकर इन मशीन-विशिष्ट सेटिंग्स के लिए एक अमूर्तता को परिभाषित करता है, ताकि सटीक एक ही डॉक कंटेनर चल सके - अपरिवर्तित - कई अलग-अलग मशीनों पर,

  • आवेदन केंद्रित। मशीनों के विपरीत, डॉकर अनुप्रयोगों की तैनाती के लिए अनुकूलित है । यह इसके एपीआई, यूजर इंटरफेस, डिजाइन दर्शन और प्रलेखन में परिलक्षित होता है। इसके विपरीत, lxc सहायक स्क्रिप्ट हल्के मशीनों के रूप में कंटेनरों पर ध्यान केंद्रित करते हैं - मूल रूप से सर्वर जो तेजी से बूट करते हैं और कम रैम की आवश्यकता होती है। हमें लगता है कि कंटेनर की तुलना में कहीं अधिक है।

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

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

  • घटक पुन: उपयोग। अधिक विशिष्ट घटकों को बनाने के लिए किसी भी कंटेनर का उपयोग "आधार छवि" के रूप में किया जा सकता है। यह मैन्युअल रूप से या स्वचालित निर्माण के हिस्से के रूप में किया जा सकता है। उदाहरण के लिए आप आदर्श अजगर पर्यावरण तैयार कर सकते हैं, और इसे 10 विभिन्न अनुप्रयोगों के लिए आधार के रूप में उपयोग कर सकते हैं। आपका आदर्श पोस्टग्रैक्स्ल सेटअप आपके भविष्य की सभी परियोजनाओं के लिए फिर से इस्तेमाल किया जा सकता है। और इसी तरह।

  • साझा करना। डॉकटर की एक सार्वजनिक रजिस्ट्री ( https://registry.hub.docker.com/ ) तक पहुंच है, जहां हजारों लोगों ने उपयोगी कंटेनर अपलोड किए हैं: रेडिस, काउचडब से कुछ भी, irc बाउंसरों को पोस्ट सर्वर के आधार छवियों के लिए अप करने के लिए रेल सर्वरों को पोस्ट करने के लिए पोस्टर्स तक पहुंचता है विभिन्न विकृतियों। रजिस्ट्री में डॉकटर टीम द्वारा बनाए गए उपयोगी कंटेनरों का एक आधिकारिक "मानक पुस्तकालय" भी शामिल है। रजिस्ट्री स्वयं ओपन-सोर्स है, इसलिए कोई भी निजी कंटेनरों को स्टोर करने और स्थानांतरित करने के लिए अपनी स्वयं की रजिस्ट्री को तैनात कर सकता है, उदाहरण के लिए आंतरिक सर्वर की तैनाती।

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

आशा है कि ये आपकी मदद करेगा!


3
जब आप कहते हैं, "किसी भी कंटेनर को आधार छवि के रूप में इस्तेमाल किया जा सकता है", तो मुझे लगता है कि आपका मतलब डॉकटर कंटेनर से है, डॉकटर से स्वतंत्र रूप से निर्मित एलएक्ससी कंटेनर नहीं। जहां तक ​​मैं बता सकता हूं, कोई भी स्क्रैच से डॉकटर कंटेनर नहीं बना सकता है, इसे हमेशा दूसरे डॉकटर कंटेनर (संबंधित प्रश्न: stackoverflow.com/questions/18274088/… ) से विरासत में प्राप्त करना चाहिए ।
फ़्लिम

18
आप "docker import" के साथ आसानी से किसी भी टैरबॉल से एक नया कंटेनर बना सकते हैं। उदाहरण के लिए: "debootstrap raring ./rootfs; tar -C ./rootfs -c | docker import flimm / mybase"।
सोलोमन हाइक

3
क्या यह अभी भी सच है कि डॉकटर को कामेच्छा प्राप्त हुई (कि यह एक प्रतिस्थापन नहीं है)?
गार्ट क्लैबोर्न

3
@GaretClaborn हाँ, क्योंकि libcontainer नेमस्पेस और सीग्रुप्स तक पहुँचने के लिए सिर्फ उनकी अपनी लाइब्रेरी है, सोलोमन ने कहा कि सब कुछ अभी भी लागू होता है।
जॉन मोरालेस

10
एक लिनक्स कंटेनर लिनक्स सुविधाओं के एक सेट का उपयोग करके एक प्रक्रिया को बाध्य करने और अलग करने का परिणाम है: चुरोट, cgroups और नामस्थान। LXC एक यूजरस्पेस टूल है जो उन सुविधाओं में हेरफेर करता है। libcontainer LXC का एक विकल्प है जो उन्हीं सुविधाओं में फेरबदल करता है। Docker डिफ़ॉल्ट रूप से libcontainer का उपयोग करता है, लेकिन इसके बजाय LXC का उपयोग कर सकता है। उस ने कहा, डॉकर कामेच्छा / LXC के शीर्ष पर एक संगतता परत से अधिक (बहुत) है; यह अतिरिक्त सुविधाओं को जोड़ता है जो अन्य उत्तर सूचीबद्ध हैं।
user100464

71

आइए डॉकटर की तकनीकी विशेषताओं की सूची पर एक नज़र डालें , और यह जांचें कि एलएक्ससी द्वारा कौन सी सुविधाएं प्रदान की गई हैं और कौन सी नहीं हैं।

विशेषताएं:

1) फाइलसिस्टम अलगाव : प्रत्येक प्रक्रिया कंटेनर पूरी तरह से अलग रूट फाइल सिस्टम में चलता है।

सादे एलएक्ससी के साथ प्रदान किया गया।

2) संसाधन अलगाव : सीपीयू और मेमोरी जैसे सिस्टम संसाधनों को प्रत्येक प्रक्रिया कंटेनर में अलग से आवंटित किया जा सकता है, cgroups का उपयोग कर।

सादे एलएक्ससी के साथ प्रदान किया गया।

3) नेटवर्क अलगाव : प्रत्येक प्रक्रिया कंटेनर अपने स्वयं के नेटवर्क नेमस्पेस में चलती है, जिसमें एक वर्चुअल इंटरफ़ेस और स्वयं का आईपी पता होता है।

सादे एलएक्ससी के साथ प्रदान किया गया।

4) कॉपी-ऑन-राइट : रूट फाइलसिस्टम को कॉपी-ऑन-राइट का उपयोग करके बनाया जाता है, जो तैनाती को बहुत तेज, मेमोरी-सस्ते और डिस्क-सस्ते बनाता है।

यह एएफएफएस द्वारा प्रदान किया गया है, एक यूनियन फाइल सिस्टम जो डॉकर पर निर्भर करता है। आप LXC के साथ मैन्युअल रूप से AUFS सेट कर सकते हैं, लेकिन डॉकर इसे एक मानक के रूप में उपयोग करता है।

5) लॉगिंग : प्रत्येक प्रक्रिया कंटेनर के मानक धाराओं (stdout / stderr / stdin) को एकत्र किया जाता है और वास्तविक समय या बैच पुनर्प्राप्ति के लिए लॉग इन किया जाता है।

डॉकर यह प्रदान करता है।

6) परिवर्तन प्रबंधन : एक कंटेनर की फाइलसिस्टम में परिवर्तन एक नई छवि में किया जा सकता है और अधिक कंटेनर बनाने के लिए फिर से उपयोग किया जा सकता है। कोई टेम्प्लेटिंग या मैनुअल कॉन्फ़िगरेशन की आवश्यकता नहीं है।

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

7) इंटरएक्टिव शेल : डॉकटर एक छद्म टीटी आवंटित कर सकता है और किसी भी कंटेनर के मानक इनपुट के साथ संलग्न कर सकता है, उदाहरण के लिए एक फेंकने वाला इंटरैक्टिव शेल चलाने के लिए।

LXC पहले से ही यह प्रदान करता है।


मैंने केवल एलएक्ससी और डॉकर के बारे में सीखना शुरू किया, इसलिए मैं किसी भी सुधार या बेहतर उत्तर का स्वागत करूंगा।


35
IMHO, यह उत्तर बिंदु को याद करता है। डॉकर उन विशेषताओं को "प्रदान" नहीं करता है; यह केवल उन्हें तुच्छ उपयोग करने के लिए आसान बनाता है। यदि हम नाइटपिकि बनना चाहते हैं, तो हम कह सकते हैं कि एलएक्ससी अलगाव प्रदान नहीं करता है: नेमस्पेस इसे प्रदान करते हैं, और एलएक्ससी केवल एक कमोडिटी यूजरलैंड टूल है, जो उन्हें मूल unshareटूल (या सीधे clone()सीसॉल) के साथ उपयोग करना आसान बनाता है । इसी तरह, डॉकर उन चीजों को इस्तेमाल करना आसान बनाता है (और मेज पर कई और सुविधाएँ लाता है, जैसे छवियों को आगे बढ़ाने / खींचने की क्षमता)। मेरा 2 सी।
१६:१३ बजे १३:१३ पर जिप्टज्जो

6
@jpetazzo: LXC वास्तव में बहुत आसान है, डॉकर इसे कैसे आसान बनाता है (इसके अलावा अन्य सुविधाओं को जोड़ना जैसे कि धक्का देना और चित्र खींचना)?
फ्लिम्स

31
@ फ़ीलम: मुझे एडमिन पत्रिका के अंक 16 में तुलना पसंद है , पी। 34: Docker LXC को कुछ अन्य सहायक तकनीकों के साथ मिलकर बंडल करता है और इसे एक आसान-से-उपयोग कमांड-लाइन इंटरफ़ेस में लपेटता है। कंटेनर का उपयोग करते हुए की तरह सिर्फ आदेशों के साथ Git का उपयोग करने की कोशिश की तरह एक सा है update-indexऔर read-treeतरह परिचित उपकरण के बिना, add, commit, और merge। Docker LXC के "प्लंबिंग" के ऊपर "पोर्सिलेन" की वह परत प्रदान करता है, जिससे आप उच्च स्तर की अवधारणाओं के साथ काम कर सकते हैं और निम्न-स्तरीय विवरणों के बारे में कम चिंता कर सकते हैं।
0xC0000022L 20

4
मैं एक डॉक कंटेनर और LXC कंटेनर के अंदर UnixBench बेंचमार्क चलाता था, वही OS चला रहा था, और LXC ने स्कोर में उत्कृष्ट प्रदर्शन किया है। एलएक्ससी पर आधारित होने के नाते, मैं अपने परिणामों के बारे में बहुत हैरान हूं।
जकार्ता

7
यह मुझे प्रतीत होता है कि डॉकर का धीमा प्रदर्शन डिस्क I / O से संबंधित था, इसलिए शायद AUFS को अपनाने के कारण।
जकार्ता

16

उपरोक्त पोस्ट और उत्तर तेजी से दिनांकित हो रहे हैं क्योंकि LXD का विकास LXC को बढ़ाता है । हाँ, मुझे पता है कि डॉकर अभी भी खड़ा नहीं है।

LXD अब LXC कंटेनर छवियों के लिए एक रिपॉजिटरी को लागू करता है जिसे एक उपयोगकर्ता पुश या पुल टू योगदान या पुन: उपयोग कर सकता है।

LXD के लिए LXD की रीस्ट एपीआई अब बहुत सरल कमांड सिंटैक्स का उपयोग करके LXC कंटेनरों के स्थानीय और दूरस्थ निर्माण / परिनियोजन / प्रबंधन को सक्षम बनाती है

LXD की मुख्य विशेषताएं हैं:

  • डिजाइन द्वारा सुरक्षित (अप्राप्त कंटेनर, संसाधन प्रतिबंध और बहुत कुछ)
  • स्केलेबल (अपने लैपटॉप पर कंटेनरों से लेकर गणना के नोड्स तक)
  • सहज (सरल, स्पष्ट एपीआई और कुरकुरा कमांड लाइन अनुभव)
  • छवि आधारित (कोई और अधिक वितरण टेम्पलेट, केवल अच्छा, विश्वसनीय चित्र) लाइव माइग्रेशन

नहीं है NCLXD ओपनस्टैक अभी प्लगइन ओपनस्टैक की इजाजत दी तैनात करने के लिए उपयोग करने के लिए LXD / बजाय केवीएम का उपयोग कर, VMware आदि की ओपनस्टैक में VMs के रूप में LXC कंटेनर का प्रबंधन

हालांकि, NCLXD पारंपरिक HW VMs और LXC VMs के मिश्रण के हाइब्रिड क्लाउड को भी सक्षम बनाता है।

OpenStack nclxd प्लगइन समर्थित सुविधाओं की एक सूची में शामिल हैं:

stop/start/reboot/terminate container
Attach/detach network interface
Create container snapshot
Rescue/unrescue instance container
Pause/unpause/suspend/resume container
OVS/bridge networking
instance migration
firewall support

जब तक उबंटू 16.04 अप्रैल 2016 में जारी किया जाता है, तब तक इसमें ब्लॉक डिवाइस सपोर्ट, लाइव-माइग्रेशन सपोर्ट जैसे अतिरिक्त कूल फीचर होंगे


4

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

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


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

डॉकर छवियों को परतों में बनाया गया है। दानेदार शब्दों में रखने के लिए एक बिंदु तक सभी परिवर्तन तब होते हैं जब एक परत शुरू होती है, उस बिंदु तक बनाई गई छवि की परतों में मौजूद होती है। उसके बाद किए गए कोई भी बदलाव अगली और ऊपर की परतों में जोड़े जाते हैं। तो, नई परत आधार परत से जुड़ी हुई है। मुझे नहीं लगता कि एक ही नई परत को अतिरिक्त परिवर्तनों के साथ एक अलग आधार परत में जोड़ा जा सकता है। हालाँकि, यदि कई इकाइयाँ एकरूपता बनाए रखना चाहती हैं और एक ही आधार परतें हैं, तो एक ही अवस्था में पहुँचने के लिए केवल नई परतें ही इन संस्थाओं को दी जानी चाहिए।
div

हालांकि, मैं docker के वर्तमान घटनाक्रमों पर अपडेट नहीं हूं और docker की छवि कार्यान्वयन में परिवर्तन हो सकते हैं जो उपरोक्त टिप्पणी में शामिल नहीं हैं।
div

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

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

0

इस पिथियर को रखने के लिए, यह पहले से ही पूछा गया है और ऊपर उत्तर दिया गया है

हालांकि मैं वापस कदम रखूंगा और इसे थोड़ा अलग तरीके से जवाब दूंगा, डॉक इंजन खुद अपने एक एक्स्ट्रा के रूप में ऑर्केस्ट्रेशन जोड़ता है और यह विघटनकारी हिस्सा है। एक बार जब आप कई कंटेनर इंजनों में 'कहीं' कंटेनर के संयोजन के रूप में एक ऐप चलाना शुरू करते हैं तो यह वास्तव में रोमांचक हो जाता है। मजबूत, क्षैतिज स्केलिंग, अंतर्निहित हार्डवेयर से पूरी तरह से अमूर्त, मैं पर और पर जा सकता है ...

इसका न केवल डॉकटर जो आपको यह देता है, वास्तव में डी वास्तविक कंटेनर ऑर्केस्ट्रेशन मानक कुबेरनेट्स है जो बहुत सारे स्वादों में आता है, एक डॉकटर एक, लेकिन ओपनशिफ्ट, सूस, एज़्योर, एडब्ल्यूएस ...

फिर K8S के नीचे वैकल्पिक कंटेनर इंजन हैं; दिलचस्प हैं डॉकटर और CRIO - हाल ही में निर्मित, डेमलेस, जिसका उद्देश्य विशेष रूप से कुबेरनेट्स या अपरिपक्व के लिए एक कंटेनर इंजन के रूप में है। इसके बीच प्रतिस्पर्धा है कि मुझे लगता है कि कंटेनर इंजन के लिए वास्तविक दीर्घकालिक विकल्प होगा।

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