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

نظرة عامة على نظام التشغيل

معظم أنظمة التشغيل تحتوي على ما يُعرف بـ النواة (Kernel). النواة هي عملية برمجية تعمل على إدارة الوصول بين جميع البرامج التي تعمل على الكمبيوتر وبين جميع الأجهزة المادية المتصلة به.

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

استدعاءات النظام (System Calls)

تتفاعل البرامج مع النواة من خلال ما يُعرف بـ استدعاءات النظام، وهي تشبه الاستدعاءات البرمجية (Function Calls) لتنفيذ وظائف محددة.

توفر النواة نقاط نهاية مختلفة تقول: “إذا أردت كتابة ملف على القرص، استخدم هذه الوظيفة مع المعلومات المطلوبة”، ثم يتم كتابة المعلومات على القرص أو الذاكرة.

مثال تخيلي على مشكلة الاعتمادات (Dependencies)

افترض أن متصفح Chrome يحتاج إلى Python الإصدار 2 لتشغيل بعض الوظائف، بينما يحتاج Node.js إلى Python الإصدار 3، وأن Python v2 مثبت على القرص ولا يمكن تثبيت إصدارين متطابقين في نفس الوقت.

الحل باستخدام Name Spacing

يمكننا استخدام ميزة في نظام التشغيل تُعرف بـ Name Spacing. تسمح هذه الميزة بتقسيم الموارد المختلفة للجهاز، مثل القرص الصلب، بحيث يمكن تخصيص قسم لـ Python v2 وقسم آخر لـ Python v3.

  • Chrome يصل إلى القسم الذي يحتوي على Python v2.
  • Node.js يصل إلى القسم الذي يحتوي على Python v3.

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

التحكم في الموارد باستخدام  Cgroups

ميزة Name Spacing تضمن عزل العمليات، بينما يمكن استخدام Control Groups (Cgroups) لتحديد مقدار الموارد المسموح لكل عملية باستخدامها، مثل:

  • الذاكرة (Memory)
  • وحدة المعالجة المركزية (CPU)
  • مساحة التخزين على القرص

باستخدام هاتين الميزتين معًا، يمكننا عزل عملية واحدة والتحكم بالموارد المخصصة لها.

ما هي الحاوية (Container)؟

الحاوية هي عملية أو مجموعة عمليات لها مجموعة موارد مخصصة لها، كما هو موضح في المخططات التوضيحية (Figures 4 & 5).

ملاحظات هامة

  • ميزتا Name Spacing و Cgroups ليستا معيارية في جميع أنظمة التشغيل، بل هما خاصتان بنظام Linux، وليستا متوافرتين بشكل افتراضي في Windows أو Mac OS.
  • كيفية إنشاء الحاويات على أنظمة Windows و Mac OS سيتم مناقشتها في المقال التالي.