क्या मुझे अलग-थलग वातावरण बनाने के लिए वैग्रैंट या डॉकर का उपयोग करना चाहिए? [बन्द है]


2083

मैं विकास और तैनाती के लिए उबंटू का उपयोग करता हूं और एक अलग वातावरण बनाने की आवश्यकता है।

मैं इस उद्देश्य के लिए या तो वैग्रांत या डॉकर पर विचार कर रहा हूं। पेशेवरों और विपक्ष क्या हैं, या ये समाधान कैसे तुलना करते हैं?


27
दोनों अब दहनशील
Alp

78
आपका प्रश्न दोनों सेवाओं के लेखकों के जवाब पाने के लिए पर्याप्त भाग्यशाली है: मिशेल और सोलोमन हाइक्स
इसका चकाचौंध

4
मैं एक नया सारांश देना चाहूंगा - सवाल ज्यादातर गलत है। सही सवाल यह है: क्या मुझे अलग-थलग माहौल बनाने के लिए वैग्रैंट या डॉकटर-कंपोज का इस्तेमाल करना चाहिए? इसका उत्तर यह है कि वैग्रंट और डॉकटर-कंपोज़ पर्यावरण को वर्णन करने का एक ही कार्य करते हैं, और आपको इसके बजाय डॉकटर की तुलना वर्चुअलबॉक्स से करनी चाहिए। अंतर यह है कि वैग्रंट किसी भी वर्चुअलाइजेशन जैसे डॉकर, वीएमवेयर, विंडोज, लिनक्स या ओएसएक्स पर वर्चुअलबॉक्स का उपयोग कर सकता है, लेकिन डॉकटर-कंपोज सिर्फ लिनक्स-आधारित डॉकर छवियों का उपयोग कर सकता है।
PHZ.fi-Pharazon

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

जवाबों:


1155

यदि आपका उद्देश्य अलगाव है, तो मुझे लगता है कि डॉकर वह है जो आप चाहते हैं।

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

दूसरी तरफ डॉकटर कर्नेल cgroup और LXC के माध्यम से नामस्थान का उपयोग करता है । इसका मतलब है कि आप एक ही कर्नेल होस्ट और एक ही फाइल सिस्टम के रूप में उपयोग कर रहे हैं। आप docker buildअपने कंटेनर के प्रोविजनिंग और कॉन्फ़िगरेशन को संभालने के लिए कमांड के साथ Dockerfile का उपयोग कर सकते हैं । आपके पास डॉक्सफ़ॉकर डॉट कॉम पर एक उदाहरण है कि कैसे अपने डॉकरफ़ाइल बनाने के लिए; यह बहुत सहज है।

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


13
दुर्भायवश अभी तक नहीं। यदि आप 32 बिट सिस्टम में हैं, तो आपको डॉक चलाने के लिए 64 बिट गेस्ट सिस्टम के साथ वीएम की आवश्यकता होगी। हालाँकि, go1.1 के साथ 32 बिट सपोर्ट बेहतर मिलता है और यह संभव है कि
docker

8
मैक और विंडोज के लिए यह सही है, लेकिन डॉकटर 0.7 के बाद से, कोई भी लिनक्स डिस्ट्रो ठीक काम करता है। यदि आप एक गैर-काम करने वाले व्यक्ति के बारे में जानते हैं, तो कृपया मुझे बताएं। इसके अलावा, जब तक आपके पास मैक या विंडोज स्टैक नहीं है (जो कि संभावना नहीं है, लेकिन हो सकता है), आप डॉकर को कहीं भी नहीं चलाना चाहते हैं लेकिन लिनक्स पर। मैक पर docker क्लाइंट ठीक काम करता है, उसे जल्द ही BSD पर काम करना चाहिए और डेमन अंततः BSD, सोलारिस और मैक का समर्थन करेगा।
creack

9
यदि कोई व्यक्ति इन टिप्पणियों को पढ़ता है, तो आपको पता होना चाहिए कि Docker ने सिर्फ 12 दिन पहले ver1.0 मारा था ( blog.docker.com/2014/06/its-here-docker-1-0 ) और विभिन्न प्लेटफार्मों के एक पूरे बहुत स्थिर हैं & अभी समर्थित ( docs.docker.com/installation )
JorgeArtware

17
योनि में LXC और docker प्रावधान हैं। हालाँकि - वज्र्ट और डॉकटर मौलिक रूप से अलग चीजें हैं। वैग्रंट विशुद्ध रूप से विकास के वातावरण के लिए है, डॉकटर केवल उत्पादन और लिनक्स के लिए है।
डैनीबॉय

2
डॉकर अब विंडोज 10 प्रो और अप और विंडोज सर्वर 2016 पर काम करता है। मैंने अभी विंडोज 10 होम से विंडोज 10 प्रो में अपग्रेड किया है और डॉकटर ऐप इंस्टॉल किया है। मैं अब विंडोज 10 पर लिनक्स डॉकर्स इमेजेस चला सकता हूं। यह शानदार है!
प्रेस्टनडॉक्स 19

2339

डिस्क्लेमर: मैंने वैग्रांट लिखा है! लेकिन क्योंकि मैंने 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 में डॉकटर-आधारित विकास वातावरण के लिए प्रथम श्रेणी का समर्थन है । यह लिनक्स पर एक वर्चुअल मशीन लॉन्च नहीं करेगा, और स्वचालित रूप से मैक और विंडोज पर एक वर्चुअल मशीन लॉन्च करेगा। अंतिम परिणाम यह है कि डॉकर के साथ काम करना सभी प्लेटफार्मों पर एक समान है, जबकि वैग्रैंट अभी भी नेटवर्किंग, सिंक किए गए फ़ोल्डर, आदि जैसी चीजों के थकाऊ विवरणों को संभालता है।

विशिष्ट काउंटर तर्कों को संबोधित करने के लिए जो मैंने वैगरेंट के बजाय डॉकर का उपयोग करने के पक्ष में सुना है:

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

  • "यह तेज है!" - एक बार जब आपके पास होस्ट है जो लिनक्स कंटेनर चला सकता है, तो डॉकटर कंटेनर चलाने में निश्चित रूप से तेज है, क्योंकि किसी भी वर्चुअल मशीन को लॉन्च करना होगा। लेकिन वर्चुअल मशीन (या रिमोट मशीन) लॉन्च करना एक बार की लागत है। दिन के दौरान, अधिकांश वैगरेंट उपयोगकर्ता वास्तव में अपने वीएम को कभी नष्ट नहीं करते हैं। यह विकास के वातावरण के लिए एक अजीब अनुकूलन है। उत्पादन में, जहां डॉकर वास्तव में चमकता है, मैं जल्दी से कंटेनर को नीचे / ऊपर स्पिन करने की आवश्यकता समझता हूं।

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

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

आशा है, इससे स्थिति स्पष्ट हो जाएगी!


4
@JaredMarkell मुझे लगता है कि शायद वह एक वेब-आधारित सेवा की तलाश कर रहा है जो उसे प्रोटागॉक्स जैसी अपनी वैग्रंट मशीनों का प्रबंधन करने की अनुमति देता है ।
रयान कैनेडी

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

4
@JaredMarkell Docker के पास एक REST API docs.docker.com/reference/api/docker_remote_api
Tarnay Kálmán

3
@ Oğuz canelikdemir Vagrant इससे कहीं अधिक कर सकते हैं। बेशक, यदि आप हर परियोजना के लिए एक विशिष्ट वर्चुअल मशीन तैयार करते हैं, तो यह चलेगा। लेकिन विकास के दौरान मैं अक्सर अधिक सेवाओं / डेमॉन / सेटिंग्स (जैसे जब मैं विकास के दौरान एक परियोजना के लिए RabbitMQ का उपयोग करने का निर्णय लेता हूं) जोड़ रहा हूं। विशुद्ध रूप से वीएम दृष्टिकोण की आवश्यकता होगी कि आप एक नई छवि तैयार करें, जिसमें RabbitMQ स्थापित और कॉन्फ़िगर किया गया है, और डेवलपर्स को अपने वीएम को इस नए में बदलने के लिए मजबूर करता है। वैग्रांट के लिए - मैं योनि संधि में उपयुक्त रेखाएँ जोड़ रहा हूँ और सभी डेवलपर्स अपने वीएम को आसानी से (उपयोग करके vagrant provision) अपग्रेड कर सकते हैं ।
टॉमाज़ स्ट्रुस्कीस्की

5
(आपका मतलब "प्रकटीकरण" है, कुछ महत्वपूर्ण का खुलासा करना, "अस्वीकरण" नहीं, जिम्मेदारी से इनकार करना: english.stackexchange.com/q/115850 )
जेरी 101101

1418

मैं डॉकर का लेखक हूं।

संक्षिप्त उत्तर यह है कि यदि आप मशीनों का प्रबंधन करना चाहते हैं, तो आपको वैग्रंट का उपयोग करना चाहिए। और यदि आप एप्लिकेशन वातावरण बनाना और चलाना चाहते हैं, तो आपको डॉकर का उपयोग करना चाहिए।

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

यह एक आम गलत धारणा है कि आप केवल लिनक्स पर डॉकर का उपयोग कर सकते हैं। वह गलत है; आप मैक और विंडोज पर डॉकर भी इंस्टॉल कर सकते हैं। मैक पर स्थापित होने पर, डॉकर एक छोटे लिनक्स वीएम (डिस्क पर 25 एमबी!) बंडल करता है, जो आपके कंटेनर के लिए आवरण के रूप में कार्य करता है। एक बार स्थापित होने के बाद यह पूरी तरह से पारदर्शी है; आप डोकर कमांड-लाइन का बिल्कुल उसी तरह से उपयोग कर सकते हैं। यह आपको दोनों दुनिया का सर्वश्रेष्ठ देता है: आप कंटेनरों का उपयोग करके अपने एप्लिकेशन का परीक्षण और विकास कर सकते हैं, जो बहुत हल्के, परीक्षण में आसान और आसानी से घूमने वाले हैं (उदाहरण के लिए देखें https://hub.docker.com के साथ पुन: प्रयोज्य कंटेनर साझा करने के लिए Docker समुदाय), और आपको वर्चुअल मशीनों के प्रबंधन के लिए नॉटी-ग्रिट्टी विवरणों के बारे में चिंता करने की ज़रूरत नहीं है, जो कि वैसे भी अंत में एक साधन हैं।

सिद्धांत रूप में, डॉकर के लिए एक अमूर्त परत के रूप में वैग्रंट का उपयोग करना संभव है। मैं इसके लिए दो कारणों से सलाह देता हूं:

  • सबसे पहले, वोकरेंट डॉकर के लिए एक अच्छा अमूर्त नहीं है। वैग्रंट को वर्चुअल मशीनों का प्रबंधन करने के लिए डिज़ाइन किया गया था। डॉकर को एक एप्लिकेशन रनटाइम का प्रबंधन करने के लिए डिज़ाइन किया गया था। इसका मतलब यह है कि डोकर, डिजाइन के अनुसार, समृद्ध तरीकों से एक आवेदन के साथ बातचीत कर सकता है, और आवेदन क्रम के बारे में अधिक जानकारी है। डॉकर में प्राइमिटिव्स प्रक्रियाएं, लॉग स्ट्रीम, पर्यावरण चर और घटकों के बीच नेटवर्क लिंक हैं। वैग्रंट में प्राइमिटिव मशीन, ब्लॉक डिवाइस और एसश कीज़ हैं। वैग्रंट बस स्टैक में कम बैठता है, और एक कंटेनर के साथ बातचीत करने का एकमात्र तरीका यह है कि यह सिर्फ एक और तरह की मशीन है, जिसे आप "बूट" और "लॉग इन" कर सकते हैं। तो, यकीन है, आप एक डॉकर प्लगइन के साथ "आवारा" टाइप कर सकते हैं और कुछ सुंदर होगा। क्या यह डॉकटर क्या कर सकता है, इसकी पूरी चौड़ाई के लिए एक विकल्प है। कुछ दिनों के लिए देशी डॉकटर आज़माएं और खुद देखें :)

  • दूसरा, लॉक-इन तर्क। "यदि आप वैग्रांट को अमूर्त के रूप में उपयोग करते हैं, तो आप डॉकर में बंद नहीं होंगे!"। वैग्रांट के दृष्टिकोण से, जिसे मशीनों को प्रबंधित करने के लिए डिज़ाइन किया गया है, यह एकदम सही समझ में आता है: क्या कंटेनर सिर्फ दूसरी तरह की मशीन नहीं हैं? अमेज़ॅन EC2 और VMware की तरह, हमें सावधान रहना चाहिए कि हम किसी विशेष विक्रेता को अपने प्रावधान टूल को न बांधें! यह लॉक-इन बनाने के लिए बेहतर होगा कि यह सब वैग्रांत के साथ दूर हो जाए। सिवाय इसके कि डोकर की बात पूरी तरह से याद आती है। डॉकर मशीनों का प्रावधान नहीं करता है; यह आपके एप्लिकेशन को हल्के पोर्टेबल रनटाइम में लपेटता है जिसे कहीं भी गिराया जा सकता है।

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

संक्षेप में: Vagrant मशीनों के प्रबंधन के लिए है, और डॉकर अनुप्रयोग वातावरण बनाने और चलाने के लिए है।


396
बस इस बात पर ध्यान देना चाहता था कि इस उत्तर के वग्रान्ट पहलू गलत हैं। वैग्रैंट मशीनों के प्रबंधन के लिए नहीं है, वैग्रंट विकास के वातावरण के प्रबंधन के लिए है। तथ्य यह है कि वैग्रंट स्पिन्स मशीन ज्यादातर ऐतिहासिक है। वैग्रंट के अगले संस्करण में मेजबान या किसी वीएम (मैक, विन) पर सीधे प्रदाता के रूप में डॉकर का उपयोग करके देव वातावरण को स्पिन करने के लिए प्रथम श्रेणी का समर्थन है। यह कच्चे एलएक्ससी को भी स्पिन कर सकता है यदि कोई व्यक्ति (फिर से, मेजबान या वीएम पर) चाहता है। वैग्रांट पोर्टेबल विकास के माहौल को बनाने के लिए सबसे अच्छा काम करने में दिलचस्पी रखता है, चाहे इसका मतलब वीएम बनाना हो या न हो।
मिशेल

7
@ डेविड इसे और अधिक विस्तार से शामिल करता है: vagrantup.com/blog/…
मिशेल

48
"यह एक सामान्य गलत धारणा है कि आप केवल लिनक्स पर डॉकर का उपयोग कर सकते हैं", जबकि यह सच है, यह कहना सही है कि आप केवल डॉकर पर लिनक्स का उपयोग कर सकते हैं। अगर मैं एक टेस्ट रनर सेट करना चाहता हूं जो मेरे एप्लिकेशन को कई तरह के एनवॉइनमेंट कॉन्फिग्स (अलग-अलग डेटाबेस, पीएचपी वर्जन, बैकिंग कैशिंग वगैरह) की कवायद करता है, तो मैं आसानी से डॉकटर कंटेनरों के साथ ऐसा कर सकता हूं। लेकिन मैं यह नहीं देख सकता कि मेरा एप्लिकेशन विंडोज़ एनआईएस एनवी, या बीएसडी या ओएसएक्स पर ठीक से चलेगा या नहीं।
मिक्सोलॉजिक

10
आपका पहला बिंदु पुराना हो गया है क्योंकि वैग्रंट ने डॉकटर के
Alp

19
पद पुराना है। वैगरंट अब एक प्रदाता के रूप में डॉकर का समर्थन करता है। और कुछ वीडियो हैं जो दिखाते हैं कि आप अपने ब्लॉग पर वैगरेंट और डोकर का उपयोग कैसे कर सकते हैं ।
सरगस 15

86

मैं अपने उत्तर को स्वीकार करते हुए कहता हूं कि मुझे डॉकटर के साथ कोई अनुभव नहीं है, जो कि एक बहुत ही स्पष्ट समाधान है जो बहुत ही कर्षण प्राप्त कर रहा है।

मेरे पास वैग्रांत के साथ अनुभव की एक अच्छी मात्रा है और अत्यधिक अनुशंसा कर सकते हैं। यह निश्चित रूप से एलएक्ससी आधारित के बजाय वीएम आधारित होने के संदर्भ में एक अधिक भारी समाधान है। हालाँकि, मैंने एक अच्छा लैपटॉप (8 जीबी रैम, i5 / i7 सीपीयू) पाया है जिसमें विकास टूलिंग के साथ-साथ Vagrant / VirtualBox का उपयोग करके VM को चलाने में कोई परेशानी नहीं है।

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

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

दिलचस्प बात यह है कि वैग्रैंट और डॉकर वास्तव में तारीफ के काबिल हो सकते हैं। विभिन्न वर्चुअलाइजेशन प्रदाताओं का समर्थन करने के लिए वैग्रंट को बढ़ाया जा सकता है, और यह संभव हो सकता है कि डॉकर एक ऐसा प्रदाता है जिसे निकट भविष्य में समर्थन मिलता है। विषय पर हालिया चर्चा के लिए https://github.com/dotcloud/docker/issues/404 देखें ।


7
दोस्तों, मैंने डॉकटर के लिए एक प्रयोगात्मक योनि प्रदाता जारी किया : github.com/fgrehm/docker-provider
fgrehm

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

1
डॉकर ओएस का वर्चुअलाइजेशन है, अंतर्निहित हार्डवेयर का पुन: उपयोग कर रहा है। यह वर्चुअलाइजेशन है क्योंकि यह सार करता है और एक कंटेनर में चल रही फाइल सिस्टम, नेटवर्किंग और प्रक्रियाओं को अलग करता है।
jose.angel.jimenez

63

वे बहुत पूरक हैं।

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

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

यहाँ एक विशिष्ट 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 चल रहा हूं

एक गैर-डॉकटर शेफ एकल विन्यास काफी अधिक जटिल होगा।

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

यदि आप रुचि रखते हैं, तो मेरी अपनी वेब साइट पर विकास के माहौल पर अधिक विस्तृत लेख है

वैग्रांट / डॉकर विकास पर्यावरण को लागू करना


2
आपने वह सभी docker_start ऑर्केस्ट्रेशन किया, लेकिन कंटेनरों को एक साथ जोड़ने से परेशान नहीं हुए। क्या आप सिर्फ हार्ड-कोडेड पोर्ट नंबर के साथ जा रहे हैं क्योंकि आप इसे वैग्रांत के तहत चला रहे हैं?
शराबखोरी

6
हाय वाइनसोक्ड, ऊपर दिए गए उदाहरण में कंटेनर नहीं दिखाया गया है जो वास्तव में उन सभी सेवाओं का उपयोग करता है। यदि आप उल्लिखित ब्लॉग पोस्ट को देखते हैं, तो एक और स्क्रिप्ट स्क्रिप्ट / योनि / docker_web है जो परियोजना के लिए विकास कंटेनर को निकालती है। यह वास्तव में docker रन कमांड पर --link का उपयोग करता है और Rails प्रोजेक्ट सेवाओं से कनेक्ट करने के लिए docker इंजेक्ट किए गए पर्यावरण चर का उपयोग करता है।
मार्क स्ट्रैटमन

1
मैं दोनों उत्पादों के संभावित विलय को देख सकता हूं। पर्यावरण परीक्षण के रूप में वैगरेंट और ऐप रैपर के लिए डॉकटर। दोनों को मिलाते हुए आप एक ही ऐप या यूनिट-टेस्ट को कई एस्कीनवेयर पर टेस्ट कर सकते हैं। मुझे लगता है कि कई "परीक्षण प्लेटफार्मों सेवाओं" समय पर Vagrant + Docker का उपयोग कर रहे हैं।
m3nda

8
"वे बहुत प्रशंसा कर रहे हैं।" - दोनों वास्तव में उपयोग करने के लिए स्वतंत्र हैं।
21

2
हाय @koppor मैं पिछले तीन महीने पहले docker मशीन का इस्तेमाल किया और अभी तक इसे वापस नहीं गया है। मेरे पास समस्या यह थी कि VMW ड्राइवर का उपयोग करते समय मेरे मैक होस्ट होस्ट से VM के रनिंग डॉकटर तक फ़ोल्डर्स के बंटवारे में यह बग है। इसका मतलब यह था कि मैं मैक पर स्थानीय रूप से कोड को संपादित नहीं कर सकता था और डॉकटर कंटेनर में प्रतिबिंबित परिवर्तन थे। मुझे नहीं पता कि उन्होंने इसे अभी तक ठीक किया है, जब वे करते हैं तो मैं वास्तव में इसे बदल दूंगा। हालाँकि मैंने इस उत्तर को लिखने के बाद से अपने सभी कंटेनर ऑर्केस्ट्रेशन को डॉक करने के लिए बंद कर दिया है
मार्क स्ट्रैटमैन

53

Vagrant-lxc , Vagrant के लिए एक प्लगइन है कि चलो VXrant को प्रबंधित करने के लिए LXC का उपयोग करें। इसमें वे सभी फीचर्स नहीं हैं जो कि डिफ़ॉल्ट योनि वीएम (वर्चुअलबॉक्स) में हैं, लेकिन यह आपको डॉक कंटेनर की तुलना में अधिक लचीलापन देने की अनुमति देता है। लिंक में एक वीडियो है जो अपनी क्षमताओं को दिखा रहा है जो देखने लायक है।


5
और यहाँ परियोजना के लिए सीधा लिंक है github.com/fgrehm/vagrant-lxc
gertas

46

वैग्रंट के साथ अब आपके पास एक प्रदाता के रूप में डॉकर हो सकता है। http://docs.vagrantup.com/v2/docker/ । वर्चुअलबॉक्स या वीएमवेयर की जगह डॉकर प्रोवाइडर का इस्तेमाल किया जा सकता है।

कृपया ध्यान दें कि आप वैगरेंट के साथ प्रावधान के लिए डॉकर का उपयोग भी कर सकते हैं। यह एक प्रदाता के रूप में डॉकर का उपयोग करने से बहुत अलग है। http://docs.vagrantup.com/v2/provisioning/docker.html

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


23
दुनिया बस पागल हो गई;) हम योनि के अंदर
डॉक

@zainengineer, क्या विंडोज पर वैगरेंट के लिए डॉकर प्रदाता अभी भी बूट 2 डॉक का उपयोग करता है या यह डोकर टूलबॉक्स के कुछ संस्करण का उपयोग करता है?
डेरेक महार

@zainengineer क्या आपके पास कुछ उदाहरण हैं उदाहरण के लिए (योनि डॉक्स नहीं)?
व्लाद

16

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

सोच कुछ इस प्रकार है:

  • एक जावा / गो एप्लिकेशन घटक लें और इसे कंटेनर के रूप में बनाएं (ध्यान दें, यह सुनिश्चित नहीं है कि ऐप कंटेनर में बनाया जाना चाहिए या फिर कंटेनर में स्थापित किया जाना चाहिए)
  • कंटेनर को वैजेंट वीएम में वितरित करें।
  • सभी एप्लिकेशन घटकों के लिए इसे दोहराएं।
  • के खिलाफ कोड करने के लिए घटक (ओं) पर फेरबदल करें।
  • Vagrant द्वारा प्रबंधित VM (s) को वितरण तंत्र का लगातार परीक्षण करें
  • नींद अच्छी तरह से जानते हुए कि जब कंटेनर को तैनात करने का समय है, तो यह एकीकरण परीक्षण डॉकर से पहले की तुलना में बहुत अधिक निरंतर आधार पर हो रहा था।

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

तथ्य यह है कि एक डेवलपर के रूप में मैं लगातार और लगातार वीएम को कंटेनर वितरित कर रहा हूं और एप्लिकेशन का अधिक समग्र रूप से परीक्षण कर रहा हूं इसका मतलब है कि उत्पादन रिलीज को सरल बनाया जाएगा।

इसलिए मुझे लगता है कि डगर को ऐप परिनियोजन के लिए कुछ भयानक परिणामों का लाभ उठाने के एक तरीके के रूप में वैग्रांत विकसित हो रहा है।


क्या किसी भी संयोग से आपके पास इस बारे में एक ब्लॉग पोस्ट है? अब लगभग दो साल हो गए हैं, कैसा चल रहा है? अभी भी docker या docker और docker-fleat / machine के साथ योनि का उपयोग कर रहे हैं?
एंड्रियाज रहमान

जिस कंपनी के लिए मैं काम कर रहा था, वह अधिग्रहण कर ली गई थी और उन्होंने मेरी सारी सामग्री @ होटो से नीचे ले ली। संक्षिप्त उत्तर यह है कि मैं अपने पालतू जानवरों की परियोजनाओं के लिए घर पर डॉकटर-मशीन का उपयोग करता हूं। काम पर मैं <gulp> प्रबंधक </ gulp> हूं और बहुत अधिक तकनीक-इनिंग नहीं करता। हमारे पास डॉकर का उपयोग करने की योजना नहीं है, इसलिए हमारा उपकरण आमतौर पर वैग्रंट है।
बॉयड हेम्फिल

10

जीत के लिए निश्चित रूप से डॉकर!

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

बेशक अपने स्वयं के पिटफल्स और चुनौतियों के साथ देखभाल करने के लिए एक नया अनुशासन है।

डॉकर झुंड के लिए जाएं यदि आपकी आवश्यकताएं एकल मशीन संसाधनों की सीमा को पार करती हैं।


8

वाग्रांत (और कठपुतली) के संयोजन में डॉकर का उपयोग करने के बारे में वास्तविक ओरेकल जावा पत्रिका में एक बहुत जानकारीपूर्ण लेख है:

निष्कर्ष

क्लासिक वीएम की तुलना में डॉकर के हल्के कंटेनर तेज हैं और डेवलपर्स और सीडी और देवओप्स की पहल के हिस्से के रूप में लोकप्रिय हो गए हैं। यदि आपका उद्देश्य अलगाव है, तो डॉकर एक उत्कृष्ट विकल्प है। वैग्रंट एक वीएम मैनेजर है जो आपको व्यक्तिगत वीएम के स्क्रिप्ट कॉन्फ़िगरेशन के साथ-साथ प्रोविजनिंग करने में सक्षम बनाता है। हालांकि, यह अपेक्षाकृत बड़े ओवरहेड के साथ वर्चुअलबॉक्स (या दूसरे वीएम प्रबंधक) पर निर्भर एक वीएम को सौंप देता है। इसके लिए आपको एक हार्ड ड्राइव आइडल की आवश्यकता होती है जो बहुत बड़ा हो सकता है, इसमें बहुत अधिक रैम लगती है, और प्रदर्शन को उप-प्रकार किया जा सकता है। Docker LXC के माध्यम से कर्नेल cgroups और namespace अलगाव का उपयोग करता है। इसका मतलब है कि आप मेजबान और समान ile सिस्टम के समान कर्नेल का उपयोग कर रहे हैं। वेजेंट अमूर्तन के संदर्भ में डॉकर से ऊपर का स्तर है, इसलिए वे वास्तव में तुलनीय नहीं हैं। लक्ष्य प्रबंधन के प्रावधान के लिए पपेट जैसे विन्यास प्रबंधन उपकरण का व्यापक रूप से उपयोग किया जाता है। मौजूदा पपेट-आधारित समाधानों का पुन: उपयोग करना डॉकर के साथ आसान है। आप अपने समाधान का टुकड़ा भी कर सकते हैं, इसलिए बुनियादी ढांचे को कठपुतली के साथ प्रावधान किया गया है; मिडलवेयर, व्यवसाय एप्लिकेशन स्वयं या दोनों को डॉकयर के साथ प्रावधानित किया गया है; और डॉकर को वग्रांत ने लपेटा है। इस टूल के साथ, आप अपने परिदृश्य के लिए सबसे अच्छा काम कर सकते हैं।

DevOps http://www.javamagazine.mozaicreader.com/JulyAug2015#&pageSet=34&page=0 में डॉकटर कंटेनरों का निर्माण, उपयोग और ऑर्केस्ट्रेट कैसे करें


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