डॉकटर-कंपोज का उपयोग कब करें और डॉकटर-स्वार्म का उपयोग कब करें


85

मैं डॉकर-कम्पोज और डॉकर-झुंड के बीच अंतर या समानता को समझने की कोशिश कर रहा हूं ।

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

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

मैं जो समझने की कोशिश कर रहा हूं वह है डॉकटर-झुंड सफल डॉकटर-कंपोज और ओवरले नेटवर्क कंटेनरों को जोड़ने का नया (अनुशंसित) तरीका है?

या क्या यह है कि डॉक-कंपोज़ अभी भी पूरे डॉक परिवार का एक अभिन्न अंग है और सहयोग से काम करने के लिए कंटेनरों को जोड़ने के लिए इसका उपयोग करने की उम्मीद और सलाह दी जाती है। यदि ऐसा है तो झुंड में अलग-अलग नोड्स में कंटेनरों के साथ डॉकटर-कंपोज़ काम करता है ??

या यह है कि ओवरले नेटवर्क झुंड में विभिन्न होस्टों में कंटेनरों को जोड़ने के लिए है और आंतरिक लिंक बनाने के लिए डॉकटर-कंपोज़ है?

इसके अलावा मैं यह भी देखना है कि यह डोकर प्रलेखन कि में बताया गया है --links अब और अनुशंसित नहीं और अप्रचलित जल्दी ही हो जाएगा।

मैं थोड़ा उलझन में हूँ???

आपका बहुत बहुत धन्यवाद!


10
क्या कोई भी उत्तर आपके प्रश्न का उत्तर नहीं देता है? यदि वे करते हैं, तो उनमें से एक को आपके उत्तर के रूप में स्वीकार करने के लिए चेक बॉक्स का चयन करें।
जोजी

जवाबों:


105

यह शायद कुछ परिभाषाओं के साथ शुरू करने में मदद करेगा:

  • docker-compose : कमांड संबंधित कंटेनरों के समूह को कॉन्फ़िगर और प्रबंधित करने के लिए उपयोग किया जाता है। यह एक ही एपीआई के लिए एक दृश्य है जो docker cli द्वारा उपयोग किया जाता है, इसलिए आप इसे आज्ञाओं जैसे व्यवहार के साथ पुन: उत्पन्न कर सकते हैं docker run
  • docker-compose.yml : कंटेनर के एक समूह के लिए परिभाषा फ़ाइल, docker-compose द्वारा उपयोग की जाती है और अब swarm मोड द्वारा भी।
  • झुंड मोड : एक एकल इकाई के रूप में डॉक इंजनों के एक समूह का प्रबंधन करने और ऑर्केस्ट्रेशन प्रदान करने के लिए उपयोग किया जाता है (लगातार वर्तमान स्थिति और लक्ष्य राज्य के बीच किसी भी मतभेद को ठीक करने की कोशिश कर रहा है)।
  • सेवा : झुंड के भीतर एक ही छवि और विन्यास के लिए एक या अधिक कंटेनर, कई कंटेनर स्केलेबिलिटी प्रदान करते हैं।
  • स्टैक : एक झुंड के भीतर एक या एक से अधिक सेवाएं, इन्हें डीएबी या डॉकटर-कंपोज.माइल फ़ाइल का उपयोग करके परिभाषित किया जा सकता है।
  • ब्रिज नेटवर्क : नेटवर्क एक एकल डॉकटर इंजन द्वारा प्रबंधित किया जाता है जहां कई कंटेनर एक दूसरे के साथ संवाद कर सकते हैं। आपके पास एक इंजन द्वारा प्रबंधित कई नेटवर्क हो सकते हैं, और कंटेनर को शून्य या अधिक नेटवर्क से जोड़ा जा सकता है।
  • ओवरले नेटवर्क : एक पुल नेटवर्क के समान लेकिन कई डॉक इंजनों को फैलाते हुए। उन्हें अपने राज्य को बनाए रखने के लिए एक कुंजी / मूल्य की दुकान की आवश्यकता होती है। झुंड मोड यह प्रदान करता है, लेकिन अगर झुंड मोड अक्षम है, तो आप etcd, consul, या zookeeper का भी उपयोग कर सकते हैं।
  • लिंक : कंटेनरों को एक साथ जोड़ने की एक विधि जो ब्रिड्ड नेटवर्क से पहले होती है। इसके उपयोग की अब अनुशंसा नहीं की जाती है।
  • क्लासिक झुंड : एकीकृत झुंड मोड के लिए एक पूर्ववर्ती जो कंटेनर के रूप में चलता है, कई इंजनों को एक के रूप में प्रदर्शित करने की अनुमति देता है, लेकिन ऑर्केस्ट्रेशन प्रदान नहीं करता है या अपने स्वयं के k / v स्टोर को शामिल नहीं करता है।

सवालों के जवाब देने के लिए:

docker-swarm सफल docker- रचना और ओवरले नेटवर्क कंटेनरों को जोड़ने का नया (अनुशंसित) तरीका है?

या क्या यह है कि डॉक-कंपोज़ अभी भी पूरे डॉक परिवार का एक अभिन्न अंग है और सहयोग से काम करने के लिए कंटेनरों को जोड़ने के लिए इसका उपयोग करने की उम्मीद और सलाह दी जाती है। यदि ऐसा है तो झुंड में अलग-अलग नोड्स में कंटेनरों के साथ डॉकटर-कंपोज़ काम करता है ??

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

या यह है कि ओवरले नेटवर्क झुंड में विभिन्न होस्टों में कंटेनरों को जोड़ने के लिए है और आंतरिक लिंक बनाने के लिए डॉकटर-कंपोज़ है?

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

yml फ़ाइल के संस्करण 2 से शुरू होने वाले डॉकटर-कंपोज प्रति प्रोजेक्ट के नए ब्रिड्ड नेटवर्क (निर्देशिका नाम के लिए प्रोजेक्ट डिफॉल्ट) के साथ डिफ़ॉल्ट रूप से कई कंटेनरों को एक साथ जोड़ता है। क्लासिक झुंड के साथ, जो बाहरी k / v स्टोर का उपयोग करके ओवरले नेटवर्क के लिए डिफ़ॉल्ट होगा। और एक झुंड मोड स्टैक के साथ, यह एक ओवरले नेटवर्क होगा।

डॉकटर नेटवर्क का उपयोग करना एक दूसरे के साथ कंटेनर संवाद करने का पसंदीदा तरीका है। आप कंटेनरों के समूह के लिए एक नेटवर्क चाहते हैं, जिसे आप अपने डॉकटर वातावरण के बाकी हिस्सों से अलग करना चाहते हैं। docker-compose इस नेटवर्क निर्माण को स्वचालित करता है, लेकिन आप इसे कमांड लाइन से भी कर सकते हैं docker networks create

लिंकिंग को मुख्य रूप से अंतर्निहित DNS खोज के साथ डॉक नेटवर्क द्वारा प्रतिस्थापित किया गया है। जब आप अपने docker-compose.yml से लिंक हटाते हैं, तो आपको depends_onकंटेनर स्टार्टअप ऑर्डर लागू करने के लिए उन्हें एक अनुभाग के साथ बदलना पड़ सकता है । अन्यथा, बहुत कम परिदृश्य हैं जहां लिंक करना समझ में आता है और मैंने जो भी उपयोग देखा है वह सभी पुराने दस्तावेज़ों के बाद है।


3
यह मददगार है। क्या आप कृपया परिभाषित कर सकते हैं DAB?
मैथ्यू जेम्स ब्रिग्स

3
डीएबी एक प्रायोगिक फ़ाइल प्रारूप था जिसमें कभी कर्षण नहीं हुआ। यह मूल रूप से एक v3 docker-compose.yml फ़ाइल है। docs.docker.com/compose/bundles/#bundle-file-format
BMitch

25

रचना या झुंड या झुंड ओवरले नेटवर्क

आप पाएंगे कि आपको उपरोक्त सभी का उपयोग करने की आवश्यकता है यदि आप अपने लैपटॉप आदि पर डेमो के अलावा कुछ भी कर रहे हैं।

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

कंपोज कई कंटेनरों को एक साथ लाने के लिए है। अब यह समझ में आता है कि वे एक-दूसरे से संबंधित हैं, हालांकि वे नहीं हो सकते हैं। लेकिन चलो एक विशिष्ट मामला मान लेते हैं जब कंटेनर एक-दूसरे से संबंधित सेवाओं के लिए होते हैं, तो आप उन्हें किसी तरह एक-दूसरे से बात करना चाहते हैं, लेकिन फिर भी नियंत्रण करते हैं कि वे नेटवर्क का उपयोग करके एक-दूसरे से कैसे बात करते हैं। उदाहरण के लिए, एक 3 स्तरीय ऐप लें जिसमें एक वेबसर्वर, ऐपर्वर और डीबी है। मान लें कि सभी तीन घटक डॉकटराइज़्ड हैं और आप चलने के बजाय उन्हें एक साथ लाने के लिए कंपोज़ का उपयोग कर रहे हैंdocker run..तीन बार अलग-अलग मापदंडों आदि के साथ तीनों ऊपर आएंगे, लेकिन आप यह नियंत्रित करना चाहेंगे कि वे एक-दूसरे से कैसे जुड़ें। आप चाहते हैं कि वेबसर्वर आब्जर्वर से बात कर सके, लेकिन सीधे db पर नहीं। और आप चाहते हैं कि एब्सर्वर db सर्वर कंटेनर (वेब ​​सर्वर को पिंग) से बात करें (पिंग करें)। सभी कनेक्शन दो तरह से हैं, लेकिन केवल उन सेवाओं तक ही सीमित हैं जिन्हें आप एक दूसरे के साथ संवाद करने में सक्षम होना चाहते हैं। ऐसी व्यवस्था के लिए, आप आमतौर पर 2 नेटवर्क सेटअप करते हैं - कहते हैं frontendऔर backend। वेब और ऐप कंटेनर फ्रंटएंड नेटवर्क से जुड़े हैं। ऐप और डीबी कंटेनर बैकएंड नेटवर्क से जुड़े हैं। क्योंकि db और वेब कंटेनरों के बीच कोई सामान्य नेटवर्क नहीं है, जो एक दूसरे को स्पर्श (पिंग) नहीं कर सकते, जो कि आपका इरादा है।

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

मुझे उम्मीद है कि स्पष्ट करता है।

संपादित करें: मैंने नहीं देखा कि आपको पहले से ही उत्तर मिल गया है!


1
थैंक यू @Anoop। तो मुझे लगता है कि यह सही है यदि मैं कहता हूं कि दोनों सेवाओं का उपयोग करने के लिए .yaml आधारित सेवा विवरण का उपयोग करें और इन सेवाओं को जोड़ने के लिए बनाए गए उपयोगकर्ता-परिभाषित नेटवर्क का उपयोग करें। केवल अंतर यह है कि रचना एकल डॉकटर-होस्ट पर चलने वाले कंटेनरों के सेट के लिए है और झुंड एक मल्टी होस्ट प्लेटफॉर्म के लिए है।
Shabirmean

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

8

मुझे लगता है कि आपके पास प्रत्येक के रूप में अधिकांश समझ सही है, लेकिन कुछ ट्विकिंग की आवश्यकता है।

आप सही हैं डॉकटर-कंपोज़ मल्टी-कंटेनर एप्लिकेशन को लाने के लिए है। पहले आप docker run ..हर कंटेनर को शुरू करने के लिए करते थे। आमतौर पर सूक्ष्म सेवाओं के प्रतिमानों को अपनाने वाले आधुनिक अनुप्रयोगों को दर्जनों सेवाओं से बनाया जा सकता है और इसके इस्तेमाल docker run ..से बहुत जल्द थकान दूर होगी। इसलिए डॉकटर-कंपोज़ आपको सभी कंटेनरों और उनके गुणों को व्यक्त करने की अनुमति देता है और वे एक-दूसरे से एक फाइल yamlया jsonफाइल के रूप में कैसे जुड़ते हैं, इसलिए आप इसे आसान तरीके से प्रबंधित कर सकते हैं।

तो, docker- रचना docker पारिस्थितिकी तंत्र में कंटेनर ऑर्केस्ट्रेशन हिस्सा है।

लिंक अलग-अलग हैं, वे सिर्फ डॉकटर-कंपोज़ या docker runकमांड का एक हिस्सा हैं और इसके पक्ष में पदावनत किए जाते हैं software defined networks, जिनमें overlay networksसे सिर्फ एक है।

कर्ता में झुंड शेड्यूलिंग घटक है। शेड्यूलिंग क्या है - यह कुछ भी नहीं है लेकिन यह पता लगाना है कि डॉक मेजबानों के समूह में अपने कंटेनरों को "जगह" कहां दें। आपके पास सैकड़ों सर्वरों का एक समूह हो सकता है, और आपके पास सैकड़ों कंटेनर हो सकते हैं, जिनमें से प्रत्येक एक दर्जन विभिन्न अनुप्रयोगों के लिए एक सेवा प्रदान करता है। अब इन कंटेनरों को आपके सैकड़ों सर्वरों के क्लस्टर में कैसे वितरित किया जाना चाहिए, क्या कुछ कंटेनरों को केवल कुछ मेजबानों पर रखा जाना चाहिए क्योंकि वे एक विशेष मापदंड को पूरा करते हैं या शायद वे अन्य कंटेनरों के करीब (या नहीं) होने चाहिए जो किसी तरह से संबंधित हैं ... ये सभी शेड्यूलिंग घटक का हिस्सा हैं, जो docker Swarm द्वारा किया जाता है।

मेरा सुझाव है कि आप docker.com पर आरंभ किए गए दस्तावेज़ों के माध्यम से यहां जाएं : https://docs.docker.com/engine/getstarted-voting-app/


आपका बहुत बहुत धन्यवाद। मैंने वह ट्यूटोरियल किया था। - मैं यह पता लगाने की क्या कनेक्ट कंटेनरों कि निकट से संबंधित हैं करने के लिए इस्तेमाल किए जाने की आवश्यकता के रूप में डोकर डेवलपर्स अपने आप में एक विशिष्ट सिफारिश है या नहीं कोशिश कर रहा हूँ तो लिखें या झुंड ओवरले नेटवर्क । मेरे पास दुविधा यह है कि एक नेटवर्क के माध्यम से कंटेनरों को जोड़ने का विचार है उन्हें कंपोज़ जैसी चीज़ से जोड़ने के समान नहीं है (या क्या वे समान हैं ???)। क्या यह है कि कंटेनर बंधन की तरह रचना ओवरले-नेटवर्क शैली कनेक्शन की तुलना में अधिक सुरक्षित है?
शबर्मीन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.