डॉकटर-इन-डॉकर को बुरा क्यों माना जाता है?


21

अगस्त 2013 में Jérôme Petazzoni ने Docker में Docker का निर्माण किया, dindलघु के लिए, इस Docker कंटेनरों को Docker कंटेनरों के अंदर बनाने की अनुमति दी, यह कार्यक्षमता बहुत लोकप्रिय साबित हुई जिसके परिणामस्वरूप Jérôme का GitHame रिपोजिटरी एक हज़ार से अधिक सितारों और तीन सौ फ़ॉर्क्स पर प्राप्त हुआ।

डॉकर 1.8 के रूप में, दो साल बाद अगस्त 2015 में रिलीज़ हुई, डॉकर में डॉकर को सीधे बॉक्स के बाहर डॉकटर द्वारा समर्थन दिया गया है। हालाँकि, डॉकर में डॉकर का उपयोग एक चेतावनी के साथ आता है, जो कि जेर्मे के पद से संबंधित है : अपने CI या परीक्षण परिवेश के लिए Docker-in-Docker का उपयोग करना? दो बार सोचो। जो उन कारणों पर ध्यान केंद्रित करता है कि डॉकियर में डॉकियर कंटीन्यूअस इंटीग्रेशन के लिए एक बढ़िया विकल्प क्यों नहीं है।

डॉकटर में डॉकटर का उपयोग करना क्यों बुरा माना जाता है? क्या यह कछुओं से बचने के लिए बस एक मामला है ? या प्रदर्शन के विचार?

सभी तरह से नीचे कछुए!


मैं इसके बारे में पढ़ने के अलावा अन्य docker से परिचित नहीं हूँ। लेकिन इसके बारे में सोचते हुए, ऐसा महसूस होता है कि आपके पास हार्डवेयर पर होस्ट ओएस है, जो होस्ट एक कंटेनर को लोड करता है, फिर वह कंटेनर एक और लोड करता है। बहुत सारे उपरि की तरह लगता है कि विचार एक छवि को तैनात करने के लिए है। एक तस्वीर की एक तस्वीर ... इस q के वास्तविक उत्तरों में भी दिलचस्पी है।
नो रीफंड्स नो रिटर्न

आप अपने प्रश्न का उत्तर लिंक कर रहे हैं ... या मैं कुछ याद कर रहा हूं?
आओ

जवाबों:


16

निरंतर एकीकरण चिंताएं

संक्षेप में: डॉक इन डॉकर (डिंड) अच्छी तरह से संगामिति को संभालता नहीं है।

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

अन्य चिंताएँ

ओपी द्वारा पोस्ट किए गए लिंक से, सुरक्षा संबंधी चिंताएं उत्पन्न होती हैं क्योंकि सिस्टम बहुत ही "सीएसएस-जैसे" फैशन में सुरक्षा नीतियों को लागू करने की कोशिश करेगा जहां एक निचले कंटेनर में बाहरी कंटेनर के संसाधनों तक पहुंच हो सकती है जब तक कि स्पष्ट रूप से निषिद्ध न हो। याद रखें जब आप "mywebsite.com/../another_folder/pStreet_resource.tk" जैसे कुछ करके वेब सर्वर संसाधनों तक पहुंच सकते हैं? इसके अलावा, कभी-कभी फाइल सिस्टम केवल एक-दूसरे के साथ अच्छा नहीं खेलते हैं जब वे इस तरह से नेस्टेड होते हैं।

जोड़

शुक्र है, ओपी में ब्लॉग पोस्ट के पास मुद्दे का एक अच्छा समाधान है। जब तक आपकी आवश्यकताओं को "CI / Docker पर चल रहे आपके सिस्टम से डॉक कंटेनर" बिल्ड / रन / पुश द्वारा पूरा नहीं किया जाता है, तब तक आप Docker सॉकेट (आमतौर पर) पर -vमोड का उपयोग कर सकते हैं (आमतौर पर /var/run/docker.sock:/var/run/docker.sock) आपको "साझा" डेटा वॉल्यूम तक पहुंचने की आवश्यकता है। इन कंटेनरों को माता-पिता के साथ, समकालिक IO के लिए मजबूर करने के बजाय शुरू किया जाएगा। अब आपके पास एक ही चीज़ (लगभग) डिंड के रूप में है, लेकिन बिना डाउंस के जो डॉकर के साथ आते हैं, वह कंसीडर के लिए नहीं बन रहे हैं।

संदर्भ (ओपी से): अपने CI या परीक्षण वातावरण के लिए Docker-in-Docker का उपयोग करना? दो बार सोचो।


यहाँ वर्णित दृष्टिकोण (Dood) जेनकींस के लिए में से एक उदाहरण दिया गया है, फिर भी कई मुद्दों सूचना का उपयोग करते समय यह hub.docker.com/r/psharkey/jenkins-dood
rombob

इस विवरण से मैं अभी भी वास्तव में नहीं बता सकता कि क्या मेरे मामले में डिंड से बचा जाना चाहिए ... मेरा निर्माण एजेंट डॉकटर कंटेनर में चलता है, और निम्न कार्य करता है: 1. Checkout repo.2. Start container & mount repo.3. Run some build-/test script inside container.प्रति एजेंट, कभी एक ही होता है ' डिंड-कंटेनर चल रहा है। क्या इस उपयोग-मामले में अभी भी समस्याएं हैं?
हेल्मेजो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.