Docker और TypeScript: एप्लिकेशन कंटेनरीकरण A से Z तक
\n\nकंटेनरीकरण आधुनिक डेवलपमेंट का मानक बन गया है। Docker आपको TypeScript एप्लिकेशन को सभी निर्भरताओं और वातावरण के साथ पैकेज करने की अनुमति देता है, जो डेवलपर के लोकल कंप्यूटर से लेकर production सर्वर तक किसी भी प्लेटफॉर्म पर इसके स्थिर संचालन की गारंटी देता है। इस लेख में, हम पूर्ण चक्र को कवर करेंगे: बेसिक Dockerfile से लेकर ऑप्टिमाइज़्ड production बिल्ड तक।
\n\n1. TypeScript डेवलपर के लिए Docker की मूल बातें
\n\nDocker आइसोलेटेड वातावरण (कंटेनर) में एप्लिकेशन बनाने, वितरित करने और चलाने के लिए एक प्लेटफॉर्म है। TypeScript एप्लिकेशन के लिए, जो JavaScript में कंपाइल होते हैं और Node.js पर चलते हैं, Docker तीन मुख्य समस्याओं का समाधान करता है:
\n\n- \n
- वातावरण की पुनरुत्पादन क्षमता: "मेरे पास काम करता है" वाक्यांश को भूल जाइए। Node.js, npm और सिस्टम पैकेज के संस्करण इमेज में फिक्स किए गए हैं। \n
- आइसोलेशन: प्रत्येक एप्लिकेशन अपने कंटेनर में चलता है, अन्य सेवाओं को प्रभावित किए बिना। \n
- स्केलिंग: कंटेनर आसानी से रेप्लिकेट और ऑर्केस्ट्रेट किए जा सकते हैं। \n
शुरू करने से पहले, सुनिश्चित करें कि आपके पास Docker और Docker Compose इंस्टॉल हैं। आप इन कमांड से जांच सकते हैं:
\n\ndocker --version\ndocker-compose --version\n\n2. TypeScript एप्लिकेशन के लिए Dockerfile बनाना
\n\nचलिए एक सरल TypeScript एप्लिकेशन से शुरू करते हैं। मान लीजिए हमारे पास फ़ाइल src/index.ts है:
import express from 'express';\n\nconst app = express();\nconst port = process.env.PORT || 3000;\n\napp.get('/', (req, res) => {\n res.send('Hello from Docker + TypeScript!');\n});\n\napp.listen(port, () => {\n console.log(`Server started on port ${port}`);\n});\n\nअब प्रोजेक्ट की रूट में Dockerfile बनाएं:
# ---- डेवलपमेंट के लिए बेस इमेज ----\nFROM node:18-alpine AS base\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci --only=production\n\n# ---- TypeScript बिल्ड ----\nFROM base AS build\nCOPY tsconfig.json ./\nCOPY src/ ./src/\nRUN npm ci && npm run build\n\n# ---- Production इमेज ----\nFROM node:18-alpine AS production\nWORKDIR /app\nCOPY --from=build /app/dist ./dist\nCOPY --from=base /app/node_modules ./node_modules\nEXPOSE 3000\nCMD ["node", "dist/index.js"]\n\nयह एक मल्टी-स्टेज बिल्ड (multi-stage build) है। यह अनुमति देता है:
\n- \n
- सभी निर्भरताएँ (devDependencies सहित) केवल बिल्ड चरण में इंस्टॉल करना
- अंतिम इमेज में केवल कंपाइल किया गया JavaScript और production-निर्भरताएँ शामिल होती हैं
- इमेज का आकार 2-3 गुना कम हो जाता है
इमेज बनाएं और कंटेनर चलाएं:
\n\ndocker build -t my-typescript-app .\ndocker run -p 3000:3000 my-typescript-app\n\n3. डेवलपमेंट और प्रोडक्शन के लिए docker-compose सेटअप
\n\nDocker Compose मल्टी-कंटेनर एप्लिकेशन के साथ काम करना आसान बनाता है। आइए docker-compose.yml बनाएं:
version: '3.8'\n\nservices:\n app:\n build:\n context: .\n target: development\n ports:\n - "3000:3000"\n volumes:\n - .:/app\n - /app/node_modules\n environment:\n - NODE_ENV=development\n command: npm run dev\n\n # प्रोडक्शन वर्शन\n app-prod:\n build:\n context: .\n target: production\n ports:\n - "80:3000"\n environment:\n - NODE_ENV=production\n\nसुविधा के लिए, डेवलपमेंट के लिए एक अलग Dockerfile जोड़ें (बेस इमेज को बढ़ाया जा सकता है):
\n\n# Dockerfile.dev\nFROM node:18-alpine\nWORKDIR /app\nCOPY package*.json ./\nRUN npm install\nCOPY . .\nEXPOSE 3000\nCMD ["npm", "run", "dev"]\n\nडेवलपमेंट मोड में चलाएं:
\n\ndocker-compose up app\n\nvolumes के कारण, कोड में बदलाव तुरंत उठाए जाते हैं (hot-reload), और /app/node_modules को बाहर रखा गया है ताकि कंटेनर से निर्भरताएँ ओवरराइट न हों।