Docker और JavaScript: Node.js अनुप्रयोगों का कंटेनरीकरण

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

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

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

Docker और JavaScript: Node.js अनुप्रयोगों के कंटेनरीकरण के लिए पूर्ण गाइड



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



Docker क्या है और JavaScript डेवलपर को इसकी आवश्यकता क्यों है?



Docker कंटेनर नामक पृथक वातावरण में अनुप्रयोगों के विकास, वितरण और चलाने के लिए एक प्लेटफॉर्म है। एक कंटेनर में एप्लिकेशन को चलाने के लिए आवश्यक सब कुछ शामिल होता है: कोड, रनटाइम वातावरण, सिस्टम लाइब्रेरी और निर्भरताएँ।



Node.js डेवलपर के लिए, Docker कई प्रमुख समस्याओं का समाधान करता है:

  • वातावरण की पुनरुत्पादकता: एप्लिकेशन डेवलपर की लोकल मशीन, CI/CD सर्वर और production में समान रूप से काम करता है।
  • निर्भरताओं का पृथक्करण: विभिन्न प्रोजेक्ट बिना किसी विरोध के Node.js, ग्लोबल पैकेज और सिस्टम लाइब्रेरी के विभिन्न संस्करणों का उपयोग कर सकते हैं।
  • तैनाती में सरलता: Node.js, npm स्थापित करने और वातावरण कॉन्फ़िगर करने के जटिल निर्देशों के बजाय - एक इमेज जो एक कमांड से चलती है।
  • स्केलिंग: कंटेनरों को ऑर्केस्ट्रेटर (Kubernetes, Docker Swarm) के माध्यम से आसानी से स्केल किया जा सकता है।


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



चलिए Express पर एक सरल Node.js एप्लिकेशन से शुरू करते हैं। एक बेसिक server.js बनाएँ:



const express = require('express');const app = express();const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => { res.json({ message: 'Hello from Dockerized Node.js!' });});

app.listen(PORT, () => { console.log(`Server running on port ${PORT}`);});


अब एक Dockerfile बनाएँ:



# बेस Node.js इमेजFROM node:18-alpine

# वर्किंग डायरेक्टरी सेट करनाWORKDIR /app

# package.json और package-lock.json कॉपी करनाCOPY package*.json ./

# निर्भरताएँ स्थापित करनाRUN npm ci --only=production

# सोर्स कोड कॉपी करनाCOPY . .

# पोर्ट खोलनाEXPOSE 3000

# एप्लिकेशन चलानाCMD ["node", "server.js"]


प्रमुख बिंदुओं को समझते हैं:

  • FROM node:18-alpine: हम न्यूनतम Alpine-आधारित Node.js 18 इमेज का उपयोग करते हैं - यह अंतिम इमेज के आकार को काफी कम करता है।
  • WORKDIR /app: कंटेनर के अंदर वर्किंग डायरेक्टरी सेट करता है।
  • COPY package*.json ./: निर्भरता फ़ाइलों को कोड से अलग कॉपी करता है - यह केवल कोड बदलने पर निर्भरता वाली लेयर को कैश करने की अनुमति देता है।
  • RUN npm ci --only=production: इमेज का आकार कम करने के लिए केवल production-निर्भरताएँ (devDependencies के बिना) स्थापित करता है।
  • COPY . .: निर्भरताएँ स्थापित करने के बाद सभी सोर्स कोड कॉपी करता है।


इमेज बनाएँ और कंटेनर चलाएँ:



docker build -t my-node-app .docker run -d -p 3000:3000 --name my-app my-node-app


Production के लिए Dockerfile को अनुकूलित करना



Production वातावरण के लिए, हम सबसे हल्की अंतिम इमेज बनाने के लिए मल्टी-स्टेज बिल्ड (multi-stage build) का उपयोग करते हैं:



# बिल्ड स्टेजFROM node:18-alpine AS builder

WORKDIR /appCOPY package*.json ./RUN npm ciCOPY . .RUN npm run build # यदि कोई बिल्ड स्टेज है (TypeScript, Webpack आदि)

# Production स्टेजFROM node:18-alpine

WORKDIR /appCOPY --from=builder /app/dist ./distCOPY --from=builder /app/node_modules ./node_modulesCOPY --from=builder /app/package.json ./

EXPOSE 3000CMD ["node", "dist/server.js"]


अतिरिक्त स ```

ब्लॉग

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