حاوية JavaScript: Docker لتطبيقات Node.js والواجهة الأمامية

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

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

ابدأ الدورة

لماذا يستحق مشروع JavaScript الخاص بك استخدام Docker؟

\n\n

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

\n\n

يتيح لك Docker حزم الكود الخاص بك، وجميع التبعيات (حزم npm)، ومتغيرات البيئة، وحتى إصدار Node.js في "حاوية" خفيفة الوزن. ستعمل هذه الحاوية بنفس الطريقة على جهاز الكمبيوتر المحمول الخاص بك، وعلى خادم AWS، وعلى كمبيوتر مبتدئ قام بتثبيت Git للتو. في هذه المقالة، سنشرح كيفية جعل JavaScript و Docker يعملان معًا، وسنكتب كودًا حقيقيًا وننشئ صورة جاهزة للإنتاج لمشروعك الشخصي التالي.

\n\n

أساسيات Docker لمطور JavaScript

\n\n

قبل الغوص في الكود، دعنا نفهم المفاهيم الأساسية. Docker يشبه الآلة الافتراضية، لكنه أخف بكثير. بدلاً من محاكاة نظام تشغيل كامل، يستخدم نواة المضيف ويعزل تطبيقك فقط.

\n\n

Dockerfile — وصفة تطبيقك

\n\n

هذا ملف نصي تصف فيه كيفية بناء الصورة. بالنسبة لتطبيق Node.js، يبدو Dockerfile النموذجي كالتالي:

\n\n
# نستخدم الصورة الرسمية لـ Node.js\nFROM node:18-alpine\n\n# نحدد دليل العمل داخل الحاوية\nWORKDIR /app\n\n# ننسخ ملفي package.json و package-lock.json\nCOPY package*.json ./\n\n# نثبت التبعيات\nRUN npm ci --only=production\n\n# ننسخ الكود المصدري\nCOPY . .\n\n# نفتح المنفذ\nEXPOSE 3000\n\n# الأمر لتشغيل التطبيق\nCMD ["node", "server.js"]
\n\n

لاحظ: نقوم أولاً بنسخ package.json، ثم الكود بأكمله. هذا ليس من قبيل الصدفة. يقوم Docker بتخزين الطبقات مؤقتًا، وإذا لم تقم بتغيير التبعيات، فلن يتم إعادة تشغيل مرحلة npm ci مع كل تغيير في الكود. هذا يسرع عملية البناء بشكل كبير.

\n\n

الصور والحاويات

\n\n
    \n
  • الصورة (Image) — هي قالب. تقوم ببنائها مرة واحدة.
  • \n
  • الحاوية (Container) — هي نسخة قيد التشغيل من الصورة. يمكنك إنشاء 10 حاويات من صورة واحدة.
  • \n
\n\n

إنشاء تطبيق Node.js من الصفر ووضعه في حاوية

\n\n

دعنا نكتب تطبيق Express بسيط ونضعه في Docker. ستكون هذه خطوتنا العملية الأولى في حاوية JavaScript.

\n\n

الخطوة 1: كتابة التطبيق

\n\n

أنشئ مجلدًا باسم docker-node-app وداخله ملفًا باسم server.js:

\n\n
const express = require('express');\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/', (req, res) => {\n  res.json({ \n    message: 'مرحبًا من الحاوية!',\n    nodeVersion: process.version,\n    environment: process.env.NODE_ENV || 'development'\n  });\n});\n\napp.listen(PORT, () => {\n  console.log(`الخادم يعمل على المنفذ ${PORT}`);\n});
\n\n

قم بتهيئة npm وتثبيت express:

\n\n
npm init -y\nnpm install express
\n\n

الآن لدينا تطبيق يعمل. قم بتشغيله محليًا: node server.js. افتح http://localhost:3000 — سترى JSON.

\n\n

الخطوة 2: إنشاء Dockerfile

\n\n

أنشئ ملفًا باسم Dockerfile (بدون امتداد) في جذر المشروع:

\n\n
FROM node:18-alpine\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci --only=production\nCOPY . .\nEXPOSE 3000\nCMD ["node", "server.js"]
\n\n

أضف ملف .dockerignore لتجنب نسخ الملفات غير الضرورية إلى الصورة:

\n\n
node_modules\nnpm-debug.log\n.git\n.gitignore\n.env\nDockerfile
\n\n

الخطوة 3: البناء والتشغيل

\n\n

افتح الطرفية في مجلد المشروع ونفذ:

\n\n
docker build -t my-node-app .\ndocker run -p 3000:3000 my-node-app
\n\n

العلم

المدونات

توصيات الكتب