إعداد تطبيق Node.js لسير عمل يعتمد على الحاويات باستخدام Docker Compose
مقدمة
في عالم البرمجة الحديث، أصبحت الحاويات أحد الأدوات الأساسية لتطوير ونقل التطبيقات بسهولة وفعالية. تعد الحاويات بيئة معزولة تسمح بتشغيل التطبيقات بشكل مستقل عن النظام الأساسي الذي يتم نشرها عليه. من بين الأدوات التي ساهمت بشكل كبير في تبسيط استخدام الحاويات، نجد Docker. يعد Docker أحد الأدوات الأكثر استخدامًا في هذا السياق، حيث يتيح للمطورين إنشاء، اختبار، وتشغيل التطبيقات داخل حاويات مستقلة، مما يعزز من كفاءة العمل ويقلل من التحديات التي تواجه التطبيقات في بيئات مختلفة.
من خلال استخدام Docker Compose، يمكن تبسيط عملية إدارة وتنظيم الحاويات المتعددة التي تحتاج إلى العمل معًا في بيئة معينة، مثل التطبيقات المعتمدة على قواعد البيانات والخوادم والمكونات المختلفة. في هذا المقال، سنتناول كيفية إعداد تطبيق Node.js باستخدام Docker Compose لتحديد سير عمل يعتمد على الحاويات، مما يتيح لك بناء بيئة تطوير مستقلة وسهلة الصيانة.
لماذا استخدام Docker و Docker Compose؟
Docker يسهل تشغيل التطبيقات عبر بيئات متعددة دون الحاجة إلى القلق بشأن التوافق مع الأنظمة الأساسية المختلفة. من خلال عزل التطبيق داخل حاوية، يمكن للمطورين التأكد من أن الكود سيعمل بنفس الطريقة بغض النظر عن بيئة التشغيل.
أما Docker Compose فهو أداة تُستخدم لتحديد وتشغيل تطبيقات متعددة الحاويات. يتم كتابة تكوين الحاويات في ملف docker-compose.yml، الذي يتيح لك توصيل العديد من الحاويات معًا بكل سهولة، مثل حاوية Node.js وحاوية قاعدة البيانات، وبالتالي تسهيل إدارة التطبيق ككل.
خطوات إعداد تطبيق Node.js باستخدام Docker Compose
1. إعداد بيئة Node.js المحلية
قبل أن نبدأ في استخدام Docker و Docker Compose، تأكد من أن لديك بيئة Node.js قيد التشغيل. قم بإنشاء تطبيق بسيط باستخدام Node.js لتبدأ منه. إذا لم تكن قد أنشأت مشروع Node.js بعد، يمكنك اتباع الخطوات التالية:
-
افتح سطر الأوامر وقم بإنشاء مجلد جديد لمشروعك:
bashmkdir node-app cd node-app -
قم بإنشاء ملف
package.json:bashnpm init -y -
قم بتثبيت مكتبة express:
bashnpm install express -
أنشئ ملف
app.jsيحتوي على الكود التالي لتشغيل تطبيق بسيط باستخدام Express:javascriptconst express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => { res.send('Hello, Docker!'); }); app.listen(port, () => { console.log(`Server running on http://localhost:${port}`); });
2. إعداد Dockerfile لتطبيق Node.js
الخطوة التالية هي إعداد Dockerfile لتعبئة تطبيق Node.js داخل حاوية. هذا الملف يحتوي على تعليمات لإنشاء صورة Docker مخصصة لتطبيق Node.js الخاص بك.
-
في جذر المشروع، أنشئ ملفًا جديدًا باسم
Dockerfile:dockerfile# استخدام صورة رسمية من Node.js FROM node:14 # تعيين مجلد العمل داخل الحاوية WORKDIR /usr/src/app # نسخ package.json و package-lock.json COPY package*.json ./ # تثبيت التبعيات RUN npm install # نسخ باقي ملفات المشروع COPY . . # تعيين المنفذ الذي سيستمع عليه التطبيق EXPOSE 3000 # تشغيل التطبيق عند بدء الحاوية CMD ["node", "app.js"]
هنا نحدد أننا نستخدم صورة رسمية من Node.js، نقوم بتعيين مجلد العمل داخل الحاوية، ثم نقوم بتثبيت التبعيات وتشغيل التطبيق.
3. إعداد Docker Compose
الآن، حان الوقت لاستخدام Docker Compose لتنسيق الحاويات المتعددة التي يحتاجها تطبيقك. في هذا المثال، سنقوم بإعداد تطبيق Node.js بالإضافة إلى قاعدة بيانات (مثل MySQL) باستخدام Docker Compose.
-
في نفس المجلد، أنشئ ملف
docker-compose.ymlيحتوي على التكوين التالي:yamlversion: '3.8' services: web: build: . ports: - "3000:3000" depends_on: - db db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: mydb volumes: - mysql_data:/var/lib/mysql ports: - "3306:3306" volumes: mysql_data:شرح التكوين:
-
web: هذه هي الحاوية الخاصة بتطبيق Node.js. نحن نستخدم الخيار
buildلبناء الصورة من Dockerfile الموجود في المجلد الحالي. كما نقوم بتحديد المنفذ 3000 ليتمكن التطبيق من الاستماع عليه. -
db: هذه الحاوية تحتوي على قاعدة البيانات MySQL. نستخدم صورة رسمية من MySQL وتحديد كلمة المرور الخاصة بالجذر واسم قاعدة البيانات.
-
volumes: نستخدم هنا volumes لحفظ بيانات قاعدة البيانات بشكل دائم حتى في حال إيقاف الحاوية.
-
4. تشغيل Docker Compose
بمجرد أن يكون لديك الملفات المذكورة سابقًا (Dockerfile و docker-compose.yml)، يمكنك البدء في تشغيل التطبيق باستخدام Docker Compose.
-
في نفس المجلد، افتح سطر الأوامر وابدأ في بناء الحاويات:
bashdocker-compose up --build -
سيقوم Docker Compose بتحميل الصور، بناء الحاويات، ثم تشغيلها. يمكنك بعد ذلك الوصول إلى تطبيق Node.js عن طريق زيارة http://localhost:3000.
-
للتحقق من الحاويات التي تعمل، يمكنك استخدام الأمر التالي:
bashdocker ps
5. الاتصال بقاعدة البيانات من داخل تطبيق Node.js
الآن بعد أن أصبح لديك كل من تطبيق Node.js و MySQL في حاويات مختلفة، يجب أن تتأكد من أن تطبيقك يمكنه الاتصال بقاعدة البيانات. يمكنك تعديل تطبيق Node.js للاتصال بقاعدة البيانات باستخدام مكتبة مثل mysql2.
-
أولاً، قم بتثبيت مكتبة mysql2:
bashnpm install mysql2 -
بعد ذلك، قم بتعديل
app.jsللاتصال بقاعدة البيانات:javascriptconst express = require('express'); const mysql = require('mysql2'); const app = express(); const port = 3000; const connection = mysql.createConnection({ host: 'db', // اسم خدمة قاعدة البيانات في Docker Compose user: 'root', password: 'example', database: 'mydb' }); app.get('/', (req, res) => { connection.query('SELECT message FROM greetings', (err, results) => { if (err) { return res.status(500).send('Database error'); } res.send(results[0].message); }); }); app.listen(port, () => { console.log(`Server running on http://localhost:${port}`); }); -
الآن، في قاعدة البيانات، يمكنك إضافة جدول
greetingsوتخزين بعض الرسائل لاختبار الاتصال:sqlCREATE TABLE greetings (id INT AUTO_INCREMENT PRIMARY KEY, message VARCHAR(255)); INSERT INTO greetings (message) VALUES ('Hello, Docker!');
6. إيقاف الحاويات وتنظيف البيئة
بعد اختبار التطبيق، قد ترغب في إيقاف الحاويات وتنظيف البيئة. لإيقاف الحاويات، يمكنك استخدام الأمر التالي:
bashdocker-compose down
إذا كنت ترغب في إزالة الحاويات والبيانات المرتبطة بها، يمكنك استخدام الخيار --volumes:
bashdocker-compose down --volumes
الخلاصة
باستخدام Docker و Docker Compose، يمكنك بسهولة إعداد تطبيق Node.js يعمل بشكل مستقل في بيئة معزولة، مما يسهل تطوير ونقل التطبيقات إلى بيئات مختلفة دون القلق بشأن التوافق مع النظام. بفضل هذه الأدوات، يصبح من السهل أيضًا إدارة مكونات التطبيق المعقدة مثل قواعد البيانات والخوادم الأخرى. باتباع الخطوات التي تمت مناقشتها في هذا المقال، يمكنك إعداد تطبيق كامل يعتمد على الحاويات بطريقة مرنة وآمنة.

