मैं विकास और तैनाती के लिए उबंटू का उपयोग करता हूं और एक अलग वातावरण बनाने की आवश्यकता है।
मैं इस उद्देश्य के लिए या तो वैग्रांत या डॉकर पर विचार कर रहा हूं। पेशेवरों और विपक्ष क्या हैं, या ये समाधान कैसे तुलना करते हैं?
मैं विकास और तैनाती के लिए उबंटू का उपयोग करता हूं और एक अलग वातावरण बनाने की आवश्यकता है।
मैं इस उद्देश्य के लिए या तो वैग्रांत या डॉकर पर विचार कर रहा हूं। पेशेवरों और विपक्ष क्या हैं, या ये समाधान कैसे तुलना करते हैं?
जवाबों:
यदि आपका उद्देश्य अलगाव है, तो मुझे लगता है कि डॉकर वह है जो आप चाहते हैं।
वैग्रंट एक वर्चुअल मशीन मैनेजर है। यह आपको वर्चुअल मशीन कॉन्फ़िगरेशन के साथ-साथ प्रोविज़निंग की स्क्रिप्ट करने की अनुमति देता है। हालाँकि, यह अभी भी एक वर्चुअल मशीन है जो एक विशाल ओवरहेड के साथ VirtualBox (या अन्य) पर निर्भर करता है । इसके लिए आपको एक हार्ड ड्राइव फ़ाइल की आवश्यकता होती है जो बहुत बड़ी हो सकती है, इसमें बहुत सारे रैम लगते हैं, और प्रदर्शन बहुत अच्छा नहीं हो सकता है।
दूसरी तरफ डॉकटर कर्नेल cgroup और LXC के माध्यम से नामस्थान का उपयोग करता है । इसका मतलब है कि आप एक ही कर्नेल होस्ट और एक ही फाइल सिस्टम के रूप में उपयोग कर रहे हैं। आप docker build
अपने कंटेनर के प्रोविजनिंग और कॉन्फ़िगरेशन को संभालने के लिए कमांड के साथ Dockerfile का उपयोग कर सकते हैं । आपके पास डॉक्सफ़ॉकर डॉट कॉम पर एक उदाहरण है कि कैसे अपने डॉकरफ़ाइल बनाने के लिए; यह बहुत सहज है।
वैग्रंट का उपयोग करने का एकमात्र कारण यदि आप अपने उबंटू बॉक्स पर बीएसडी, विंडोज या अन्य गैर-लिनक्स विकास करना चाहते हैं। अन्यथा, डॉकर के लिए जाएं।
डिस्क्लेमर: मैंने वैग्रांट लिखा है! लेकिन क्योंकि मैंने Vagrant लिखा था, मैं अपना ज्यादातर समय DevOps की दुनिया में रहकर बिता रहा हूं, जिसमें डॉकर जैसे सॉफ्टवेयर शामिल हैं। मैं वैग्रेंट का उपयोग करने वाली कई कंपनियों के साथ काम करता हूं और कई डॉकर का उपयोग करते हैं, और मैं देखता हूं कि दोनों कैसे परस्पर क्रिया करते हैं।
इससे पहले कि मैं बहुत ज्यादा बात करूं, एक सीधा जवाब: आपके विशिष्ट परिदृश्य में (खुद अकेले काम करते हुए, लिनक्स पर काम करते हुए, डॉकटर को प्रोडक्शन में इस्तेमाल करते हुए), आप अकेले डॉकर से चिपक सकते हैं और चीजों को सरल बना सकते हैं। कई अन्य परिदृश्यों में (मैं आगे चर्चा करता हूं), यह इतना आसान नहीं है।
वैगरेंट की डॉकटर से सीधे तुलना करना सही नहीं है। कुछ परिदृश्यों में, वे ओवरलैप करते हैं, और विशाल बहुमत में, वे नहीं करते हैं। वास्तव में, अधिक उपयुक्त तुलना Vagrant बनाम Boot2Docker (न्यूनतम OS जो डॉकर को चला सकती है) की तरह होगी। वैगरेट सार के मामले में डॉकर से ऊपर का स्तर है, इसलिए यह ज्यादातर मामलों में उचित तुलना नहीं है।
विक्रांत ने विकास के उद्देश्य से ऐप / सेवाओं को चलाने के लिए चीजों को लॉन्च किया। यह VirtualBox, VMware पर हो सकता है। यह AWS, OpenStack की तरह रिमोट हो सकता है। उन लोगों के भीतर, यदि आप कंटेनरों का उपयोग करते हैं, तो वैग्रैंट परवाह नहीं करता है, और गले लगाता है: यह स्वचालित रूप से स्थापित कर सकता है, नीचे खींच सकता है, निर्माण कर सकता है, और डॉक कंटेनर को चला सकता है, उदाहरण के लिए। Vagrant 1.6 के साथ, Vagrant में docker- आधारित विकास का वातावरण है , और Docker का उपयोग लिनक्स, मैक और विंडोज पर Vagrant के समान वर्कफ़्लो के साथ करने का समर्थन करता है। वैगरेंट यहां डॉकर को बदलने की कोशिश नहीं करता है, यह डॉकर प्रथाओं को गले लगाता है।
डॉकर विशेष रूप से डॉकर कंटेनर चलाता है। यदि आप सीधे वैग्रांत से तुलना कर रहे हैं: यह विशेष रूप से अधिक विशिष्ट है (केवल डॉकटर कंटेनर चला सकता है), कम लचीला (लिनक्स या लिनक्स होस्ट की आवश्यकता है) समाधान। बेशक अगर आप उत्पादन या सीआई की बात कर रहे हैं, तो वैग्रांत की कोई तुलना नहीं है! वैग्रैंट इन वातावरणों में नहीं रहते हैं, और इसलिए डॉकर का उपयोग किया जाना चाहिए।
यदि आपका संगठन अपनी सभी परियोजनाओं के लिए केवल डॉकटर कंटेनर चलाता है और केवल डेवलपर्स लिनक्स पर चल रहा है, तो ठीक है, डॉकर निश्चित रूप से आपके लिए काम कर सकता है!
अन्यथा, मुझे अकेले डॉकर का उपयोग करने का प्रयास करने का कोई लाभ नहीं दिखता है, क्योंकि आप बहुत कुछ खो देते हैं, जो वैग्रांत को पेश करना है, जिसके वास्तविक व्यवसाय / उत्पादकता लाभ हैं:
Vagrant VirtualBox, VMware, AWS, OpenStack, आदि मशीनों को लॉन्च कर सकता है। इससे कोई फर्क नहीं पड़ता कि आपको क्या चाहिए, वैग्रंट इसे लॉन्च कर सकता है। यदि आप डॉकर का उपयोग कर रहे हैं, तो वैगरेंट इनमें से किसी पर भी डॉकर को स्थापित कर सकता है, ताकि आप उनका उपयोग उस उद्देश्य के लिए कर सकें।
Vagrant आपके सभी प्रोजेक्ट्स के लिए एक एकल वर्कफ़्लो है। या कोई दूसरा तरीका लगाने के लिए, यह सिर्फ एक बात है कि लोगों को एक परियोजना को चलाना सीखना है चाहे वह डॉकटर कंटेनर में हो या नहीं। यदि, उदाहरण के लिए, भविष्य में, एक प्रतियोगी डोकर के साथ सीधे प्रतिस्पर्धा करने के लिए उठता है, तो वैग्रैंट भी इसे चला सकेगा।
वैग्रंट विंडोज (एक्सपी पर वापस), मैक (10.5 पर वापस) और लिनक्स (कर्नेल 2.6 पर) पर काम करता है। तीनों मामलों में, वर्कफ़्लो समान है। यदि आप डॉकर का उपयोग करते हैं, तो वैग्रंट एक मशीन (वीएम या रिमोट) लॉन्च कर सकता है जो इन तीनों प्रणालियों में डोकर को चला सकता है।
वैग्रांत जानता है कि कुछ उन्नत या गैर-तुच्छ चीजों को कैसे कॉन्फ़िगर करना है जैसे कि नेटवर्किंग और फ़ोल्डर्स को सिंक करना। उदाहरण के लिए: Vagrant जानता है कि किसी मशीन या फ़ॉरवर्ड पोर्ट पर स्टेटिक IP कैसे अटैच करना है, और कॉन्फ़िगरेशन वही है जो आप सिस्टम का उपयोग करते हैं (VirtualBox, VMware, आदि) सिंक किए गए फ़ोल्डरों के लिए, कोई फर्क नहीं पड़ता है, Vagrant आपके स्थानीय को प्राप्त करने के लिए कई तंत्र प्रदान करता है। दूरस्थ मशीन पर फ़ाइलें (वर्चुअलबॉक्स साझा किए गए फ़ोल्डर, NFS, rsync, सांबा [प्लगइन], आदि)। यदि आप डॉकर का उपयोग कर रहे हैं, यहां तक कि वैकर के बिना वीएम के साथ डॉकर भी, तो आपको मैन्युअल रूप से ऐसा करना होगा या उन्हें इस मामले में वैग्रंट को फिर से करना होगा।
वैग्रांट 1.6 में डॉकटर-आधारित विकास वातावरण के लिए प्रथम श्रेणी का समर्थन है । यह लिनक्स पर एक वर्चुअल मशीन लॉन्च नहीं करेगा, और स्वचालित रूप से मैक और विंडोज पर एक वर्चुअल मशीन लॉन्च करेगा। अंतिम परिणाम यह है कि डॉकर के साथ काम करना सभी प्लेटफार्मों पर एक समान है, जबकि वैग्रैंट अभी भी नेटवर्किंग, सिंक किए गए फ़ोल्डर, आदि जैसी चीजों के थकाऊ विवरणों को संभालता है।
विशिष्ट काउंटर तर्कों को संबोधित करने के लिए जो मैंने वैगरेंट के बजाय डॉकर का उपयोग करने के पक्ष में सुना है:
"यह कम चलने वाले भाग हैं" - हां, यह हो सकता है, अगर आप हर प्रोजेक्ट के लिए विशेष रूप से डॉकर का उपयोग करते हैं। फिर भी, यह डॉकर लॉक-इन के लिए लचीलेपन का त्याग कर रहा है। यदि आप कभी भी किसी भी परियोजना, अतीत, वर्तमान, या भविष्य के लिए डॉकटर का उपयोग नहीं करने का निर्णय लेते हैं, तो आपके पास अधिक चलने वाले हिस्से होंगे। यदि आपने वैग्रंट का उपयोग किया था, तो आपके पास एक चलता-फिरता हिस्सा है जो बाकी का समर्थन करता है।
"यह तेज है!" - एक बार जब आपके पास होस्ट है जो लिनक्स कंटेनर चला सकता है, तो डॉकटर कंटेनर चलाने में निश्चित रूप से तेज है, क्योंकि किसी भी वर्चुअल मशीन को लॉन्च करना होगा। लेकिन वर्चुअल मशीन (या रिमोट मशीन) लॉन्च करना एक बार की लागत है। दिन के दौरान, अधिकांश वैगरेंट उपयोगकर्ता वास्तव में अपने वीएम को कभी नष्ट नहीं करते हैं। यह विकास के वातावरण के लिए एक अजीब अनुकूलन है। उत्पादन में, जहां डॉकर वास्तव में चमकता है, मैं जल्दी से कंटेनर को नीचे / ऊपर स्पिन करने की आवश्यकता समझता हूं।
मुझे उम्मीद है कि अब यह देखने के लिए स्पष्ट है कि यह बहुत मुश्किल है, और मुझे विश्वास है कि सही नहीं है, डॉकर की तुलना वैग्रांट से कर सकते हैं। देव वातावरण के लिए, वैग्रांट अधिक सार, अधिक सामान्य है। डॉकर (और विभिन्न तरीकों से आप इसे वैग्रंट की तरह व्यवहार कर सकते हैं) वैग्रंट का एक विशिष्ट उपयोग मामला है, वैगरेंट को जो कुछ भी पेश करना है उसे अनदेखा करना।
निष्कर्ष में: अत्यधिक विशिष्ट उपयोग के मामलों में, डॉकर निश्चित रूप से वैग्रैंट के लिए एक संभावित प्रतिस्थापन है। ज्यादातर उपयोग के मामलों में, यह नहीं है। वैग्रांट डॉकटर के आपके उपयोग में बाधा नहीं है; यह वास्तव में वही करता है जो उस अनुभव को सहज बना सके। अगर आपको लगता है कि यह सच नहीं है, तो मुझे चीजों को बेहतर बनाने के लिए सुझाव लेने में खुशी हो रही है, क्योंकि वैग्रंट का लक्ष्य किसी भी सिस्टम के साथ समान रूप से काम करना है।
आशा है, इससे स्थिति स्पष्ट हो जाएगी!
vagrant provision
) अपग्रेड कर सकते हैं ।
मैं डॉकर का लेखक हूं।
संक्षिप्त उत्तर यह है कि यदि आप मशीनों का प्रबंधन करना चाहते हैं, तो आपको वैग्रंट का उपयोग करना चाहिए। और यदि आप एप्लिकेशन वातावरण बनाना और चलाना चाहते हैं, तो आपको डॉकर का उपयोग करना चाहिए।
वैग्रंट वर्चुअल मशीनों के प्रबंधन के लिए एक उपकरण है। डॉकर हल्के कंटेनर में पैकेजिंग करके अनुप्रयोगों के निर्माण और तैनाती के लिए एक उपकरण है। एक कंटेनर अपनी निर्भरता (निष्पादनयोग्य, लाइब्रेरी, कॉन्फ़िगरेशन फ़ाइलें, आदि) के साथ बहुत अधिक किसी भी सॉफ़्टवेयर घटक को पकड़ सकता है, और इसे गारंटी और दोहराए जाने वाले रनटाइम वातावरण में निष्पादित कर सकता है। यह आपके ऐप को एक बार बनाने और कहीं भी तैनात करने के लिए बहुत आसान बनाता है - आपके लैपटॉप पर परीक्षण के लिए, फिर लाइव तैनाती के लिए अलग-अलग सर्वरों आदि पर।
यह एक आम गलत धारणा है कि आप केवल लिनक्स पर डॉकर का उपयोग कर सकते हैं। वह गलत है; आप मैक और विंडोज पर डॉकर भी इंस्टॉल कर सकते हैं। मैक पर स्थापित होने पर, डॉकर एक छोटे लिनक्स वीएम (डिस्क पर 25 एमबी!) बंडल करता है, जो आपके कंटेनर के लिए आवरण के रूप में कार्य करता है। एक बार स्थापित होने के बाद यह पूरी तरह से पारदर्शी है; आप डोकर कमांड-लाइन का बिल्कुल उसी तरह से उपयोग कर सकते हैं। यह आपको दोनों दुनिया का सर्वश्रेष्ठ देता है: आप कंटेनरों का उपयोग करके अपने एप्लिकेशन का परीक्षण और विकास कर सकते हैं, जो बहुत हल्के, परीक्षण में आसान और आसानी से घूमने वाले हैं (उदाहरण के लिए देखें https://hub.docker.com के साथ पुन: प्रयोज्य कंटेनर साझा करने के लिए Docker समुदाय), और आपको वर्चुअल मशीनों के प्रबंधन के लिए नॉटी-ग्रिट्टी विवरणों के बारे में चिंता करने की ज़रूरत नहीं है, जो कि वैसे भी अंत में एक साधन हैं।
सिद्धांत रूप में, डॉकर के लिए एक अमूर्त परत के रूप में वैग्रंट का उपयोग करना संभव है। मैं इसके लिए दो कारणों से सलाह देता हूं:
सबसे पहले, वोकरेंट डॉकर के लिए एक अच्छा अमूर्त नहीं है। वैग्रंट को वर्चुअल मशीनों का प्रबंधन करने के लिए डिज़ाइन किया गया था। डॉकर को एक एप्लिकेशन रनटाइम का प्रबंधन करने के लिए डिज़ाइन किया गया था। इसका मतलब यह है कि डोकर, डिजाइन के अनुसार, समृद्ध तरीकों से एक आवेदन के साथ बातचीत कर सकता है, और आवेदन क्रम के बारे में अधिक जानकारी है। डॉकर में प्राइमिटिव्स प्रक्रियाएं, लॉग स्ट्रीम, पर्यावरण चर और घटकों के बीच नेटवर्क लिंक हैं। वैग्रंट में प्राइमिटिव मशीन, ब्लॉक डिवाइस और एसश कीज़ हैं। वैग्रंट बस स्टैक में कम बैठता है, और एक कंटेनर के साथ बातचीत करने का एकमात्र तरीका यह है कि यह सिर्फ एक और तरह की मशीन है, जिसे आप "बूट" और "लॉग इन" कर सकते हैं। तो, यकीन है, आप एक डॉकर प्लगइन के साथ "आवारा" टाइप कर सकते हैं और कुछ सुंदर होगा। क्या यह डॉकटर क्या कर सकता है, इसकी पूरी चौड़ाई के लिए एक विकल्प है। कुछ दिनों के लिए देशी डॉकटर आज़माएं और खुद देखें :)
दूसरा, लॉक-इन तर्क। "यदि आप वैग्रांट को अमूर्त के रूप में उपयोग करते हैं, तो आप डॉकर में बंद नहीं होंगे!"। वैग्रांट के दृष्टिकोण से, जिसे मशीनों को प्रबंधित करने के लिए डिज़ाइन किया गया है, यह एकदम सही समझ में आता है: क्या कंटेनर सिर्फ दूसरी तरह की मशीन नहीं हैं? अमेज़ॅन EC2 और VMware की तरह, हमें सावधान रहना चाहिए कि हम किसी विशेष विक्रेता को अपने प्रावधान टूल को न बांधें! यह लॉक-इन बनाने के लिए बेहतर होगा कि यह सब वैग्रांत के साथ दूर हो जाए। सिवाय इसके कि डोकर की बात पूरी तरह से याद आती है। डॉकर मशीनों का प्रावधान नहीं करता है; यह आपके एप्लिकेशन को हल्के पोर्टेबल रनटाइम में लपेटता है जिसे कहीं भी गिराया जा सकता है।
आप अपने आवेदन के लिए जो रनटाइम चुनते हैं, उसका आपके मशीनों के प्रावधान से कोई लेना-देना नहीं है! उदाहरण के लिए, यह उन मशीनों के लिए अनुप्रयोगों को तैनात करने के लिए बहुत बार-बार होता है जो किसी और द्वारा प्रावधानित होती हैं (उदाहरण के लिए आपके सिस्टम प्रशासक द्वारा तैनात EC2 उदाहरण, शायद वैग्रंट का उपयोग करके), या नंगे धातु की मशीनों के लिए जो वैग्रैंट बिल्कुल भी प्रावधान नहीं कर सकती हैं। इसके विपरीत, आप Vagrant का उपयोग उन मशीनों का प्रावधान करने के लिए कर सकते हैं जिनका आपके एप्लिकेशन को विकसित करने से कोई लेना-देना नहीं है - उदाहरण के लिए एक तैयार-से-उपयोग किया जाने वाला Windows IIS बॉक्स या कुछ और। या आप उन परियोजनाओं के लिए मशीनों का प्रावधान करने के लिए वैगरेंट का उपयोग कर सकते हैं जो डॉकर का उपयोग नहीं करते हैं - शायद वे उदाहरण के लिए निर्भरता प्रबंधन और सैंडबॉक्सिंग के लिए रूबीज और आरवीएम के संयोजन का उपयोग करते हैं।
संक्षेप में: Vagrant मशीनों के प्रबंधन के लिए है, और डॉकर अनुप्रयोग वातावरण बनाने और चलाने के लिए है।
मैं अपने उत्तर को स्वीकार करते हुए कहता हूं कि मुझे डॉकटर के साथ कोई अनुभव नहीं है, जो कि एक बहुत ही स्पष्ट समाधान है जो बहुत ही कर्षण प्राप्त कर रहा है।
मेरे पास वैग्रांत के साथ अनुभव की एक अच्छी मात्रा है और अत्यधिक अनुशंसा कर सकते हैं। यह निश्चित रूप से एलएक्ससी आधारित के बजाय वीएम आधारित होने के संदर्भ में एक अधिक भारी समाधान है। हालाँकि, मैंने एक अच्छा लैपटॉप (8 जीबी रैम, i5 / i7 सीपीयू) पाया है जिसमें विकास टूलिंग के साथ-साथ Vagrant / VirtualBox का उपयोग करके VM को चलाने में कोई परेशानी नहीं है।
वैग्रांट के साथ वास्तव में महान चीजों में से एक है कॉन्फ़िगरेशन को स्वचालित करने के लिए पपेट / शेफ / शेल स्क्रिप्ट के साथ एकीकरण । यदि आप अपने उत्पादन वातावरण को कॉन्फ़िगर करने के लिए इन विकल्पों में से एक का उपयोग कर रहे हैं, तो आप एक विकास वातावरण बना सकते हैं जो कि आपके लिए समान है, जैसा कि आप प्राप्त करने जा रहे हैं, और यह वही है जो आप चाहते हैं।
वैग्रांट के साथ दूसरी बड़ी बात यह है कि आप अपने एप्लीकेशन कोड के साथ अपने वैग्रांटफाइल का संस्करण बना सकते हैं। इसका अर्थ है कि आपकी टीम के बाकी सभी लोग इस फ़ाइल को साझा कर सकते हैं और आपको गारंटी है कि हर कोई समान पर्यावरण कॉन्फ़िगरेशन के साथ काम कर रहा है।
दिलचस्प बात यह है कि वैग्रैंट और डॉकर वास्तव में तारीफ के काबिल हो सकते हैं। विभिन्न वर्चुअलाइजेशन प्रदाताओं का समर्थन करने के लिए वैग्रंट को बढ़ाया जा सकता है, और यह संभव हो सकता है कि डॉकर एक ऐसा प्रदाता है जिसे निकट भविष्य में समर्थन मिलता है। विषय पर हालिया चर्चा के लिए https://github.com/dotcloud/docker/issues/404 देखें ।
वे बहुत पूरक हैं।
मैं कई महीनों से अपनी सभी परियोजनाओं के लिए वर्चुअलबॉक्स, वैग्रांट और डॉकर के संयोजन का उपयोग कर रहा हूं और निम्नलिखित लाभों को दृढ़ता से महसूस किया है।
वैग्रान्ट में आप पूरी तरह से किसी भी शेफ सोलो प्रोविजनिंग से पूरी तरह से दूर रह सकते हैं और आपको बस एक छोटी सी शेल स्क्रिप्ट चलाने वाली मशीन तैयार करने के लिए अपनी योनि फाइल की जरूरत है। इसका मतलब है कि हर प्रोजेक्ट के लिए मेरा वैग्रांटफाइल्स लगभग समान और बहुत ही सरल है।
यहाँ एक विशिष्ट Vagrantfile है
# -*- mode: ruby -*-
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "mark2"
config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
[3000, 5000, 2345, 15672, 5672, 15674, 27017, 28017, 9200, 9300, 11211, 55674, 61614, 55672, 5671, 61613].each do |p|
config.vm.network :forwarded_port, guest: p, host: p
end
config.vm.network :private_network, ip: "192.168.56.20"
config.vm.synced_folder ".", "/vagrant", :type => "nfs"
config.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", "2048"]
vb.customize ["modifyvm", :id, "--cpus", "2"]
end
# Bootstrap to Docker
config.vm.provision :shell, path: "script/vagrant/bootstrap", :privileged => true
# Build docker containers
config.vm.provision :shell, path: "script/vagrant/docker_build", :privileged => true
# Start containers
# config.vm.provision :shell, path: "script/vagrant/docker_start", :privileged => true
end
बूटस्ट्रैप फ़ाइल जो डॉक स्थापित करता है वह इस तरह दिखता है
#!/usr/bin/env bash
echo 'vagrant ALL= (ALL:ALL) NOPASSWD: ALL' >> /etc/sudoers
apt-get update -y
apt-get install htop -y
apt-get install linux-image-extra-`uname -r` -y
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list
apt-get update -y
apt-get install lxc-docker -y
apt-get install curl -y
अब सभी सेवाओं को प्राप्त करने के लिए मुझे चलाने की आवश्यकता है मेरे पास एक docker_start स्क्रिप्ट है जो इस तरह से कुछ देख रही है
#!/bin/bash
cd /vagrant
echo Starting required service containers
export HOST_NAME=192.168.56.20
# Start MongoDB
docker run --name=mongodb --detach=true --publish=27017:27017 --publish=28017:28017 dockerfile/mongodb
read -t5 -n1 -r -p "Waiting for mongodb to start..." key
# Start rabbitmq
docker run --name=rabbitmq --detach=true --publish=5671:5671 --publish=5672:5672 --publish=55672:55672 --publish=15672:15672 --publish=15674:15674 --publish=61613:61613 --env RABBITMQ_USER=guest --env RABBITMQ_PASS=guest rabbitmq
read -t5 -n1 -r -p "Waiting for rabbitmq to start..." key
# Start cache
docker run --name=memcached --detach=true --publish=11211:11211 ehazlett/memcached
read -t5 -n1 -r -p "Waiting for cache to start..." key
# Start elasticsearch
docker run --name=elasticsearch --detach=true --publish=9200:9200 --publish=9300:9300 dockerfile/elasticsearch
read -t5 -n1 -r -p "Waiting for elasticsearch to start..." key
echo "All services started"
इस उदाहरण में मैं MongoDB, Elastisearch, RabbitMQ और Memcached चल रहा हूं
एक गैर-डॉकटर शेफ एकल विन्यास काफी अधिक जटिल होगा।
एक अंतिम बड़ा प्लस प्राप्त किया जाता है जब आप उत्पादन में आगे बढ़ रहे होते हैं, मेजबान के बुनियादी ढांचे पर विकास के माहौल का अनुवाद करते हैं जो सभी में समान होते हैं कि उनके पास बस चलाने के लिए पर्याप्त कॉन्फ़िगरेशन होता है अर्थात वास्तव में बहुत कम काम।
यदि आप रुचि रखते हैं, तो मेरी अपनी वेब साइट पर विकास के माहौल पर अधिक विस्तृत लेख है
Vagrant-lxc , Vagrant के लिए एक प्लगइन है कि चलो VXrant को प्रबंधित करने के लिए LXC का उपयोग करें। इसमें वे सभी फीचर्स नहीं हैं जो कि डिफ़ॉल्ट योनि वीएम (वर्चुअलबॉक्स) में हैं, लेकिन यह आपको डॉक कंटेनर की तुलना में अधिक लचीलापन देने की अनुमति देता है। लिंक में एक वीडियो है जो अपनी क्षमताओं को दिखा रहा है जो देखने लायक है।
वैग्रंट के साथ अब आपके पास एक प्रदाता के रूप में डॉकर हो सकता है। http://docs.vagrantup.com/v2/docker/ । वर्चुअलबॉक्स या वीएमवेयर की जगह डॉकर प्रोवाइडर का इस्तेमाल किया जा सकता है।
कृपया ध्यान दें कि आप वैगरेंट के साथ प्रावधान के लिए डॉकर का उपयोग भी कर सकते हैं। यह एक प्रदाता के रूप में डॉकर का उपयोग करने से बहुत अलग है। http://docs.vagrantup.com/v2/provisioning/docker.html
इसका मतलब है कि आप डॉकर के साथ शेफ या पपेट को बदल सकते हैं । आप डॉकर जैसे संयोजकों (वीएम) के साथ शेफ के साथ संयोजक के रूप में संयोजन का उपयोग कर सकते हैं। या आप प्रदाता के रूप में वर्चुअलबॉक्स का इस्तेमाल कर सकते हैं और डॉकर को प्रोविज़नर के रूप में।
दोनों का उपयोग करना अनुप्रयोग वितरण परीक्षण का एक महत्वपूर्ण हिस्सा है। मैं केवल डॉकर के साथ जुड़ने की शुरुआत कर रहा हूं और एक एप्लीकेशन टीम के बारे में बहुत सोच रहा हूं, जिसके पास सॉफ्टवेयर बनाने और देने में भयानक जटिलता है। एक क्लासिक फीनिक्स प्रोजेक्ट / सतत वितरण स्थिति के बारे में सोचें।
सोच कुछ इस प्रकार है:
यह मिशेल के इस कथन का तार्किक विस्तार प्रतीत होता है कि वैग्रांट फार्विन / हम्बल्स की निरंतरता वितरण में सोच के साथ संयुक्त विकास के लिए है। यदि मैं एक डेवलपर के रूप में, एकीकरण परीक्षण और अनुप्रयोग वितरण पर प्रतिक्रिया पाश को छोटा कर सकता हूं, तो उच्च गुणवत्ता और बेहतर कार्य वातावरण का पालन होगा।
तथ्य यह है कि एक डेवलपर के रूप में मैं लगातार और लगातार वीएम को कंटेनर वितरित कर रहा हूं और एप्लिकेशन का अधिक समग्र रूप से परीक्षण कर रहा हूं इसका मतलब है कि उत्पादन रिलीज को सरल बनाया जाएगा।
इसलिए मुझे लगता है कि डगर को ऐप परिनियोजन के लिए कुछ भयानक परिणामों का लाभ उठाने के एक तरीके के रूप में वैग्रांत विकसित हो रहा है।
जीत के लिए निश्चित रूप से डॉकर!
जैसा कि आप जानते हैं कि वैगरेंट वर्चुअल मशीन प्रबंधन के लिए है जबकि डॉकर सॉफ्टवेयर कंटेनर प्रबंधन के लिए है। यदि आप अंतर के बारे में नहीं जानते हैं, तो यह है: एक सॉफ्टवेयर कंटेनर उसी मशीन और कर्नेल को अन्य सॉफ़्टवेयर कंटेनरों के साथ साझा कर सकता है। कंटेनरों का उपयोग करके आप पैसे बचाते हैं क्योंकि आप कई ऑपरेटिंग सिस्टम (कर्नेल) पर संसाधनों को बर्बाद नहीं करते हैं, आप अलगाव की अच्छी डिग्री रखते हुए प्रति सर्वर अधिक सॉफ्टवेयर पैक कर सकते हैं।
बेशक अपने स्वयं के पिटफल्स और चुनौतियों के साथ देखभाल करने के लिए एक नया अनुशासन है।
डॉकर झुंड के लिए जाएं यदि आपकी आवश्यकताएं एकल मशीन संसाधनों की सीमा को पार करती हैं।
वाग्रांत (और कठपुतली) के संयोजन में डॉकर का उपयोग करने के बारे में वास्तविक ओरेकल जावा पत्रिका में एक बहुत जानकारीपूर्ण लेख है:
निष्कर्ष
क्लासिक वीएम की तुलना में डॉकर के हल्के कंटेनर तेज हैं और डेवलपर्स और सीडी और देवओप्स की पहल के हिस्से के रूप में लोकप्रिय हो गए हैं। यदि आपका उद्देश्य अलगाव है, तो डॉकर एक उत्कृष्ट विकल्प है। वैग्रंट एक वीएम मैनेजर है जो आपको व्यक्तिगत वीएम के स्क्रिप्ट कॉन्फ़िगरेशन के साथ-साथ प्रोविजनिंग करने में सक्षम बनाता है। हालांकि, यह अपेक्षाकृत बड़े ओवरहेड के साथ वर्चुअलबॉक्स (या दूसरे वीएम प्रबंधक) पर निर्भर एक वीएम को सौंप देता है। इसके लिए आपको एक हार्ड ड्राइव आइडल की आवश्यकता होती है जो बहुत बड़ा हो सकता है, इसमें बहुत अधिक रैम लगती है, और प्रदर्शन को उप-प्रकार किया जा सकता है। Docker LXC के माध्यम से कर्नेल cgroups और namespace अलगाव का उपयोग करता है। इसका मतलब है कि आप मेजबान और समान ile सिस्टम के समान कर्नेल का उपयोग कर रहे हैं। वेजेंट अमूर्तन के संदर्भ में डॉकर से ऊपर का स्तर है, इसलिए वे वास्तव में तुलनीय नहीं हैं। लक्ष्य प्रबंधन के प्रावधान के लिए पपेट जैसे विन्यास प्रबंधन उपकरण का व्यापक रूप से उपयोग किया जाता है। मौजूदा पपेट-आधारित समाधानों का पुन: उपयोग करना डॉकर के साथ आसान है। आप अपने समाधान का टुकड़ा भी कर सकते हैं, इसलिए बुनियादी ढांचे को कठपुतली के साथ प्रावधान किया गया है; मिडलवेयर, व्यवसाय एप्लिकेशन स्वयं या दोनों को डॉकयर के साथ प्रावधानित किया गया है; और डॉकर को वग्रांत ने लपेटा है। इस टूल के साथ, आप अपने परिदृश्य के लिए सबसे अच्छा काम कर सकते हैं।
DevOps http://www.javamagazine.mozaicreader.com/JulyAug2015#&pageSet=34&page=0 में डॉकटर कंटेनरों का निर्माण, उपयोग और ऑर्केस्ट्रेट कैसे करें