यदि आप पिछले कुछ वर्षों में प्रोग्रामिंग की दुनिया के नवीनतम घटनाक्रमों के संपर्क में हैं, तो आपने डॉकर और डॉकटर कंटेनर के आसपास के बुलबुल पर ध्यान दिया होगा। कर्ता की यह लोकप्रियता बिना कारण के नहीं है। डॉकर की शुरूआत में बहुत बदलाव आया है कि डेवलपर्स कैसे एप्लिकेशन डेवलपमेंट का तरीका अपनाते हैं।
जब ऐसी क्रांतिकारी तकनीक प्रोग्रामिंग की दुनिया में कदम रखती है तो कौन पीछे रहना चाहता है? तो, आज, हम आपके लिए एक नया ट्यूटोरियल श्रृंखला शुरू कर रहे हैं, ताकि आप सीख सकें कि एप्लिकेशन डेवलपमेंट के लिए डॉकर का उपयोग कैसे करें। यदि आप डॉकर के लिए एक पूर्ण शुरुआत कर रहे हैं, तो यह ट्यूटोरियल श्रृंखला आपके लिए शुरू करने के लिए सही जगह है।
हमारी ट्यूटोरियल श्रृंखला के पहले लेख में, हम यह समझना चाह रहे हैं कि वास्तव में डॉकर क्या है और डेवलपर्स डोकर से इतना प्यार क्यों करते हैं। हम आपको Docker की मूल अवधारणाओं से परिचित करने के लिए एक सरल Node.js एप्लिकेशन का भी डॉक्यूमेंटिंग करेंगे।
अब और इंतजार क्यों? शुरू करते हैं!
डॉकर एक उपकरण है जिसका उपयोग अनुप्रयोगों के निर्माण के लिए किया जाता है; यह कंटेनर के माध्यम से एप्लिकेशन बनाना, तैनात करना और चलाना है।
एक कंटेनर के साथ, सभी पुस्तकालयों, और एक आवेदन को चलाने के लिए आवश्यक अन्य निर्भरताएं, तैनाती के लिए एकल पैकेज के रूप में पैक की जाती हैं।
एक एप्लिकेशन को कंटेनरीकृत करने का मुख्य लक्ष्य उन्हें एक ही सिस्टम में चल रहे अन्य अनुप्रयोगों से अलग कर रहा है। यह दृष्टिकोण यह सुनिश्चित करता है कि आवेदन एक-दूसरे के संचालन में हस्तक्षेप नहीं करते हैं और आवेदन के रखरखाव को बहुत आसान बनाते हैं।
यद्यपि एक ही सिस्टम में चलने वाले कंटेनर निष्पादन में एक दूसरे से अलग-थलग हैं, वे एक ही ओएस कर्नेल साझा करते हैं। इसलिए, अनुप्रयोग निष्पादन, आभासी मशीनों को अलग करने के लिए वैकल्पिक विकल्प की तुलना में कंटेनर अधिक हल्के होते हैं।
आपके Windows OS पर चल रहे एक कंटेनरीकृत एप्लिकेशन को पर्यावरण के परिवर्तन के बावजूद किसी अन्य उपयोगकर्ता की Windows मशीन में समस्या के बिना चलने की गारंटी है।
हालांकि डॉकटर से पहले कंटेनर लंबे समय तक उपयोग में रहे हैं, डेवलपर समुदाय में कंटेनरों का उपयोग करते हुए डॉकटर की शुरुआत लोकप्रिय हुई। दो घटक हैं जिनका उपयोग किसी अनुप्रयोग को डॉक्यूमेंट करते समय किया जाता है: Dockerfile तथा डॉकर छवि । आइए जानें कि वे क्या हैं।
Dockerfile एक पाठ फ़ाइल है जिसमें एक docker छवि बनाने के लिए आवश्यक आदेशों का एक सेट होता है। Dockerfile में अन्य चीज़ों के बीच अंतर्निहित OS, भाषा, फ़ाइल स्थान और नेटवर्क पोर्ट के बारे में जानकारी होती है।
जब आप डॉकर की बिल्ड कमांड को डॉकफाइल के साथ चलाते हैं, तो डॉकटर के आधार पर एक डॉक इमेज बनाई जाती है। वे अंतिम डॉकटर कंटेनर बनाने के लिए टेम्पलेट के रूप में कार्य करते हैं। एक बार बनाए जाने के बाद, docker की छवियाँ स्थिर होती हैं। आप एक डॉक छवि का उपयोग कर डॉकटर कंटेनर बनाने के लिए डॉकर के रन कमांड को आमंत्रित कर सकते हैं।
इस ट्यूटोरियल में, हम एक Node.js एप्लिकेशन को डॉकटराइज़ करने जा रहे हैं। हम डॉकटर कंटेनर को ऊपर और चलाने के लिए चरणबद्ध तरीके से एक कदम का पालन करेंगे।
1 - Node.js एप्लिकेशन बनाएं 2 - डॉकटराइल बनाएं 3 - डॉकटर छवि बनाएं 4 - एप्लिकेशन कंटेनर बनाएं
हमारे ऐप को डॉकटराइज़ करने से पहले, आपको यह सुनिश्चित करना चाहिए कि आपके सिस्टम में डॉकर और नोड्स स्थापित हैं
कमांड-लाइन से नई प्रोजेक्ट निर्देशिका पर नेविगेट करें और पैकेज बनाने के लिए निम्न कमांड को चलाएं। फ़ाइल की निर्भरता और प्रारंभ स्क्रिप्ट पर जानकारी रखने वाली फ़ाइल को खोलने के लिए।
npm init -y
फिर, कमांड-लाइन पर इस कमांड को चलाकर एक्सप्रेस को अपने आवेदन पर निर्भरता के रूप में स्थापित करें और जोड़ें। हम एप्लिकेशन बनाने के लिए एक्सप्रेस का उपयोग करेंगे।
npm install express --save
यह हमारे लिए निर्भरता के रूप में एक्सप्रेस को जोड़ देगा package.json
फ़ाइल।
अब हम एक्सप्रेस की मदद से एक नोड एप्लिकेशन बना सकते हैं।
एक फाइल बनाएं जिसका नाम है। _ + _ | परियोजना निर्देशिका में और फ़ाइल में निम्न कोड जोड़ें।
app.js
उपरोक्त कोड एक नोड सर्वर बनाता है जो पोर्ट 3000 पर आने वाले अनुरोधों को सुनता है। आप नोड लाइन शुरू करने के लिए कमांड-लाइन पर इस कमांड को चला सकते हैं।
const express = require('express') const app = express() app.get('/', (req, res) => {
res.send('Hello World!') }) app.listen(3000, () => {
console.log('Node server has started running') })
अब अपने ब्राउज़र पर जाएं और URL का अनुसरण करें। _ + _ | और आपको टेक्स्ट दिखाई देगा node app.js
पेज पर।
हमने अपनी परियोजना के लिए एक सरल नोड एप्लिकेशन बनाया है। अब dockerfile बनाने के लिए आगे बढ़ते हैं।
डॉकफाइल में, हम डॉकर वातावरण के साथ हमारे नोड ऐप को बनाने और चलाने के लिए आवश्यक जानकारी प्रदान करते हैं।
इसमें एप्लिकेशन में उपयोग की जाने वाली भाषा और इसके संस्करण को निर्दिष्ट करना, हमारी परियोजना निर्देशिका को कार्यशील निर्देशिका के रूप में सेट करना, कार्यशील निर्देशिका में सभी फ़ाइलों को कॉपी करना, नेटवर्क पोर्ट को सेट करना और निर्दिष्ट करना है कि कौन सी फ़ाइल अनुप्रयोग के लिए प्रवेश बिंदु है। अधिक जटिल अनुप्रयोगों में, आपको पर्यावरण चर और डेटाबेस URL को डॉकरफाइल में भी सेट करना होगा।
http://localhost:3000
Hello World!
| फ़ाइल।FROM node:latest WORKDIR /dockerTutorial COPY . . RUN npm install EXPOSE 3000 ENTRYPOINT ['node', 'app.js']
डॉकटर छवि से डॉकटर छवि बनाने के लिए निम्नलिखित कमांड का उपयोग करें।
package.json
node app.js
डॉकर छवि का नाम है। डॉट प्रोजेक्ट निर्देशिका में फ़ाइल पथ को इंगित करता है, जो कि हम वर्तमान में कमांड-लाइन में हैं।
यदि ओएस छवि के साथ निर्दिष्ट है से आदेश, नोड: नवीनतम , इस समय आपके डिवाइस में नहीं है, जब आप उपरोक्त कमांड चलाते हैं, तो इसे डॉकर हब से खींच लिया जाएगा।
छवि को खींचने के बाद, डॉकफाइल में प्रत्येक कमांड को एक-एक करके निष्पादित किया जाएगा।
निष्पादन के अंत में, यदि आप संदेश देखते हैं सफलतापूर्वक बनाया गया , एप्लिकेशन की डॉक छवि सफलतापूर्वक बनाई गई है। स्थानीय छवि रिपॉजिटरी में निर्मित डॉकटर छवि को देखने के लिए इस कमांड को चलाएँ।
docker build -t docker-tutorial .
आउटपुट इस तरह दिखता है
अब हम अपने डॉकर कंटेनर को बनाने के लिए निर्मित छवि का उपयोग कर सकते हैं। कंटेनर बनाने के लिए docker रन कमांड का उपयोग करें।
Docker-tutorial
यहां, 8080 और 3000 की संख्या कंटेनर के बाहरी और आंतरिक को इंगित करती है। बाहरी पोर्ट, 8080, वह पोर्ट है जिसका उपयोग हम अपने ब्राउज़र के माध्यम से एप्लिकेशन से कनेक्ट करने के लिए करते हैं। आंतरिक बंदरगाह, 3000, आने वाले अनुरोधों के लिए हमारे आवेदन को सुनता बंदरगाह है। डॉकर कंटेनर दिए गए बाहरी पोर्ट को आंतरिक पोर्ट पर मैप करता है।
URL पर जाएँ docker images
ब्राउज़र पर और देखें कि क्या आपको पेज मिलता है docker run -p 8080:3000 docker-tutorial
संदेश जो आपको मिलते समय मिला http://localhost:8080
इससे पहले। यदि हाँ, तो आपका डॉकर कंटेनर ऊपर और चल रहा है।
आप अपने डिवाइस पर सभी रनिंग डॉक कंटेनर को देखने के लिए इस कमांड का उपयोग कर सकते हैं।
Hello World!
कमांड आपको इस तरह से आउटपुट देगा। हम यहां चल रहे कंटेनर का CONTAINER_ID और NAME पा सकते हैं।
याद रखें कि मैंने पर्यावरण चर के साथ एक आवेदन का उल्लेख किया है जिसे डॉकटराइल में अधिक निर्देशों की आवश्यकता है? पर्यावरण चर का मान उस वातावरण के साथ बदलता है, जिसमें वे चल रहे हैं।
ध्यान दें कि कैसे हमने स्पष्ट रूप से उल्लेख किया है कि हमारा नोड ऐप उस समय सुनता है जब सर्वर चल रहा है। यह दृष्टिकोण अनम्य और त्रुटि-प्रवण है। यदि हम अपने एप्लिकेशन को ऐसे वातावरण में चलाते हैं जो नोड सर्वर के लिए पोर्ट 3000 को नहीं खोलता है, तो हमारा एप्लिकेशन काम करना बंद कर देता है।
सबसे उपयुक्त कार्यान्वयन पोर्ट नंबर को एप्लिकेशन से बाहर ले जा रहा है। इसके बजाय, हम पोर्ट नंबर के स्थान पर एक चर नाम का उपयोग करते हैं और चल रहे वातावरण में उस चर के लिए एक मूल्य निर्धारित करते हैं। हमारे मामले में, चल पर्यावरण डॉकटर कंटेनर है। इसलिए, हमें पर्यावरण चर के रूप में पोर्ट नंबर को डॉकफाइल में जोड़ना होगा।
आइए देखें कि हम ऐसा कैसे कर सकते हैं।
सबसे पहले, पर्यावरणीय वैरिएबल को हमारे डॉकफाइल में इसके मान के साथ जोड़ें। हमें इसे पूरा करने के लिए एक नए कमांड को डॉकफाइल में जोड़ना होगा।
http://localhost:3000
चर नाम और मूल्य असाइनमेंट के बाद ईएनवी कमांड का उपयोग करके, हम अपने डॉकफाइल में एक नया पर्यावरण चर जोड़ सकते हैं। क्या आपने देखा कि कैसे EXPOSE 3000 कमांड को पोर्ट नंबर का स्पष्ट उल्लेख नहीं करने के लिए बदल दिया गया है? इसके बजाय, यह सटीक पोर्ट संख्या प्राप्त करने के लिए बनाए गए PORT चर को संदर्भित करता है। इस दृष्टिकोण के साथ, अगर हमें पोर्ट नंबर बदलना है, तो हमें अपने कोड में केवल एक स्थान बदलना होगा, जिससे हमारे आवेदन को बनाए रखना आसान हो जाता है।
अब हमने dockerfile को बदल दिया है, अगला चरण एप्लिकेशन बनाया जा रहा है। बनाया पर्यावरण चर का संदर्भ दें। इसके लिए, हम सुनने की विधि के अंदर उपयोग किए जाने वाले पोर्ट नंबर 3000 को process.env.PORT से बदल देते हैं।
docker ps
चूंकि हमने अपनी एप्लिकेशन फाइलों और डॉकफाइल में बदलाव किए हैं, इसलिए हमें एक नए कंटेनर के लिए एक नई छवि बनानी होगी। लेकिन पहले, हमें इसे प्राप्त करने के लिए वर्तमान में चल रहे डॉकटर कंटेनर को रोकना होगा।
कंटेनर को रोकने के लिए हम docker stop कमांड का उपयोग कर सकते हैं।
FROM node:latest WORKDIR /dockerTutorial COPY . . ENV PORT=3000 RUN npm install EXPOSE $PORT ENTRYPOINT ['node', 'app.js']
इस कमांड में प्रयुक्त मूल्य, f10, कंटेनर की ID का पहला तीन अंक है।
हम रनिंग कंटेनर को रोकने के लिए कमांड, डूकर किल का उपयोग कर सकते हैं।
const express = require('express') const app = express() app.get('/', (req, res) => {
res.send('Hello World!') }) app.listen(process.env.PORT, () => {
console.log('Node server has started running') })
Docker मार और docker स्टॉप के बीच का अंतर यह है कि docker stop कंटेनरों को संसाधनों का उपयोग करके और राज्य को बचाने के द्वारा अधिक इनायत से रोकता है। हालांकि, कंटेनर को संसाधनों को छोड़ने या राज्य को बचाने के बिना कंटेनर को अधिक अचानक रोक दिया जाता है। एक उत्पादन वातावरण में चल रहे कंटेनर के लिए, कंटेनर को रोकने के लिए docker stop का उपयोग करना बेहतर विकल्प है।
एक चल रहे कंटेनर को रोकने के बाद, निम्नलिखित आदेश का उपयोग करके मेजबान वातावरण से कंटेनर द्वारा छोड़े गए अवशिष्ट को साफ करना सुनिश्चित करें।
जब आप कंटेनर को रोकने के लिए उपरोक्त आदेशों को चलाने का प्रयास करते हैं, तो आप देखेंगे कि जब हम कंटेनर बनाने के लिए उपयोग किए गए टर्मिनल टैब का उपयोग तब तक नहीं कर सकते जब तक कि हम कंटेनर को नहीं मारते। हम नई कमांड चलाने के लिए एक अलग टैब का उपयोग करके इसके लिए वर्कअराउंड प्राप्त कर सकते हैं।
लेकिन एक बेहतर तरीका है। हम कंटेनर को डेमन मोड में चला सकते हैं। डेमन मोड के साथ, कंटेनर आउटपुट दिखाने के लिए वर्तमान टैब का उपयोग किए बिना पृष्ठभूमि में चलता है।
डेमन मोड में एक कंटेनर शुरू करने के लिए, आपको बस डॉक रन कमांड में एक अतिरिक्त-डी झंडा जोड़ना होगा।
docker stop f10
इंटरैक्टिव मोड में एक कंटेनर चलाने के लिए, कंटेनर पहले से ही चलना चाहिए। एक बार इंटरैक्टिव मोड में, आप कंटेनर में फ़ाइलों को जोड़ने या हटाने के लिए कमांड चला सकते हैं, फाइलों को सूचीबद्ध कर सकते हैं, या अन्य बैश कमांड चला सकते हैं जो हम आमतौर पर उपयोग करते हैं।
इंटरैक्टिव मोड में कंटेनर को चलाने के लिए निम्न कमांड का उपयोग करें।
docker kill f10
यहां, e37 कंटेनर आईडी है। बैश आदेशों का उपयोग करके इंटरैक्टिव मोड के साथ चारों ओर चलाएं।
हमारे डॉकर ट्यूटोरियल श्रृंखला के पहले ट्यूटोरियल में, आपने सीखा कि एक साधारण नोड.जेएस एप्लिकेशन के लिए डॉकटर कंटेनर कैसे बनाया जाता है। लेकिन वहाँ अधिक आप डॉकर और कंटेनरों के साथ कर सकता है। हमारे आगामी ट्यूटोरियल में, हम देखेंगे कि कैसे डेटाबेस के साथ काम करना है, वॉल्यूम, और कई कंटेनरों के साथ काम करना है जो कि माइक्रोसिस्टर्स के साथ बनाया गया है।