البرمجة

إعداد تطبيق Node.js باستخدام Docker

إعداد تطبيق 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 بعد، يمكنك اتباع الخطوات التالية:

  1. افتح سطر الأوامر وقم بإنشاء مجلد جديد لمشروعك:

    bash
    mkdir node-app cd node-app
  2. قم بإنشاء ملف package.json:

    bash
    npm init -y
  3. قم بتثبيت مكتبة express:

    bash
    npm install express
  4. أنشئ ملف app.js يحتوي على الكود التالي لتشغيل تطبيق بسيط باستخدام Express:

    javascript
    const 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 الخاص بك.

  1. في جذر المشروع، أنشئ ملفًا جديدًا باسم 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.

  1. في نفس المجلد، أنشئ ملف docker-compose.yml يحتوي على التكوين التالي:

    yaml
    version: '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.

  1. في نفس المجلد، افتح سطر الأوامر وابدأ في بناء الحاويات:

    bash
    docker-compose up --build
  2. سيقوم Docker Compose بتحميل الصور، بناء الحاويات، ثم تشغيلها. يمكنك بعد ذلك الوصول إلى تطبيق Node.js عن طريق زيارة http://localhost:3000.

  3. للتحقق من الحاويات التي تعمل، يمكنك استخدام الأمر التالي:

    bash
    docker ps

5. الاتصال بقاعدة البيانات من داخل تطبيق Node.js

الآن بعد أن أصبح لديك كل من تطبيق Node.js و MySQL في حاويات مختلفة، يجب أن تتأكد من أن تطبيقك يمكنه الاتصال بقاعدة البيانات. يمكنك تعديل تطبيق Node.js للاتصال بقاعدة البيانات باستخدام مكتبة مثل mysql2.

  1. أولاً، قم بتثبيت مكتبة mysql2:

    bash
    npm install mysql2
  2. بعد ذلك، قم بتعديل app.js للاتصال بقاعدة البيانات:

    javascript
    const 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}`); });
  3. الآن، في قاعدة البيانات، يمكنك إضافة جدول greetings وتخزين بعض الرسائل لاختبار الاتصال:

    sql
    CREATE TABLE greetings (id INT AUTO_INCREMENT PRIMARY KEY, message VARCHAR(255)); INSERT INTO greetings (message) VALUES ('Hello, Docker!');

6. إيقاف الحاويات وتنظيف البيئة

بعد اختبار التطبيق، قد ترغب في إيقاف الحاويات وتنظيف البيئة. لإيقاف الحاويات، يمكنك استخدام الأمر التالي:

bash
docker-compose down

إذا كنت ترغب في إزالة الحاويات والبيانات المرتبطة بها، يمكنك استخدام الخيار --volumes:

bash
docker-compose down --volumes

الخلاصة

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