खोज…


एक कंटेनर के अंदर एक मूल Node.js अनुप्रयोग चलाना

उदाहरण मैं चर्चा करने जा रहा हूं कि आपके पास एक डॉकर इंस्टॉलेशन है जो आपके सिस्टम में काम करता है और यह समझने की बुनियादी समझ है कि Node.js के साथ कैसे काम किया जाए। यदि आप जानते हैं कि आपको डोकर के साथ कैसे काम करना चाहिए, तो यह स्पष्ट होना चाहिए कि आपके सिस्टम पर Node.js फ्रेमवर्क स्थापित करने की आवश्यकता नहीं है, बल्कि हम Docker से उपलब्ध node छवि के latest संस्करण का उपयोग करेंगे। इसलिए यदि आवश्यक हो तो आप कमांड docker pull node साथ छवि को पहले से डाउनलोड कर सकते हैं। (कमांड स्वचालित रूप से डॉक से node छवि के नवीनतम संस्करण को pulls है।)

  1. एक निर्देशिका बनाने के लिए आगे बढ़ें जहाँ आपकी सभी कार्यशील अनुप्रयोग फ़ाइलें रहती हैं। इस निर्देशिका में एक 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"
       }
     }
    
  1. अगर हमें 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);
    
  2. Docker से परिचित लोगों के लिए, आप एक Dockerfile पर आए DockerfileDockerfile एक पाठ फ़ाइल है जिसमें एक कस्टम छवि बनाने के लिए आवश्यक सभी कमांड हैं जो आपके एप्लिकेशन के लिए अनुकूलित है।

वर्तमान निर्देशिका में 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" ] 
    
  1. हम तो एक बनाने .dockerignore रूप में एक ही निर्देशिका में फाइल Dockerfile के बारे में हमारी नकल को रोकने के लिए node_modules और लॉग डोकर छवि पर कॉपी की जा रही से हमारे Node.js प्रणाली की स्थापना के द्वारा प्रयोग किया। .dockerignore फ़ाइल में निम्न सामग्री होनी चाहिए:

     node_modules
     npm-debug.log
    
  2. अपनी छवि बनाएं

उस निर्देशिका पर नेविगेट करें जिसमें 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
  1. छवि चल रही है

अब हम उस छवि को चला सकते हैं जिसे हमने केवल एप्लिकेशन सामग्री, node बेस छवि और Dockerfile का उपयोग करके बनाया है। अब हम अपनी नई बनाई गई <your username>/node-web-app छवि को चलाने के लिए आगे बढ़ते हैं। docker run कमांड के लिए -d स्विच प्रदान करना कंटेनर को अलग मोड में चलाता है, ताकि कंटेनर पृष्ठभूमि में docker run-p ध्वज कंटेनर के अंदर एक सार्वजनिक पोर्ट को एक निजी पोर्ट पर पुनर्निर्देशित करता है। इस कमांड का उपयोग करके आपके द्वारा पहले बनाई गई छवि को चलाएं:

$ docker run -p 49160:8080 -d <your username>/node-web-app
  1. अपने टर्मिनल पर 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

  1. 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      


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow