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