Docker وTypeScript: حاويات التطبيقات من الألف إلى الياء

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

Docker وTypeScript: حاويات التطبيقات من الألف إلى الياء



أصبحت الحاويات معيارًا في التطوير الحديث. يتيح Docker حزم تطبيق TypeScript مع جميع التبعيات والبيئة، مما يضمن تشغيله المستقر على أي منصة - من جهاز الكمبيوتر المحلي للمطور إلى خادم الإنتاج. في هذه المقالة، سنستعرض الدورة الكاملة: من Dockerfile الأساسي إلى بناء الإنتاج المحسّن.



1. أساسيات Docker لمطور TypeScript



Docker هي منصة لإنشاء وتسليم وتشغيل التطبيقات في بيئات معزولة (حاويات). بالنسبة لتطبيقات TypeScript التي يتم تجميعها إلى JavaScript وتعمل على Node.js، يحل Docker ثلاث مشكلات رئيسية:



  • قابلية تكرار البيئة: انسَ عبارة "يعمل لدي". يتم تثبيت إصدارات Node.js و npm والحزم النظامية في الصورة.
  • العزل: يعمل كل تطبيق في حاويته الخاصة دون التأثير على الخدمات الأخرى.
  • التوسع: يمكن تكرار الحاويات وتنسيقها بسهولة.


قبل البدء، تأكد من تثبيت Docker و Docker Compose. يمكنك التحقق باستخدام الأوامر:



docker --versiondocker-compose --version


2. إنشاء Dockerfile لتطبيق TypeScript



لنبدأ بتطبيق TypeScript بسيط. لنفترض أن لدينا ملف src/index.ts:



import express from 'express';

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

app.get('/', (req, res) => { res.send('Hello from Docker + TypeScript!');});

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


الآن لننشئ Dockerfile في جذر المشروع:



# ---- الصورة الأساسية للتطوير ----FROM node:18-alpine AS baseWORKDIR /appCOPY package*.json ./RUN npm ci --only=production

# ---- بناء TypeScript ----FROM base AS buildCOPY tsconfig.json ./COPY src/ ./src/RUN npm ci && npm run build

# ---- صورة الإنتاج ----FROM node:18-alpine AS productionWORKDIR /appCOPY --from=build /app/dist ./distCOPY --from=base /app/node_modules ./node_modulesEXPOSE 3000CMD ["node", "dist/index.js"]


هذا هو البناء متعدد المراحل (multi-stage build). يسمح بما يلي:

  • تثبيت جميع التبعيات (بما في ذلك devDependencies) فقط في مرحلة البناء
  • تضمين فقط JavaScript المترجم وتبعيات الإنتاج في الصورة النهائية
  • تقليل حجم الصورة بمقدار 2-3 مرات


قم ببناء الصورة وتشغيل الحاوية:



docker build -t my-typescript-app .docker run -p 3000:3000 my-typescript-app


3. إعداد docker-compose للتطوير والإنتاج



يعمل Docker Compose على تبسيط العمل مع التطبيقات متعددة الحاويات. لننشئ docker-compose.yml:



version: '3.8'

services: app: build: context: . target: development ports: - "3000:3000" volumes: - .:/app - /app/node_modules environment: - NODE_ENV=development command: npm run dev

# نسخة الإنتاج app-prod: build: context: . target: production ports: - "80:3000" environment: - NODE_ENV=production


لتسهيل الأمر، سنضيف Dockerfile منفصل للتطوير (يمكن توسيع الصورة الأساسية):



# Dockerfile.devFROM node:18-alpineWORKDIR /appCOPY package*.json ./RUN npm installCOPY . .EXPOSE 3000CMD ["npm", "run", "dev"]


التشغيل في وضع التطوير:



docker-compose up app


بفضل volumes، يتم التقاط التغييرات في الكود فورًا (hot-reload)، ويتم استبعاد /app/node_modules لتجنب إعادة كتابة التبعيات من الحاوية.

المدونات

توصيات الكتب