Docker
सरल Node.js अनुप्रयोग चलाना
खोज…
एक कंटेनर के अंदर एक मूल Node.js अनुप्रयोग चलाना
उदाहरण मैं चर्चा करने जा रहा हूं कि आपके पास एक डॉकर इंस्टॉलेशन है जो आपके सिस्टम में काम करता है और यह समझने की बुनियादी समझ है कि Node.js के साथ कैसे काम किया जाए। यदि आप जानते हैं कि आपको डोकर के साथ कैसे काम करना चाहिए, तो यह स्पष्ट होना चाहिए कि आपके सिस्टम पर Node.js फ्रेमवर्क स्थापित करने की आवश्यकता नहीं है, बल्कि हम Docker से उपलब्ध node
छवि के latest
संस्करण का उपयोग करेंगे। इसलिए यदि आवश्यक हो तो आप कमांड docker pull node
साथ छवि को पहले से डाउनलोड कर सकते हैं। (कमांड स्वचालित रूप से डॉक से node
छवि के नवीनतम संस्करण को pulls
है।)
एक निर्देशिका बनाने के लिए आगे बढ़ें जहाँ आपकी सभी कार्यशील अनुप्रयोग फ़ाइलें रहती हैं। इस निर्देशिका में एक
package.json
फ़ाइल बनाएँ जो आपके आवेदन के साथ-साथ निर्भरता का भी वर्णन करे। आपकाpackage.json
फ़ाइल कुछ इस तरह दिखना चाहिए:{ "name": "docker_web_app", "version": "1.0.0", "description": "Node.js on Docker", "author": "First Last <[email protected]>", "main": "server.js", "scripts": { "start": "node server.js" }, "dependencies": { "express": "^4.13.3" } }
अगर हमें Node.js के साथ काम करने की आवश्यकता है, तो हम आमतौर पर एक
server
फ़ाइल बनाते हैं जो वेब एप्लिकेशन को परिभाषित करता है। इस मामले में हमExpress.js
फ्रेमवर्क (संस्करण4.13.3
आगे) का उपयोग करते हैं। एक मूलserver.js
फ़ाइल कुछ इस तरह दिखाई देगी:var express = require('express'); var PORT = 8080; var app = express(); app.get('/', function (req, res) { res.send('Hello world\n'); }); app.listen(PORT); console.log('Running on http://localhost:' + PORT);
Docker से परिचित लोगों के लिए, आप एक
Dockerfile
पर आएDockerfile
।Dockerfile
एक पाठ फ़ाइल है जिसमें एक कस्टम छवि बनाने के लिए आवश्यक सभी कमांड हैं जो आपके एप्लिकेशन के लिए अनुकूलित है।
वर्तमान निर्देशिका में Dockerfile
नामक एक खाली पाठ फ़ाइल बनाएँ। विंडोज बनाने का तरीका सीधा है। लिनक्स में, आप निर्देशिका में touch Dockerfile
को निष्पादित करना चाह सकते हैं जिसमें आपके आवेदन के लिए आवश्यक सभी फाइलें हों। किसी भी टेक्स्ट एडिटर के साथ Dockerfile खोलें और निम्नलिखित पंक्तियाँ जोड़ें:
FROM node:latest
RUN mkdir -p /usr/src/my_first_app
WORKDIR /usr/src/my_first_app
COPY package.json /usr/src/my_first_app/
RUN npm install
COPY . /usr/src/my_first_app
EXPOSE 8080
FROM node:latest
डॉकर डेमॉन को निर्देश देता है कि हम किस छवि से निर्माण करना चाहते हैं। इस मामले में हम डोकर हब से उपलब्ध आधिकारिक डॉकर छविnode
केlatest
संस्करण का उपयोग करते हैं।इस छवि के अंदर हम एक कार्यशील निर्देशिका बनाने के लिए आगे बढ़ते हैं जिसमें सभी आवश्यक फाइलें होती हैं और हम अपने आवेदन के लिए वांछित निर्देशिकाओं को इस निर्देशिका को निर्धारित करने के लिए डेमॉन को निर्देश देते हैं। इसके लिए हम जोड़ते हैं
RUN mkdir -p /usr/src/my_first_app WORKDIR /usr/src/my_first_app
हम तो पहले ले जाकर आवेदन निर्भरता स्थापित करने के लिए आगे बढ़ना
package.json
फ़ाइल (जो निर्भरता भी शामिल ऐप्स की जानकारी निर्दिष्ट करता है) के लिए/usr/src/my_first_app
छवि में काम कर निर्देशिका। हम इसके द्वारा करते हैंCOPY package.json /usr/src/my_first_app/ RUN npm install
हम फिर
COPY . /usr/src/my_first_app
टाइप करते हैंCOPY . /usr/src/my_first_app
छवि में कार्यशील निर्देशिका में सभी एप्लिकेशन फ़ाइलों और स्रोत कोड को जोड़ने के लिए।हम इसके बाद
EXPOSE
निर्देश का उपयोग करते हैं, जिससे डेमॉन को निर्देश दिया जाता है कि पोर्ट8080
के परिणामस्वरूप कंटेनर को दिखाई दे (कंटेनर-टू-होस्ट मैपिंग के माध्यम से) क्योंकि एप्लिकेशन8080
को पोर्ट में बांधता है।अंतिम चरण में, हम
node server.js
को निर्देश देते हैं कि कमांडnode server.js
को चलाएं।node server.js
मूलnpm start
कमांड को निष्पादित करके छवि के अंदर। हम इसके लिएCMD
निर्देश का उपयोग करते हैं, जो आदेशों को तर्क के रूप में लेता है।CMD [ "npm", "start" ]
हम तो एक बनाने
.dockerignore
रूप में एक ही निर्देशिका में फाइलDockerfile
के बारे में हमारी नकल को रोकने के लिएnode_modules
और लॉग डोकर छवि पर कॉपी की जा रही से हमारे Node.js प्रणाली की स्थापना के द्वारा प्रयोग किया।.dockerignore
फ़ाइल में निम्न सामग्री होनी चाहिए:node_modules npm-debug.log
अपनी छवि बनाएं
उस निर्देशिका पर नेविगेट करें जिसमें Dockerfile
और Docker छवि बनाने के लिए निम्न कमांड चलाएँ। -t
झंडा आपको अपनी छवि टैग करने देता है ताकि बाद में docker images कमांड का उपयोग करके इसे ढूंढना आसान हो:
$ docker build -t <your username>/node-web-app .
अब आपकी छवि डॉकर द्वारा सूचीबद्ध की जाएगी। नीचे दिए गए आदेश का उपयोग करते हुए चित्र देखें:
$ docker images
REPOSITORY TAG ID CREATED
node latest 539c0211cd76 10 minutes ago
<your username>/node-web-app latest d64d3505b0d2 1 minute ago
छवि चल रही है
अब हम उस छवि को चला सकते हैं जिसे हमने केवल एप्लिकेशन सामग्री, node
बेस छवि और Dockerfile
का उपयोग करके बनाया है। अब हम अपनी नई बनाई गई <your username>/node-web-app
छवि को चलाने के लिए आगे बढ़ते हैं। docker run
कमांड के लिए -d
स्विच प्रदान करना कंटेनर को अलग मोड में चलाता है, ताकि कंटेनर पृष्ठभूमि में docker run
। -p
ध्वज कंटेनर के अंदर एक सार्वजनिक पोर्ट को एक निजी पोर्ट पर पुनर्निर्देशित करता है। इस कमांड का उपयोग करके आपके द्वारा पहले बनाई गई छवि को चलाएं:
$ docker run -p 49160:8080 -d <your username>/node-web-app
अपने टर्मिनल पर
docker ps
चलाकर अपने ऐप के आउटपुट को प्रिंट करें। आउटपुट कुछ इस तरह दिखना चाहिए।CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7b701693b294 <your username>/node-web-app "npm start" 20 minutes ago Up 48 seconds 0.0.0.0:49160->8080/tcp loving_goldstine
docker logs <CONTAINER ID>
दर्ज करके एप्लिकेशन आउटपुट प्राप्त करें docker logs <CONTAINER ID>
। इस स्थिति में यह docker logs 7b701693b294
।
आउटपुट: Running on http://localhost:8080
-
docker ps
आउटपुट से, प्राप्त पोर्ट मैपिंग0.0.0.0:49160->8080/tcp
। इसलिए डॉकर ने कंटेनर के अंदर8080
पोर्ट को होस्ट मशीन पर 49160 पोर्ट पर मैप किया। ब्राउज़र में अब हमlocalhost:49160
दर्ज कर सकते हैंlocalhost:49160
।
हम अपने ऐप को curl
का उपयोग करके भी कॉल कर सकते हैं:
$ curl -i localhost:49160
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 12
Date: Sun, 08 Jan 2017 14:00:12 GMT
Connection: keep-alive
Hello world