Docker और TypeScript: शून्य से एप्लिकेशन का कंटेनरीकरण

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

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

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

परिचय: TypeScript एप्लिकेशन को कंटेनरीकृत क्यों करें?



आधुनिक सॉफ्टवेयर विकास कंटेनरीकरण के बिना अकल्पनीय है। Docker अलग-अलग वातावरणों में एप्लिकेशन को पैकेज करने, वितरित करने और चलाने के लिए डी-फैक्टो मानक बन गया है। TypeScript — JavaScript के एक सख्ती से टाइप किए गए सुपरसेट — के साथ मिलकर, Docker पूर्वानुमेयता, पोर्टेबिलिटी सुनिश्चित करता है और CI/CD प्रक्रियाओं को सरल बनाता है।



इस लेख में, हम समझेंगे कि TypeScript एप्लिकेशन को सही तरीके से कैसे कंटेनरीकृत किया जाए: बुनियादी Dockerfile से लेकर docker-compose और मल्टी-स्टेज बिल्ड का उपयोग करके production-ready बिल्ड तक। आप सीखेंगे कि सामान्य गलतियों से कैसे बचें, इमेज का आकार कैसे कम करें और डिप्लॉयमेंट को कैसे तेज़ करें।



मूल बातें: Docker में TypeScript और Node.js



TypeScript एक ऐसी भाषा है जो JavaScript में कंपाइल होती है। इसका मतलब है कि कंटेनर में TypeScript एप्लिकेशन चलाने के लिए, हमें पहले सोर्स कोड को कंपाइल करना होगा और फिर Node.js का उपयोग करके प्राप्त JavaScript को निष्पादित करना होगा। Docker इस प्रक्रिया को स्वचालित करने के लिए आदर्श है।



एक सरल TypeScript एप्लिकेशन बनाना



शुरू करने के लिए, TypeScript पर एक न्यूनतम एप्लिकेशन बनाते हैं। प्रोजेक्ट संरचना:



my-ts-app/├── src/│   └── index.ts├── package.json├── tsconfig.json└── Dockerfile


src/index.ts:



import express, { Request, Response } from 'express';

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

app.get('/', (req: Request, res: Response) => { res.json({ message: 'Hello from TypeScript + Docker!' });});

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


package.json:



{  "name": "my-ts-app",  "version": "1.0.0",  "scripts": {    "build": "tsc",    "start": "node dist/index.js",    "dev": "ts-node src/index.ts"  },  "dependencies": {    "express": "^4.18.2"  },  "devDependencies": {    "@types/express": "^4.17.21",    "@types/node": "^20.11.0",    "typescript": "^5.3.3",    "ts-node": "^10.9.2"  }}


tsconfig.json:



{  "compilerOptions": {    "target": "ES2020",    "module": "commonjs",    "outDir": "./dist",    "rootDir": "./src",    "strict": true,    "esModuleInterop": true,    "skipLibCheck": true  },  "include": ["src/**/*"]}


बुनियादी Dockerfile



पहला, सबसे सरल Dockerfile विकल्प:



FROM node:20-alpine

WORKDIR /app

COPY package*.json ./RUN npm install

COPY . .

RUN npm run build

EXPOSE 3000

CMD ["npm", "start"]


यह Dockerfile पूरे प्रोजेक्ट को कॉपी करता है, डिपेंडेंसी इंस्टॉल करता है, TypeScript को कंपाइल करता है और एप्लिकेशन को चलाता है। हालाँकि, इस दृष्टिकोण में कमियाँ हैं: इमेज का आकार बड़ा है, और लेयर कैशिंग अकुशल है।



ऑप्टिमाइज़ेशन: मल्टी-स्टेज बिल्ड और आकार कम करना



production वातावरण के लिए, मल्टी-स्टेज बिल्ड (multi-stage build) का उपयोग करने की अनुशंसा की जाती है। यह बिल्ड और निष्पादन चरणों को अलग करने की अनुमति देता है, जिससे अंतिम इमेज में केवल आवश्यक फ़ाइलें रह जाती हैं।



मल्टी-स्टेज बिल्ड के साथ Production Dockerfile



# Stage 1: BuildFROM node:20-alpine AS builder

WORKDIR /app

COPY package*.json ./RUN npm ci --only=production

COPY . .RUN npm run build

# Stage 2: ProductionFROM node:20-alpine

WORKDIR /app

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

EXPOSE 3000

USER node

CMD ["node", "dist/index.js"]


इस दृष्टिकोण के लाभ:

  • छोटा इमेज आकार — अंतिम लेयर में केवल कंपाइल किया गया कोड और production डिपेंडेंसी होती है।
  • सुरक्षा — कंटेनर में TypeScript का सोर्स कोड, dev

ब्लॉग

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