Docker और JavaScript: एप्लिकेशन कंटेनरीकरण A से Z तक

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Docker और JavaScript: Node.js पर एप्लिकेशन का कंटेनरीकरण — संपूर्ण मार्गदर्शिका

\n\n

आधुनिक वेब डेवलपमेंट में, कंटेनरीकरण सिर्फ एक ट्रेंड नहीं, बल्कि एक आवश्यकता बन गया है। Docker आपको JavaScript एप्लिकेशन को उसकी सभी निर्भरताओं, कॉन्फ़िगरेशन और रनटाइम एनवायरनमेंट के साथ एक आइसोलेटेड कंटेनर में पैकेज करने की अनुमति देता है, जो डेवलपर के लैपटॉप से लेकर production-सर्वर तक किसी भी सिस्टम पर समान रूप से काम करने की गारंटी देता है। इस लेख में, हम Node.js एप्लिकेशन के कंटेनरीकरण की प्रक्रिया को शुरू से समझेंगे, सर्वोत्तम प्रथाओं और विशिष्ट उपयोग परिदृश्यों पर विचार करेंगे।

\n\n

JavaScript डेवलपर के लिए Docker की मूल बातें

\n\n

विवरण में जाने से पहले, आइए JavaScript इकोसिस्टम के संदर्भ में Docker की प्रमुख अवधारणाओं को समझते हैं।

\n\n
    \n
  • इमेज (Image) — एक अपरिवर्तनीय टेम्पलेट जिसमें कोड, Node.js रनटाइम एनवायरनमेंट, निर्भरताएँ (node_modules) और कॉन्फ़िगरेशन शामिल हैं। इमेज रजिस्ट्री (जैसे, Docker Hub) में संग्रहीत की जाती हैं।
  • \n
  • कंटेनर (Container) — इमेज का एक चलता हुआ इंस्टेंस। प्रत्येक कंटेनर दूसरों और होस्ट सिस्टम से आइसोलेटेड होता है।
  • \n
  • Dockerfile — इमेज बनाने के लिए निर्देश। Node.js एप्लिकेशन के लिए, यह मुख्य फ़ाइल है जिसे हम बनाएंगे।
  • \n
  • docker-compose — मल्टी-कंटेनर एप्लिकेशन (जैसे, Node.js + MongoDB + Redis) को परिभाषित और चलाने के लिए एक उपकरण।
  • \n
\n\n

Node.js एप्लिकेशन के लिए Dockerfile बनाना

\n\n

चलिए एक सरल Express एप्लिकेशन से शुरू करते हैं। प्रोजेक्ट की रूट में Dockerfile नामक फ़ाइल बनाएँ:

\n\n
# बेस इमेज Node.js 18 (Alpine — हल्का संस्करण)\nFROM node:18-alpine\n\n# कंटेनर के अंदर एक वर्किंग डायरेक्टरी बनाएँ\nWORKDIR /usr/src/app\n\n# package.json और package-lock.json (यदि मौजूद हों) कॉपी करें\nCOPY package*.json ./\n\n# production-निर्भरताएँ स्थापित करें\nRUN npm ci --only=production\n\n# एप्लिकेशन का सोर्स कोड कॉपी करें\nCOPY . .\n\n# वह पोर्ट खोलें जिसे एप्लिकेशन सुनेगा\nEXPOSE 3000\n\n# एप्लिकेशन चलाने का कमांड\nCMD ["node", "src/index.js"]
\n\n

JavaScript प्रोजेक्ट्स के लिए महत्वपूर्ण बारीकियाँ:

\n
    \n
  • निर्देशों का क्रम मायने रखता है। कोड से पहले package.json को कॉपी करने से Docker निर्भरता स्थापना वाली लेयर को कैश कर सकता है। यदि आप केवल कोड बदलते हैं, तो निर्भरताएँ पुनः स्थापित नहीं होतीं — इससे बिल्ड तेज़ होता है।
  • \n
  • npm install के बजाय npm ci का उपयोग करें — यह तेज़ है और गारंटी देता है कि निर्भरता संस्करण lock-फ़ाइल से मेल खाते हैं।
  • \n
  • Alpine संस्करण Node.js इमेज (~900 MB के बजाय ~120 MB) अंतिम इमेज के आकार को काफी कम कर देता है।
  • \n
\n\n

docker-compose के साथ काम करना: Node.js को डेटाबेस से जोड़ना

\n\n

वास्तविक एप्लिकेशन शायद ही कभी एक कंटेनर तक सीमित होते हैं। docker-compose.yml आपको एक कमांड से Node.js, MongoDB और, उदाहरण के लिए, Redis चलाने की अनुमति देता है:

\n\n
version: '3.8'\nservices:\n  app:\n    build: .\n    ports:\n      - "3000:3000"\n    environment:\n      - NODE_ENV=production\n      - MONGODB_URI=mongodb://mongo:27017/myapp\n      - REDIS_URL=redis://redis:6379\n    depends_on:\n      - mongo\n      - redis\n    volumes:\n      - ./logs:/usr/src/app/logs\n\n  mongo:\n    image: mongo:6\n    volumes:\n      - mongo_data:/data/db\n    ports:\n      - "27017:27017"\n\n  redis:\n    image: redis:7-alpine\n    ports:\n      - "6379:6379"\n\nvolumes:\n  mongo_data:
\n\n

यह कैसे काम करता है:

\n
    \n
  • सर्विस app हमारे Dockerfile से बनती है।
  • \n
  • सर्विस mongo और redis Docker Hub से तैयार इमेज का उपयोग करती हैं।
  • \n
  • एनवायरनमेंट वेरिएबल MONGODB_URI और REDIS_URL एप्लिकेशन को पास किए जाते हैं — ध्यान दें कि हम सर्विस नामों को hostname के रूप में उपयोग कर रहे हैं (Docker DNS स्वचालित रूप से उन्हें कंटेनरों के IP पतों में हल करता है)।
  • \n
  • वॉल्यूम mongo_d

ब्लॉग

पुस्तक अनुशंसाएँ