العودة للمدوّنة

ما هو Docker؟ شرح مفهوم Containerization ببساطة

تعرّف على Docker بطريقة بسيطة، وافهم كيف تساعد Containers وDocker Images وDockerfile في حل مشاكل الاعتماديات (Dependencies) ونشر التطبيقات بسهولة.

منشور أيضًا على
What is Docker

ما هو Docker؟ وما هي تقنية Containerization؟

هل سبق وأن سمعت عن Docker؟ 🤔

بالتأكيد مرّ عليك هذا الاسم من قبل، أليس كذلك؟

لكن ما هو Docker فعلًا؟ وما المشكلة التي جاء ليحلها؟

يُعد Docker واحدًا من أهم الأدوات في عالم تطوير البرمجيات (Software Development)، ولتفهم فكرته بسهولة، دعنا أولًا نتحدث عن المشكلة التي يحلها، ثم ننتقل إلى الحل الذي يقدمه. 😄


لنفترض السيناريو التالي

تخيل أنك تعمل على مشروع على جهازك الشخصي.

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

بعد فترة، قررت تغيير نظام التشغيل (Operating System) على جهازك. 💻

ومن الطبيعي أن تبدأ بتثبيت جميع البرامج التي يحتاجها المشروع مرة أخرى، مثل PHP وبقية الأدوات، حتى تتمكن من متابعة العمل.

لكن أثناء إعادة التثبيت، قمت بتثبيت إصدار أحدث من PHP دون أن تنتبه.

وفور تشغيل المشروع...

تبدأ الأخطاء في الظهور واحدة تلو الأخرى!

ليس لأن الكود يحتوي على مشكلة، وإنما لأن إصدار PHP الجديد غير متوافق مع المشروع.

فتجد نفسك مضطرًا إلى تعديل الكود أو تحديث المشروع بالكامل حتى يعمل مرة أخرى. 🫠


دعني أعطيك مثالًا آخر

تخيل أنك انضممت حديثًا إلى فريق تطوير داخل إحدى الشركات.

المشروع موجود بالفعل، والفريق يعمل عليه منذ فترة.

أول شيء ستفعله هو سحب المشروع (Clone) من Git ثم محاولة تشغيله على جهازك.

لكن للأسف...

المشروع لا يعمل!

والسبب أنه يعتمد على إصدارات محددة من البرامج والأدوات غير الموجودة على جهازك.

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

وهنا تعود لنفس المشكلة مرة أخرى. 😁


والمشكلة لا تتوقف عند هذا الحد.

فقد يستغرق إصلاح هذه المشكلات ساعات طويلة.

ولو قررت تغيير جهازك أو نظام التشغيل مرة أخرى...

ستبدأ من الصفر.

وإذا انضم مطور جديد إلى الفريق...

سيواجه نفس المشكلة أيضًا.

وهكذا تتكرر نفس المعاناة مع كل مطور جديد وكل جهاز جديد. 🤕


ماذا لو كنت تعمل على أكثر من مشروع؟

تخيل أن لديك مشروعًا يحتاج إلى PHP 7.4،

ومشروعًا آخر يحتاج إلى PHP 8.3.

كل مشروع يعتمد على مجموعة مختلفة من البرامج والإعدادات.

فكيف يمكن تشغيل المشروعين على نفس الجهاز دون حدوث تعارض بينهما؟

هنا يأتي دور Docker...

الفارس الذي ينقذنا من كل هذه المشكلات. 😇

كيف يعمل Docker؟

إذا دققت النظر في شعار Docker، فستلاحظ أنه يعبر عن فكرة الأداة بالكامل.

ستجد سفينة تحمل مجموعة من الصناديق (Containers)، بينما يقوم العمال بتحميلها وتفريغها في أي مكان تصل إليه.

وهذه ليست مجرد رسمة جميلة، بل هي تمثل فكرة Docker الأساسية.

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


Dockerfile... نقطة البداية

أول خطوة هي إنشاء ملف يسمى Dockerfile.

يمكنك اعتباره بمثابة "الوصفة" الخاصة بمشروعك.

داخل هذا الملف تكتب جميع التعليمات التي يحتاجها Docker لبناء بيئة التشغيل، مثل:

  • إصدار نظام التشغيل المطلوب.
  • إصدار PHP أو Node.js أو Python.
  • المكتبات (Libraries).
  • الحزم (Packages).
  • الأوامر التي يجب تنفيذها عند تشغيل المشروع.

أي أن Dockerfile يصف كل ما يحتاجه المشروع ليعمل بشكل صحيح.


ثم تأتي Docker Image

بعد الانتهاء من كتابة الـ Dockerfile، نقوم بتنفيذ أمر بسيط لبنائه.

فينتج لدينا ما يسمى Docker Image.

يمكنك تخيل الـ Image على أنها نسخة جاهزة من المشروع تحتوي على:

  • نظام التشغيل.
  • البرامج.
  • المكتبات.
  • الاعتماديات (Dependencies).
  • إعدادات المشروع.

أي أنها تمثل "قالبًا" جاهزًا يمكن استخدامه في أي وقت.


وأخيرًا... الـ Container

الآن يأتي الجزء الأهم.

عندما ترغب في تشغيل مشروعك، فإن Docker لا يشغل الـ Image نفسها.

بل يقوم بإنشاء Container منها.

ويمكنك اعتبار الـ Container نسخة حية (Running Instance) من الـ Image.

أي أن العلاقة بينهما تشبه العلاقة بين:

الـ Class والـ Object في البرمجة كائنية التوجه (OOP).

فالـ Image هي القالب.

أما الـ Container فهو النسخة التي تعمل بالفعل.

وبمجرد تشغيل الـ Container، سيجد المشروع كل ما يحتاجه بداخله، بغض النظر عن:

  • إصدار PHP الموجود على جهازك.
  • البرامج المثبتة لديك.
  • نظام التشغيل الذي تستخدمه.

لأن كل شيء أصبح معزولًا داخل الـ Container نفسه.


لماذا تعتبر هذه الفكرة قوية؟

لنفترض أنك أرسلت مشروعك إلى أحد زملائك.

كل ما يحتاجه هو:

  • تثبيت Docker.
  • تحميل الـ Image أو تشغيل المشروع.
  • إنشاء Container.

وخلال دقائق سيعمل المشروع بنفس الطريقة تمامًا التي كان يعمل بها على جهازك.

بدون تثبيت PHP.

وبدون تثبيت MySQL.

وبدون البحث عن الإصدارات الصحيحة.

وبدون إضاعة ساعات في إعداد بيئة العمل.

ولهذا السبب أصبح Docker أحد أهم الأدوات المستخدمة في عالم DevOps وتطوير البرمجيات الحديثة.


الخاتمة

في النهاية...

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

فبدلًا من أن يعتمد المشروع على البرامج الموجودة على جهازك، يقوم Docker بتغليف التطبيق مع جميع اعتمادياته (Dependencies) داخل Container مستقل.

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

وهذا هو السبب الذي جعل Docker أداة أساسية في معظم مشاريع البرمجيات الحديثة، سواء أثناء التطوير (Development)، أو الاختبار (Testing)، أو حتى النشر (Deployment).


أتمنى أن يكون هذا الشرح قد ساعدك على فهم الفكرة بطريقة أبسط.

إذا أعجبك المقال، فلا تنس مشاركته مع أصدقائك المهتمين بمجال البرمجة، فقد يساعدهم على فهم Docker بسهولة أكبر. ❤️

ولمن يرغب في التعمق أكثر، سأترك بعض المصادر المفيدة.

المصادر


شكرًا لقراءتك! ❤️

يمكنك متابعتي عبر:
LinkedIn
Facebook
All My Social Media

My Portfolio:
https://www.omarwaleed.tech