Docker وJavaScript: حاويات تطبيقات Node.js من الصفر

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

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

ابدأ الدورة

Docker وJavaScript: دليل شامل لحاويات تطبيقات Node.js



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



ما هو Docker ولماذا يحتاجه مطور JavaScript؟



Docker هي منصة لتطوير وتسليم وتشغيل التطبيقات في حاويات. الحاوية هي بيئة خفيفة الوزن ومستقلة وقابلة للتنفيذ تحتوي على كل ما هو ضروري لتشغيل التطبيق: الكود، وبيئة التشغيل (runtime)، والأدوات النظامية، والمكتبات، والإعدادات.



بالنسبة لمطور JavaScript الذي يعمل مع Node.js، يحل Docker العديد من المشكلات الرئيسية:



  • قابلية تكرار البيئة: "إنه يعمل على جهازي" — لم يعد مشكلة. يضمن Docker أن التطبيق سيعمل بنفس الطريقة على كمبيوتر المطور، وخادم CI/CD، وفي بيئة الإنتاج (production).
  • عزل التبعيات: يحصل كل تطبيق على مجموعة التبعيات الخاصة به، دون التعارض مع المشاريع الأخرى.
  • تبسيط النشر: يمكن تشغيل صورة Docker بسهولة على أي منصة تدعم Docker (Linux، Windows، macOS، الخوادم السحابية).
  • التوسع: يمكن توسيع نطاق الحاويات أفقيًا بسهولة باستخدام أدوات التنسيق مثل Docker Compose أو Kubernetes.


إنشاء Dockerfile لتطبيق Node.js



Dockerfile هو ملف نصي يحتوي على تعليمات لبناء صورة Docker. دعنا نلقي نظرة على الإنشاء التدريجي لـ Dockerfile لتطبيق Express.js نموذجي.



لنفترض أن لدينا تطبيق Node.js بسيطًا بالهيكل التالي:



my-node-app/├── package.json├── package-lock.json├── src/│   └── index.js└── Dockerfile


محتويات src/index.js:



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

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

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


الآن لنقم بإنشاء Dockerfile:



# نستخدم الصورة الرسمية لـ Node.js الإصدار 18 (LTS)FROM node:18-alpine

# نحدد دليل العمل داخل الحاويةWORKDIR /usr/src/app

# ننسخ ملفي package.json و package-lock.jsonCOPY package*.json ./

# نقوم بتثبيت تبعيات التطبيقRUN npm ci --only=production

# ننسخ الكود المصدري للتطبيقCOPY . .

# نحدد المنفذ الذي سيستمع عليه التطبيقEXPOSE 3000

# الأمر لتشغيل التطبيقCMD ["node", "src/index.js"]


دعنا نحلل النقاط الرئيسية:

  • FROM node:18-alpine — نستخدم صورة مصغرة مبنية على Alpine Linux. هذا يقلل بشكل كبير من حجم الصورة النهائية.
  • WORKDIR — يحدد دليل العمل. سيتم تنفيذ جميع الأوامر اللاحقة بالنسبة له.
  • COPY package*.json ./ — ننسخ ملفات التبعيات فقط قبل نسخ الكود المصدري. هذا يسمح بتخزين الطبقة التي تحتوي على تثبيت التبعيات مؤقتًا (caching) إذا لم يتغير package.json.
  • RUN npm ci --only=production — يقوم بتثبيت التبعيات من ملف lock. العلم --only=production يستبعد تبعيات التطوير (الاختبارات، أدوات التحليل، إلخ)، مما يقلل من حجم الصورة.
  • EXPOSE 3000 — يشير توثيقيًا إلى أن التطبيق يستمع على المنفذ 3000. هذا لا يفتح المنفذ تلقائيًا، ولكنه يعمل كدليل لـ Docker.


بناء وتشغيل الحاوية



المدونات

توصيات الكتب