كيف يعمل Docker — البناء والشحن والتشغيل
كيف يعمل Docker معروضاً على لوحة تفاعلية: من Dockerfile إلى الصورة، ومن السجلّ إلى الحاوية، وnamespaces وcgroups التي تعزل العملية عن غيرها.
يحزم Docker التطبيق وكل ما يحتاجه داخل صورة، ثم يشغّله كحاوية — عملية معزولة تتصرف بالطريقة نفسها على أي جهاز يوجد فيه محرّك Docker.
كيف يعمل Docker — البناء والشحن والتشغيل
لوحة FlowJam التفاعلية لهذا الشرح — كل مسار وصف وسهم أعلاه جزء من مخطط QueryChart حقيقي يمكنك فتحه وتعديله.
كيف تقرأ هذا الشرح المرئي
- اقرأ الأعمدة الثلاثة من اليسار إلى اليمين: البناء، ثم الشحن، ثم التشغيل.
- المجموعة السفلية، «نظام التشغيل المضيف»، هي الأساس: فالحاوية في نهاية المسار تعمل فوقه وتشارك نواته.
- الصورة هي الناتج الذي ينقله كل شيء آخر — من محرّك Docker إلى السجلّ ثم عودةً إلى بيئة التشغيل.
بناء الصورة
«المطوّر يكتب Dockerfile يصف التطبيق» وصفة لا نتيجة: صورة أساسية، وتبعيات تُثبَّت، وملفات تُنسخ، وأمر يُشغَّل. و«docker build يحزم التطبيق وتبعياته» ينفّذ الوصفة، و«عملية البناء تنتج صورة — لقطة للقراءة فقط» هو المخرج — ناتج غير قابل للتغيير في نظام ملفات مقسوم إلى طبقات. والقابلية للتكرار هي المقصد: فملف Dockerfile نفسه ينتج الصورة نفسها على أي جهاز.
شحن الناتج
«الصورة تُدفع إلى سجلّ أو تُسحب منه» هو فعل «الشحن». والسجلّ هو شبكة توزيع الصور — سجلّ خاص لفريقك، وآخر عام للصور الأساسية. ولا تتغيّر الصورة أثناء الشحن، وهذا ما يجعل النشر حتمياً: فما اختبرته هو بعينه ما تشغّله.
تشغيل الحاوية
«docker run يبدأ حاوية من الصورة» يعبر من محرّك Docker إلى مجموعة «بيئة تشغيل الحاويات». و«الحاوية معزولة بواسطة namespaces وcgroups» هي آلية العزل — إذ تمنح namespaces العملية رؤيتها الخاصة لنظام الملفات والشبكة وجدول العمليات، وتحدّ cgroups من CPU والذاكرة المتاحين لها. ويقع «الحاوية تشارك نواة المضيف لكن لها نظام ملفات خاص بها» في مجموعة «نظام التشغيل المضيف» ليُظهر التباين مع الآلة الافتراضية صراحةً، و«عملية التطبيق تعمل بالطريقة نفسها في كل مكان» هي العائد الذي يبرّر هذه المنظومة كلها.
العلاقات الرئيسية والخلاصات
- الصورة لقطة للقراءة فقط؛ والحاوية نسخة منها قيد التشغيل.
- تشارك الحاويات نواة المضيف وتصطنع العزل بواسطة namespaces — ولهذا تبدأ في ثوانٍ حيث تحتاج الآلات الافتراضية إلى دقائق.
- تحدّ cgroups مما يمكن للحاوية استهلاكه، فلا يستطيع جار صاخب واحد أن يجوّع المضيف.
- عدم قابلية الصورة للتغيير هو ما يجعل «التشغيل بالطريقة نفسها في كل مكان» صحيحاً.
- يوفّر Docker التحزيم وبيئة التشغيل؛ أما منسّقات مثل Kubernetes فتدير حاويات كثيرة عبر مضيفين متعددين.
متى تستخدم هذا الشرح المرئي
- شرح سبب نجاح Docker لمطوّر، وبيان الفرق بين الحاوية والآلة الافتراضية.
- تعريف فريق بنموذج البناء والشحن والتشغيل قبل أن يكتب أول ملف Dockerfile.
- تأسيس نقاش حول انحراف البيئات — ولماذا تتوقف عبارة «تعمل على جهازي» عن الانطباق.
كيف تعمل
علّق على خطوات Dockerfile لديك
على مربع Dockerfile، اسرد الطبقات الحقيقية لعملية البناء لديك — الصورة الأساسية، وتثبيت التبعيات، ونسخ الشيفرة، وأمر التشغيل — حتى تصبح الوصفة ملموسة.
سمِّ سجلّاتك
أعد تسمية خطوة السجلّ بسجلّاتك الفعلية (سجلّ ECR خاص، وصورة عامة)، ودوّن أي الصور تدفعها وأيها تسحبها.
أضف مربعي الشبكة والوحدة التخزينية
وسّع عمود التشغيل بكيفية تخاطب حاوياتك — عبر شبكة جسرية — وبمكان بقاء الحالة — وحدة تخزينية — فهذان هما الجزآن اللذان يغفلهما المبتدئون غالباً.
اربطه بالتنسيق
إن كنت تستخدم Kubernetes، أضف ملاحظة تشير من الحاوية العاملة إلى الشرح المرئي الخاص بـKubernetes، وإلى ما يغيّره kubelet في موضع تشغيل الحاوية.
الأسئلة الشائعة
ما الفرق بين الحاوية والآلة الافتراضية؟
الآلة الافتراضية تُحاكي العتاد: فهي تحمل نظام تشغيل كاملاً ويتوسّط برنامج المراقبة (hypervisor) كل شيء، وهذا يجعلها ثقيلة وبطيئة الإقلاع. أما الحاوية فتُحاكي نظام التشغيل: تشارك نواة المضيف وتستخدم namespaces للعزل وcgroups لتحديد الموارد. ولهذا تبدأ الحاويات في ثوانٍ وتكون أخفّ بكثير — والمقابل أن كل الحاويات على مضيف واحد تشارك نواة ذلك المضيف.
ما الفرق بين الصورة والحاوية؟
الصورة هي الناتج الساكن — لقطة للقراءة فقط للتطبيق وتبعياته، مبنية من ملف Dockerfile. أما الحاوية فهي تلك الصورة وهي تعمل: عملية قيد التشغيل فوقها طبقة قابلة للكتابة. تبني الصورة مرة واحدة، ويمكنك أن تبدأ منها آلاف الحاويات، كل واحدة معزولة عن الأخريات.
كيف يعزل Docker الحاويات؟
بخاصيتين في نواة Linux. تمنح namespaces كل حاوية رؤيتها الخاصة للنظام — نظام ملفاتها، وحزمة الشبكة، وجدول العمليات، ومعرّفات المستخدمين — فتبدو وكأنها جهاز مستقل. أما cgroups (مجموعات التحكم) فتحدّ الموارد وتقيسها، إذ تضع سقفاً لما تستهلكه الحاوية من CPU وذاكرة وعمليات إدخال وإخراج، فلا تستطيع حاوية واحدة أن تُسقط جيرانها.
لماذا يجعل Docker التطبيقات قابلة للنقل؟
لأن الصورة تجمع التطبيق مع بيئة تشغيله ومكتباته وإعداداته — كل شيء عدا النواة. وحيثما وُجد محرّك Docker تعمل الصورة بالطريقة نفسها، فتتقلّص الفجوة بين حاسوب المطوّر المحمول ومنفّذ CI وخادم الإنتاج إلى الإعدادات التي تُترك خارج الصورة عن قصد.
عدّل هذا الشرح المرئي في QueryChart (FlowJam)
افتح لوحة Docker هذه نفسها كمخطط خاص بك، وأعد تسمية المجموعات لتطابق منظومتك التقنية، وعلّق على خط بناء صورك.