डॉकटर कंपोजिंग के लिए एक माइन स्टैक एप्लीकेशन



Docker Compose, Docker में जटिल अनुप्रयोगों को चलाने के लिए कई कंटेनरों को परिभाषित करने और चलाने के लिए एक उपकरण है, उदाहरण के लिए MEAN एप्लिकेशन को कंटेनरीकृत करना।

Docker पर पिछले ब्लॉगों में, आपने पढ़ा होगा कि Docker images, Docker कंटेनर क्या हैं और इनकी आवश्यकता क्या है। यदि आपने उनके बारे में नहीं पढ़ा है, तो मैं आपसे पढ़ने का अनुरोध करता हूं , Docker Compose पर इस ब्लॉग को जारी रखने से पहले।

डॉकर के साथ आने वाली संभावनाओं की खोज करने के बाद, यह निश्चित रूप से अधिक जानने के लिए बहुत रोमांचक है। क्या यह नहीं है? खैर, कम से कम मैं तब था जब मैं एक चुनौती में ठोकर खाई थी।





डॉकर कम्पोज़ का परिचय

मेरे लिए एकल सेवा एप्लिकेशन को कंटेनर में रखना आसान था। लेकिन जब मुझे अलग-अलग कंटेनरों में कई सेवाओं को कंटेनर में डालना पड़ा, तो मैं एक सड़क पर भाग गया। मेरी आवश्यकता एक MEAN स्टैक एप्लिकेशन को कंटेनरीकृत और होस्ट करने की थी।

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



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

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

इन कंटेनरों का संचार और अप-टाइम डॉकटर कम्पोज़ द्वारा बनाए रखा जाएगा।



तो आप पूछ सकते हैं कि इस पूरे बुनियादी ढांचे को कैसे स्थापित किया जाए? तो ठीक है, मैं आपको अधिक विस्तृत विवरण देता हूं।

Dockerfile

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

हमारे मामले में, हमारे पास एक पूर्ण स्टैक एप्लिकेशन है जिसमें MongoDB, ExpressJS, कोणीय और NodeJS शामिल हैं। MongoDB बैक एंड डेटाबेस की देखभाल करता है, NodeJS और ExpressJS सर्वर साइड रेंडरिंग के लिए हैं, और कोणीय फ्रंट फ्रंट के लिए है।

MEAN स्टैक ऐप - डॉकर कंपोज़ - एडुरका

चूंकि तीन घटक हैं, इसलिए हमें प्रत्येक घटक के लिए कंटेनरों को स्पिन करना होगा। हमें कंटेनर को निम्नलिखित तरीके से स्पिन करना है:

  1. कंटेनर 1 - कोणीय
  2. कंटेनर 2 - NodeJS और ExpressJS
  3. कंटेनर 3 - MongoDB

डॉकटर कंटेनर बनाना

माध्य अनुप्रयोग को शुरू करने के पहले चरण के रूप में, प्रत्येक घटक के निर्माण के लिए डॉकफाइल को लिखें, जो कि कोणीय के कंटेनर से शुरू होता है। इस डॉकफाइल को with package.json ’फाइल के साथ प्रोजेक्ट डायरेक्टरी के अंदर उपस्थित होना होगा। Which package.json ’में यह विवरण होता है कि कोणों के अनुप्रयोग के निर्माण के लिए निर्भरता के किस संस्करण का उपयोग M NPM’ द्वारा किया जाना चाहिए।

1. फ्रंट एंड के लिए डॉकरफाइल

नोड से: 6 RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm कैश स्वच्छ RUN npm इंस्टॉल COPY। / usr / src / app EXPOSE 4200 CMD ['npm', 'start']

हमेशा की तरह, हमारा पहला कमांड बेस इमेज खींचने के लिए है, और हम बेस ’नोड: 6 'इमेज खींच रहे हैं।

साल्टस्टैक बनाम कठपुतली बनाम शेफ

अगले दो आदेश एक नई निर्देशिका next / usr / src / app ’बनाने के बारे में हैं जो डोगर कंटेनर के अंदर कोणीय कोड संग्रहीत करने और कंटेनर के अंदर कार्यशील निर्देशिका बनाने के लिए हैं।

फिर हम अपने प्रोजेक्ट डायरेक्टरी से कंटेनर के अंदर the package.json 'फाइल कॉपी कर रहे हैं।

हम तब। Npm कैश क्लीन 'कमांड चलाते हैं जो npm कैश को क्लीन करता है।

उसके बाद, हम pm npm इंस्टॉल 'कमांड चलाते हैं जो एंगुलर ऐप को होस्ट करने के लिए आवश्यक बॉयलर प्लेटों को डाउनलोड करना शुरू करता है। यह 'package.json' में निर्दिष्ट निर्भरता के संस्करणों के आधार पर बॉयलर प्लेटों को डाउनलोड करना शुरू करता है।

अगला 'RUN' कमांड रन सभी कोड, फ़ोल्डर को प्रोजेक्ट डायरेक्टरी से कंटेनर के अंदर मौजूद है।

उपरोक्त कमांड कंटेनर को वेब यूआई के माध्यम से फ्रंट एंड क्लाइंट तक पहुंचने वाले उपयोगकर्ताओं द्वारा अनुरोध भेजने के लिए बैक एंड सर्वर के साथ संचार के लिए पोर्ट नंबर 4200 को उजागर करने के लिए कहता है।

अंत में अंतिम कमांड है, 'npm' शुरू करने के लिए 'RUN' कमांड। यह हमारे कोणीय ऐप बनाने के लिए कोड निष्पादित करना शुरू कर देता है।

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

2. बैक एंड के लिए डॉकरफाइल

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

नोड से: 6 RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm कैश स्वच्छ RUN npm इंस्टॉल COPY। / usr / src / ऐप EXPOSE 3000 CMD ['npm', 'start']

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

3. डेटाबेस

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

अब आपके दिमाग में यह सवाल होगा कि मैं ऐसा कहां करूंगा? वैसे हम डॉकर कंपोज फाइल में कर सकते हैं।

डॉकटर कम्पोज फाइल

Docker Compose फ़ाइल एक YAML फ़ाइल है जिसमें Docker एप्लिकेशन को सेट करने के लिए सेवाओं, नेटवर्क और वॉल्यूम के बारे में विवरण होता है।

अपने डॉकर इंजन का संस्करण खोजने के लिए नीचे दिया गया कमांड चलाएँ।

docker -v

कमांड को निष्पादित करने से आपके होस्ट पर चलने वाला संस्करण वापस आ जाएगा। अपने होस्ट पर डॉकर इंजन के संस्करण के आधार पर, एक उपयुक्त संस्करण डॉकर कम्पोज डाउनलोड करें। आप डाउनलोड करने के लिए उपयुक्त संस्करण देख सकते हैं डॉकर का आधिकारिक दस्तावेज

जब से मैं डॉकर इंजन संस्करण 17.05.0-CE चला रहा हूं, मैंने डॉकर कम्पोज संस्करण 3 का उपयोग किया है।

डॉकर कम्पोज़ स्थापित करें

Compose डाउनलोड करने के लिए, कमांड्स के नीचे सेट को रन करें।

सुडोल कर्ल -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s` -`uname -m` -o / usr / local / bin / docker- रचना सूद चामोद + x / usr / स्थानीय / बिन / docker- रचना

ध्यान दें कि कमांड में संस्करण संख्या आपके द्वारा चलाए जा रहे डॉकर इंजन संस्करण के आधार पर बदल जाएगी।

नीचे दिए गए आदेश हैं जो मेरे डॉकर कम्पोज़ फ़ाइल का एक हिस्सा हैं।

संस्करण: '3.0' # डॉकटर-कंपोज वर्जन को निर्दिष्ट करें # सेवाओं को चलाने के लिए सेवाओं / कंटेनरों को परिभाषित करें: कोणीय: # पहली सर्विस बिल्ड का नाम: कोणीय-एप # डॉकरफाइल बंदरगाहों की निर्देशिका निर्दिष्ट करें: - '4200: 4200' # पोर्ट मैपिंग एक्सप्रेस निर्दिष्ट करें: # दूसरी सर्विस बिल्ड का नाम: एक्सप्रेस-सर्वर # डॉकरीफाइल बंदरगाहों की निर्देशिका निर्दिष्ट करें: - '3000: 3000' # पोर्ट पोर्ट मैपिंग लिंक: - डेटाबेस # इस सेवा को डेटाबेस सेवा डेटाबेस से लिंक करें। # तीसरी सेवा छवि का नाम: मोंगो # बंदरगाहों से कंटेनर बनाने के लिए छवि निर्दिष्ट करें: - '27017: 27017' # पोर्ट अग्रेषण निर्दिष्ट करें

मुझे पूरा यकीन है कि उपरोक्त फ़ाइल में दिए गए आदेश आपके लिए कोई मायने नहीं रखते हैं। इसलिए, उस समस्या को हल करें।

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

उसके बाद, मैंने कीवर्ड 'सेवाओं' का उपयोग करके तीन कंटेनरों को परिभाषित किया। ये सेवाएं मेरे स्टैक के तीन घटकों, फ्रंट एंड, बैक एंड और डेटाबेस को संदर्भित करती हैं। तो इस मामले में, मेरे कंटेनरों का नाम मेरी सेवाओं का नाम होगा, यानी ular कोणीय ’,‘ एक्सप्रेस ’और’ डेटाबेस ’।

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

यह आसान है। पथ को to बिल्ड: ’के बाद निर्दिष्ट किया जाना चाहिए। हमारे मामले में, 'कोणीय-ऐप' और 'एक्सप्रेस-सर्वर' दो निर्देशिकाओं के लिए मार्ग हैं, जो उस निर्देशिका से पहुंचा जा सकता है जहां डॉकर कंपोज़ फ़ाइल मौजूद है। हमारे डेटाबेस कंटेनर के लिए, मैंने बस यह कहा है कि dockerfile के पथ के बजाय आधार ‘छवि: mongo’ का उपयोग करें।

इंट जावा में डबल करें

इनमें से प्रत्येक सेवाओं के लिए, मैंने उन पोर्ट संख्याओं को भी निर्दिष्ट किया है, जिनका उपयोग अन्य कंटेनरों (सेवाओं) से अनुरोध प्राप्त करने / भेजने के लिए किया जा सकता है। कोणीय के मामले में 4200, एक्सप्रेस के मामले में 3000 और मोंगो के मामले में 27017 है।

इसके अतिरिक्त, एक्सप्रेस कंटेनर में डेटाबेस कंटेनर के लिए एक: लिंक: ’होता है, जो यह दर्शाता है कि सर्वर साइड पर जो भी डेटा प्राप्त होता है उसे डेटाबेस में भेजा जाएगा जहां इसे संग्रहीत किया जाएगा।

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

डॉकटर-कंपोज़ बिल्ड डूकर-कंपोज़

Used डॉकटर-कंपोज़ बिल्ड ’कमांड का उपयोग सेवाओं के निर्माण / पुनर्निर्माण के लिए किया जाता है, जबकि कंटेनर बनाने / शुरू करने के लिए-डॉकर-कंपोज़ अप’ कमांड का उपयोग किया जाता है। आगे बढ़ें! इसे अपने लिए आजमाएं।

नीचे Docker छवियों के स्क्रीनशॉट बनाए जा रहे हैं और फिर निष्पादित किए जा रहे हैं। आप देख सकते हैं कि कोणीय छवि बनाई जा रही है और फिर 'कोणीय: नवीनतम' नाम से टैग किया गया है।

इसके अलावा, एक्सप्रेस के लिए एक छवि नाम और टैग के साथ 'एक्सप्रेस: ​​नवीनतम' के साथ बनाई गई है।

अब जब यह चित्र बनाया गया है, तो इसे चलाने का प्रयास करें और इस तरह से इस प्रक्रिया में एक कंटेनर कताई करें। नीचे वह स्क्रीनशॉट है।

नीचे स्क्रीनशॉट है जो pack वेबपैक: सफलतापूर्वक संकलित ’कहता है, जिसका अर्थ है कि तीन सेवाओं को डोकर द्वारा सफलतापूर्वक कंटेनरीकृत किया गया है।

अब जब कंटेनरों की मेजबानी की जाती है, तो आप सेवाओं को उनके संबंधित बंदरगाहों पर सक्रिय देख सकते हैं। अपने वेब ब्राउज़र में MEAN ऐप के GUI के साथ बातचीत करने के लिए निम्नलिखित पोर्ट नंबर टाइप करें।

लोकलहोस्ट: 4200 - कोणीय ऐप (फ्रंट-एंड)
लोकलहोस्ट: 3000 - एक्सप्रेस सर्वर और नोड्स (बैक-एंड / सर्वर-साइड)
लोकलहोस्ट: 27017 - MongoDB (डेटाबेस)

अभी तक प्रभावित? रुको, क्योंकि डॉकर अभी तक नहीं किया गया है! हम 'डॉकटर-कंपोज़ स्केल = 'x'' कमांड का उपयोग तैनाती की संख्या को आसानी से बढ़ाने / घटाने के लिए कर सकते हैं। दूसरे शब्दों में, हम एक सेवा के लिए कई संख्या में कंटेनर बना सकते हैं। नीचे एक विशेष सेवा को containers 5 ’कंटेनरों तक पहुँचाने का पूरा कमांड दिया गया है:

docker- रचना पैमाने = ५

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

यदि आपको अभी भी इस अवधारणा पर संदेह है, तो आप नीचे दिए गए वीडियो को देख सकते हैं जहां मैंने एक ही अवधारणा को एक व्यावहारिक हाथों से समझाया है कि कैसे डॉकर कंपोज़ सेटअप करना है।

डॉकटर कम्पोज | कन्टेनिंग MEAN स्टैक एप्लीकेशन | DevOps ट्यूटोरियल

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

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? कृपया टिप्पणी अनुभाग में इसका उल्लेख करें और हम आपके पास वापस आ जाएंगे।