على مر السنين، أصبحت التطبيقات والأدوات أكثر تعقيدًا لمواكبة متطلبات وتوقعات الأشخاص المتغيرة. ولكن يمكن أن يؤدي ذلك إلى إنشاء مشاكل في توافق الشفرات والوصول عن بُعد. على سبيل المثال، قد تظهر أخطاء توافق عند تثبيت قاعدة الشفرات التي تعمل بشكل صحيح على نظام Windows على نظام Linux.

ولحسن الحظ، يأتي Docker للإنقاذ. ولكن قد تتساءل – ما هو Docker، وكيف يساعد؟ ستتعلم كل هذا وأكثر في هذا البرنامج التعليمي.

ولكن قبل أن نبدأ، إليك بعض المتطلبات الأساسية:

  • معرفة بأوامر Linux

  • معرفة باستخدام الطرفية

  • معرفة بـ Node.js و Express.js

جدول المحتويات

  1. ما هو Docker؟

  2. كيفية تثبيت Docker

  3. مشروع تجريبي: كيفية تحويل تطبيق Node.js إلى حاوية

  4. الختام

ما هو Docker؟

دوكر هو أداة مفتوحة المصدر تجعل تشغيل البرامج بطريقة متسقة أمرًا سهلاً، بغض النظر عن المكان الذي تكون فيه. تقوم بذلك من خلال وضع تطبيقك وكل ما يحتاجه (مثل المكتبات والإعدادات) في حاوية (سأناقش هذا الموضوع أكثر في لحظة).

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

تم إنشاء Docker من قبل سليمان هايكس في عام 2013. على مر السنين، تطورت لتغطي مجموعة واسعة من الأدوات. أصبحت أداة لا غنى عنها لتحسين عمليات نشر التطبيقات والشبكات.

قبل أن نواصل، إليك بعض المصطلحات الرئيسية التي ستواجهها أثناء متابعتنا لهذا البرنامج التعليمي:

محرك Docker

يُعتبر مُحرك دوكر، كما يوحي اسمه، القوة الدافعة لتطبيقات دوكر. يحتوي على عنصرين: عميل دوكر وخادم. العميل الخاص بدوكر، في حالتنا، هو أداة واجهة سطر الأوامر أو الطرفية الخاصة بدوكر التي سنستخدمها لإرسال الأوامر ذات الصلة بتنفيذ المشروع. أما الخادم الخاص بدوكر، المعروف شعبيًا باسم الديمون، فهو الخادم الذي يدير تشغيل الصور والحاويات المختلفة لدوكر.

صورة دوكر

تُعتبر صور دوكر قوالب جاهزة للبرامج والأنظمة التنفيذية. يقدم دوكر مجموعة واسعة من الصور تتراوح بين قوالب أنظمة التشغيل وقوالب الخوادم وقوالب البرامج، وهلم جرا. يمكنك العثور على كل هذه على سجل دوكر هاب حيث يتم تخزين هذه الصور.

يمكنك أيضًا بناء صورة محددة واستضافتها إما علنيًا على سجل دوكر أو في سجل خاص.

الحاويات دوكر

الحاويات دوكر هي مثيلات مدمجة قابلة للتنفيذ تم بناؤها على القالب المولد وهو صورة دوكر. إنها حزم محمولة خفيفة الوزن تتضمن كل ما يلزم لتشغيل قطعة من البرنامج – الكود، وقت التشغيل، والمكتبات، وأدوات النظام. تضمن الحاوية تشغيل التطبيق بشكل متسق بغض النظر عن البيئة.

فوائد استخدام دوكر

فيما يلي بعض فوائد استخدام دوكر كمطور خلفي:

  • دوكر هو أداة رائعة لإنشاء ثقافة ديفأوبس قوية لتطوير التطبيقات، حيث يوضح وظائف فرق التطوير والعمليات.

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

  • كما أنه يقلل من الأخطاء الناتجة عن سوء تكوين التبعيات أثناء التثبيت حيث يقوم بنقل التطبيق مع تبعياته اللازمة دفعة واحدة.

ستتعمق الآن في كيفية جعل تطبيق Node.JS Express عبارة عن Docker. ولكن قبل ذلك، ستحتاج إلى تثبيت Docker على جهاز الكمبيوتر الخاص بك. يمكنك تخطي هذه الخطوة إذا كان قد تم بالفعل تثبيته.

كيفية تثبيت Docker

يعد Docker أداة متعددة المنصات يمكن تثبيتها على جميع أنظمة التشغيل الشهيرة (ويندوز، نظام التشغيل macOS، وتوزيعات Linux). في هذا البرنامج التعليمي، سأشرح فقط كيفية إعداد Docker على ويندوز.

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

بالنسبة لمستخدمي ويندوز، من الضروري أن يفي جهاز الكمبيوتر الخاص بك بالمواصفات الدنيا – خلاف ذلك، لن يكون التثبيت ناجحًا. المتطلبات الدنيا هي كالتالي:

  • إصدار نظام التشغيل Windows لا يقل عن Windows 10 Home

  • جهاز كمبيوتر مع تثبيت WSL-2 أو تمكين Hypervisor.

بعد ذلك، دعنا ننتقل إلى تنزيل ملف تثبيت Docker. يمكنك تنزيل أحدث ملف تثبيت Docker من هنا. بعد ذلك، قم بتشغيل البرنامج وقبول البنود والشروط. عند الانتهاء بنجاح، قم بتشغيل التطبيق. هذا ما يجب أن تراه:

للتأكد من أنك قمت بتثبيت التطبيق بنجاح، انتقل إلى نافذة الأوامر وقم بتشغيل Docker --version. يجب أن ترى الإصدار الدقيق لأداة محرك Docker التي قمت بتثبيتها في حال نجاح التثبيت.

سننتقل الآن إلى المشروع بشكل صحيح.

مشروع تجريبي: كيفية جعل تطبيق Node.js مُحتويًا في حاوية

في هذا القسم، سنقوم بجعل خدمة خلفية بسيطة قائمة على Node.js تحتوي على تبعيات قليلة داخل حاوية. سيظهر لك هذا كيفية جعل التطبيق مُحتويًا ونقله باستخدام تقنية حاوية تطبيق Docker المعروفة باسم Dockerfile. تذكر أنه في حال كان لديك تطبيق أكثر تعقيدًا، قد يكون من الأفضل استخدام أداة Docker Compose YAML.

للبدء، سنقوم بإعداد تطبيق Node.js عينة. سأوفر جميع إعدادات الشيفرة في هذه المقالة أدناه. ولكن أولاً، دعونا نفهم ما هو dockerfile.

ما هو Dockerfile؟

ببساطة، Dockerfile هو نظام قوالب يسمح للمستخدم بإدخال أوامر يمكن أن تنتج صورة وظيفية للتطبيق عند تنفيذها. يمكن تحويل هذه الصورة بعد ذلك إلى حاوية.

وإليك بعض الأوامر المضمنة في الهيكل الأساسي لملف Dockerfile:

  • CMD: يحدد الأمر الافتراضي للتشغيل في حال عدم تحديد أمر عند بدء تشغيل الحاوية. يمكن تجاوزه عن طريق تقديم أمر عند تشغيل الحاوية (docker run ...).

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

  • FROM: هذا عادة ما يكون البيان الافتتاحي في ملف Dockerfile. هذا الأمر يستحضر صورة أساسية تشكل الأساس لبناء صورة التطبيق المعني. على سبيل المثال، في تطبيقنا، الصورة الأساسية لتطبيق Node.js هي أن يتم تثبيت محرك Node.js الأساسي.

  • WORKDIR: تعريف الدليل النشط للعمل حيث ستعيش ملفات التطبيق داخل الحاوية المحددة. سيتم إنشاء مجلد تلقائي إذا لم يكن متاحًا بالفعل.

  • COPY: يُستخدم هذا الصيغ للتأكد من نسخ الملفات اللازمة لإنشاء صورة Docker من ملف مشروع قاعدة الشفرة إلى حاوية Docker الجديدة التي تم إنشاؤها. تتميز الدلائل على هذه الملفات بعناية.

  • RUN: تُحدد هذه الصيغة النص الذي ترغب في تشغيله قبل استكمال تحويل التطبيق إلى حاوية.

  • ENV: يُستخدم هذا الصيغ لتسليط الضوء على المتغيرات البيئية والأسرار التي سيتم استدعاؤها أثناء عملية تشغيل التطبيق.

  • EXPOSE: تعيّن هذه الصيغة منفذ التصفح الذي يتم فيه استخدام التطبيق للتواصل مع الإنترنت الخارجية. على سبيل المثال، EXPOSE: 3000 يعيّن واجهة تطبيق الويب إلى localhost:3000.

مع التعمق في Docker، دعنا نستعرض بسرعة بعض الأوامر الرئيسية في Docker التي سنستخدمها خلال هذا البرنامج التعليمي:

  • Docker ps٬ تستخدم هذه الأمر لعرض جميع الحاويات الجارية على واجهة سطر الأوامر الخاصة بـ Docker.

  • Docker run٬ تستخدم هذه الأمر لتنفيذ صورة Docker لتشغيل حاوية.

  • Docker build٬ تستخدم هذه الأمر بناءً على ملف Docker لإنشاء صورة لخدمة أو تطبيق.

  • Docker rm٬ يمكن استخدام هذه الأمر لحذف صورة باستخدام تفاصيل تحديد الصورة.

كيفية تحويل التطبيق إلى حاوية

الآن يمكننا بدء تجميع تطبيقنا البسيط Node/Express داخل حاوية. لمتابعة الدرس، يمكنك الحصول على الشيفرة الأساسية من هنا.

عند اختباره محليًا، يُرجع تطبيق يحتوي على واجهة برمجة تطبيقات CRUD حيث يمكنك إنشاء، واسترداد، وتحديث، وحذف المنتجات عند تنفيذه. سنقوم بتعبئة التطبيق لسهولة نشره على السحابة باستخدام محرك Docker الخاص بنا. سيتمكن من فعل ذلك باستخدام أداة Dockerfile التي نناقشها أعلاه.

الخطوة 1: إنشاء ملف Dockerfile

في مجلد المشروع الخاص بك، قم بإنشاء ملف بالاسم Dockerfile. تأكد من أن الاسم تمامًا “Dockerfile” (بدون امتداد، وحساس لحالة الأحرف في بعض الأنظمة – لذا تأكد من أنها محسوبة).

إذا كنت تستخدم محرر الشفرة، قم ببساطة بإنشاء ملف جديد باسم Dockerfile. إذا كنت تستخدم محرر نصي أساسي، احفظ الملف باسم Dockerfile وتأكد من عدم حفظه بشكل عرضي بامتداد مثل .txt.

ثم أدخل السطر الأول:

FROM Node:18-alpine

هذا الأمر يُحضر الصورة الأساسية التي سنستخدمها لتشغيل تطبيق Express الخاص بنا والتي هي محرك Node نفسه.

قد تتساءل ما هو alpine ل. Alpine هو إصدار مضغوط بشكل أكبر وخفيف الوزن من صورة Docker. يستبعد دمج حزم إضافية غير ضرورية مباشرة لنظام التشغيل الأساسي. يُوصى باعتباره كممارسة جيدة للكود استخدام توزيعات خفيفة لتنفيذ أسرع وسهولة الاستخدام.

الخطوة 2: تعيين مجلد العمل

WORKDIR /app

يضبط دليل العمل للصورة على مجلد /app في الحاوية. يتأكد من أن جميع إجراءات الملفات تحدث هنا ويتم نسخ جميع الملفات إلى هذا الدليل.

الخطوة 3: نسخ الملفات الضرورية

COPY package.json

تقوم هذه الأمر بنسخ ملفات package.json التي تحتوي على قائمة من التبعيات والحزم التي يجب تثبيتها لتشغيل تطبيقنا.

الخطوة 4: تنفيذ النصب

RUN npm install

يضمن هذا الأمر تثبيت جميع التبعيات الضرورية لتشغيل تطبيقات Node.js الخاصة بنا على الحاوية.

الخطوة 5: نسخ ملفات الشفرة

COPY . .

يضمن هذا الأمر نسخ جميع الملفات ضمن الدليل المحلي إلى نظام الملفات في الحاوية داخل دليل العمل المنشأ.

الخطوة 6: عرض منفذ الخادم



EXPOSE 3000

يكشف هذا الأمر عن منفذ الخادم الذي نعتزم استخدامه للوصول إلى الحاوية. في هذه الحالة هو منفذ 3000.

الخطوة 7: تضمين الأمر لتشغيل الحاوية

CMD ["npm", "run", "dev"]4

يتم تنفيذ هذا الأمر في النهاية لتشغيل تطبيق Node.js. يقوم ببساطة بتشغيل الأمر npm run dev وهو ما تستخدمه في بيئة التطوير. لتشغيله في بيئة الإنتاج، يمكنك استخدام الأمر npm start بدلاً من ذلك.

بعد اكتمال هذه العملية، ها هي كيفية بنية الملف النهائية لـ Dockerfile:

FROM Node:18-alpine
WORKDIR /app

COPY package.json

RUN npm install

COPY . .

CMD ["npm", "run", "dev"]

اختبار حاوية Docker

لتقريب الأمور، سنقوم بإنشاء صورة Docker لتطبيق Node.js الخاص بنا. للقيام بذلك، قم بتنفيذ الأمر docker build -t nodeapp .. الأمر docker build يقوم ببناء الصورة، بينما الخيار -t يسمح بتحديد تفاصيل وسم الصورة.

في حالتنا، نقوم بتعيين اسم nodeapp للصورة التي سنقوم بإنشائها وستكون الصورة موجودة ضمن دليل العمل.

تهانينا! لقد قمت بنجاح ببناء أول صورة Docker لديك. لعرض جميع الصور في مستودعك المحلي، قم بتنفيذ الأمر docker images.

لإنشاء نسخة عاملة من الصورة الخاصة بك للفحص، قم بتنفيذ الأمر docker run nodeapp.

نحن نستخدم قاعدة بيانات Mongo DB كقاعدة بيانات لهذا البرنامج التعليمي، لذلك سنحتاج إلى تمرير رابط MongoDB كمتغير بيئي إلى حاوية Docker. تساعد المتغيرات البيئية في حماية بعض المتغيرات الرئيسية التي لا يجب عرضها للجمهور. يمكن تمرير متغيرات أخرى كمتغيرات بيئية تشمل مفاتيح الواجهة البرمجية ورموز التشفير.

لتمرير رابط MongoDB إلى حاوية Docker، نستخدم العلامة -e لضمان أن Docker يتعرف على القيمة المدخلة كمتغير بيئي.

docker run -e JWT_SECRETS={أدخل قيمة اختيارك} -e MONGO_URL={رابط mongo الذي اخترته} nodeapp.

لأيضا استخدام الحاوية في الخلفية، قم بإلحاق العلامة -d التي تمثل خيار الفصل. يتيح هذا الخيار للحاوية العمل في الخلفية على الرغم من خروج واجهة سطر الأوامر.

في حال عدم وجود أخطاء، يجب أن ينتج توجيه إلى localhost:5000 شيئًا مماثلاً للصورة أدناه.

الاختتام

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

أوصي أيضًا باستخدام معرفتك الجديدة لنشر مشاريع ذات حالات استخدام واقعية، بالإضافة إلى استكشاف الشبكات في تطبيقات دوكر. لجعل تطبيقك على الإنترنت، يمكنك بسهولة نشر صورة الدوكر التي أنشأتها على أي من مزودي خدمات الحوسبة السحابية الشهيرة مثل AWS، GCP، Azure، وما إلى ذلك.

لا تتردد في طرح أي أسئلة! يمكنك أيضًا التحقق من مقالاتي الأخرى هنا. حتى اللقاء القادم، استمر في البرمجة!