
Docker للمبتدئين: دليل عملي باستخدام NestJS
Docker للمبتدئين: دليل عملي باستخدام NestJS
دليل شامل وسهل الفهم لـ Docker و Docker Compose باستخدام تطبيق NestJS عملي. تعلم كيفية تهيئة التطبيق، التعامل مع ملفات .env، وتشغيل خدمات متعددة بسهولة.
دليل Docker و NestJS - الترجمة العربية
ما هو Docker؟
Docker هو منصة مفتوحة المصدر تتيح للمطورين أتمتة نشر التطبيقات داخل حاويات خفيفة الوزن ومحمولة. تحزم هذه الحاويات تطبيقك مع جميع التبعيات والمكتبات وملفات التكوين، مما يجعل تشغيله سهلاً على أي نظام يدعم Docker.
لماذا Docker؟
- الاتساق عبر البيئات: تشغيل نفس الكود في التطوير والإنتاج المرحلي والإنتاج النهائي
- الإعداد المبسط: لا حاجة لتثبيت Node.js أو قواعد البيانات أو الأدوات الأخرى يدوياً
- العزل: يحافظ على عزل تبعيات تطبيقك عن الجهاز المضيف
- قابلية النقل: تشغيل تطبيقك على أي جهاز مثبت عليه Docker
تثبيت Docker
للبدء، قم بتثبيت Docker من docker.com.
بمجرد التثبيت، تحقق من أنه يعمل:
docker --version
إنشاء تطبيق NestJS (إذا لم يكن لديك واحد بالفعل)
npm i -g @nestjs/cli nest new my-nest-app cd my-nest-app
وضع تطبيق NestJS في حاوية Docker
1. إنشاء ملف .dockerignore
node_modules dist Dockerfile docker-compose.yml .env
لماذا؟ ملف .dockerignore يعمل مثل .gitignore، يخبر Docker بالملفات/المجلدات التي يجب استبعادها عند بناء الصورة. هذا يقلل وقت البناء ويحافظ على نظافة الصورة النهائية من الملفات غير الضرورية مثل التبعيات المحلية والمخرجات المترجمة وملفات التكوين الحساسة.
2. إنشاء Dockerfile
# المرحلة 1: البناء FROM node:18-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # المرحلة 2: التشغيل FROM node:18-alpine WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules COPY .env . CMD [ "node", "dist/main.js" ]
ما هو Dockerfile؟ Dockerfile هو نص برمجي من التعليمات حول كيفية بناء صورة Docker. فكر فيه كوصفة لتحضير تطبيقك في حاوية. يخبر Docker بالصورة الأساسية المراد استخدامها، وكيفية تثبيت التبعيات، وكيفية بناء التطبيق، وكيفية تشغيله.
شرح الأوامر الرئيسية:
- FROM: يحدد الصورة الأساسية. نستخدم node:18-alpine لبيئة Node.js صغيرة وآمنة
- WORKDIR: يحدد مجلد العمل داخل الحاوية
- COPY: ينسخ الملفات من مشروعك إلى الحاوية
- RUN: ينفذ أوامر shell، مثل تثبيت التبعيات أو بناء المشروع
- CMD: الأمر الافتراضي للتشغيل عند بدء الحاوية (تطبيق NestJS)
💡 هذا Dockerfile يستخدم البناء متعدد المراحل للحفاظ على صغر حجم الصورة النهائية من خلال فصل مراحل البناء والتشغيل.
3. التعامل مع متغيرات البيئة
تأكد من أن تطبيق NestJS يستخدم @nestjs/config:
npm install @nestjs/config
في main.ts أو الوحدة الخاصة بك:
import { ConfigModule } from '@nestjs/config'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, }), ], })
أضف ملف .env:
PORT=3000
اقرأه في كودك:
const port = process.env.PORT || 3000;
🔒 لا تقم أبداً بإضافة .env إلى Git. يجب أن يبقى خاصاً وخارج نظام التحكم في الإصدارات.
Docker Compose: تبسيط إعدادات الحاويات المتعددة
Docker Compose يتيح لك تعريف وتشغيل تطبيقات Docker متعددة الحاويات. إنه مثالي لدمج الخدمات مثل تطبيق NestJS + قاعدة بيانات.
مثال: docker-compose.yml
version: '3.8' services: app: build: . ports: - "3000:3000" env_file: - .env depends_on: - db db: image: postgres:15 restart: always environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: myapp volumes: - pgdata:/var/lib/postgresql/data volumes: pgdata:
لماذا استخدام Docker Compose؟ تخيل أنك تحتاج لبدء خادم الواجهة الخلفية، وقاعدة بيانات PostgreSQL، وربما Redis instance - جميعها مكونة للتواصل مع بعضها البعض. Docker Compose يتيح لك تعريف كل هذه في ملف واحد وبدئها بأمر واحد، مما يجعل التطوير المحلي وتنسيق الإنتاج أبسط بكثير.
ثم شغل:
docker-compose up --build
سيبدأ تطبيق NestJS على المنفذ 3000 وسيكون متصلاً بحاوية قاعدة بيانات PostgreSQL.
أوامر Docker المفيدة
- بناء الصورة:
docker build -t my-nest-app .
- تشغيل الحاوية:
docker run -p 3000:3000 my-nest-app
- عرض الحاويات:
docker ps
- إيقاف الحاويات:
docker-compose down
نظرة عامة بصرية
NestJS → مترجم → حاوية Docker → المنفذ 3000 مكشوف → متصل بقاعدة البيانات (Postgres)
الخلاصة
Docker يبسط التطوير، ويحسن الاتساق، وهو ضروري لنشر التطبيقات الحديثة. من خلال وضع تطبيق NestJS في حاوية واستخدام Docker Compose، تقلل وقت الإعداد، وتتجنب مشاكل "يعمل على جهازي"، وتحضر تطبيقك لقابلية التوسع في الإنتاج.
إذا كنت تبدأ للتو في تطوير الواجهة الخلفية أو تسعى لتحديث سير عملك، فإن تعلم Docker استثمار يؤتي ثماره بسرعة.
هل تحتاج مساعدة في إعداد Docker لمشروعك؟ لا تتردد في التواصل أو الاتصال بي على LinkedIn.