لقد كانت الحاويات كلمة طنانة لسنوات... ولكن ما هي بالضبط؟
تعتبر الحاويات طريقة لتشغيل التطبيقات الافتراضية على جهاز الكمبيوتر الخاص بك، وهي تشبه الأجهزة الافتراضية، ولكنها تستخدم مجموعة مختلفة من التقنيات الأساسية. يمكن أن يكون فهمها معقدًا، لكنها ضرورية لتشغيل كل شيء منها ماين كرافت خوادم لجوجل. وسنوضح لك كيفية إعدادها.
سنستخدم Linux، وهو نظام تشغيل تم تصميمه مع التركيز على قابلية النقل والنمطية والاستقرار. Linux موجود في كل شيء بدءًا من الخوادم وحتى أجهزة الميكروويف وحتى وحدات تحكم ألعاب الفيديو. لا تقتصر الحاويات على التشغيل على نظام التشغيل Linux، ولكن التقنيات التي تقف وراءها هي الأكثر ملاءمة لنظام التشغيل Linux وتعمل بشكل أفضل. إذا كنت جديدًا على Linux، فنوصيك بمراجعة موقعنا دليل المبتدئين قبل الغوص فيها.
هل الحاويات آلات افتراضية؟
يمكن أن تكون الحاويات موضوعًا معقدًا، ولكن من الأفضل أن تبدأ بنقطة رئيسية واحدة: الحاوية لا آلة افتراضية. الجهاز الظاهري عبارة عن نسخة محاكاة لأجهزة معينة وبرامجها التي تعمل فيما يعرف باسم برنامج Hypervisor. إذا كنت قد استخدمت برنامجًا مثل VirtualBox أو تمرير متعدد، فقد استخدمت برنامج Hypervisor.
يعمل برنامج Hypervisor عادةً إما كنظام تشغيل خاص به (يُعرف باسم برنامج Hypervisor من النوع 1) أو ضمن حدود نظام تشغيل آخر مثل Windows أو Ubuntu (برنامج Hypervisor من النوع 2). تتمثل مسؤولية برنامج Hypervisor في تزويد نظام التشغيل الضيف بالأجهزة المحاكية التي يحتاجها للتشغيل. يمكن بعد ذلك تشغيل نظام التشغيل الكامل في الأعلى. يتضمن ذلك كل شيء بدءًا من محاكاة وحدة المعالجة المركزية وذاكرة الوصول العشوائي (RAM) وحتى ناقلات البيانات أو محركات الأقراص أو محولات الشبكة. تعتبر هذه المحاكاة مكلفة من الناحية الحسابية، لذلك عادةً ما يكون للأجهزة الافتراضية أعباء كبيرة.
إذن ما هي الحاوية؟
تشبه الحاوية الجهاز الظاهري من حيث أنها تحتوي على البرامج وتقوم بتشغيلها في بيئة معزولة على نظام مضيف. ومع ذلك، تحل الحاويات محل المحاكاة الافتراضية للأجهزة التقليدية من خلال الاعتماد على نظام التشغيل المضيف مباشرة. تشترك الحاويات في المكتبات والثنائيات الخاصة بنظام التشغيل المضيف، ولا تحتوي إلا على الموارد والتبعيات اللازمة لتشغيل التطبيق المحدد الذي تحتوي عليه. وهذا يعني أنه ليست هناك حاجة لنظام تشغيل كامل لكل حاوية، حيث تعمل جميع الحاويات على نظام تشغيل واحد يمكن للنظام مشاركة نظام التشغيل المضيف الفردي مع الاحتفاظ بالفصل الذي تحصل عليه مع Virtual آلات.
تصل الحاويات إلى نظام التشغيل المضيف من خلال محرك الحاوية، الذي يدير الحاويات قيد التشغيل ويتحكم في وصولها إلى نظام التشغيل الأساسي. قد يتضمن ذلك فرض الأمان بين الحاويات ومنح أو رفض الوصول إلى ملفات نظام التشغيل أو اتصالات الشبكة.
ما هي بعض المفاضلات لاستخدام الحاويات؟
على الرغم من أن الأجهزة الافتراضية والحاويات متشابهة، إلا أن استخدام الحاويات له عيوبه. أولاً، تعتبر الأجهزة الافتراضية أكثر أمانًا، حيث أن سطح الهجوم "للهروب" من الجهاز الظاهري أصغر بكثير ويصعب اختراقه. على سبيل المثال، قد لا تكون الحاوية مناسبة لاختبار البرامج الضارة.
الميزة الرئيسية لاستخدام الحاويات هي أنها خفيفة الوزن، وتجنب الحاجة إلى المحاكاة الافتراضية لنظام التشغيل بأكمله يعني الحد الأدنى من أوقات بدء التشغيل وتقليل الحمل على النظام. وهذا يعني أنه يمكن تشغيل العديد من الحاويات على مضيف واحد، وهو ما لن يكون ممكنًا مع الأجهزة الافتراضية.
نظرًا لأن الحاويات لا تتطلب نظام تشغيل كاملاً، فيمكن تجميعها بسهولة في صور أصغر وتوزيعها. في حين أن صورة الجهاز الظاهري الكاملة قد يصل حجمها بسهولة إلى عشرات الجيجابايت، إلا أن الحاويات يمكن أن تأتي في صور صغيرة يصل حجمها إلى 15 كيلو بايت. وهذا يجعل من السهل للغاية توزيع واستخدام الحاويات. سنوضح ذلك من خلال تشغيل بعض الأمثلة البسيطة للحاويات في Docker.
تثبيت عامل الميناء
هذا كثير من النظرية، لذلك دعونا نصبح عمليين. لتوضيح كيفية إعداد الحاوية، سنقوم بتثبيت Docker في Ubuntu 23.10 واستخدامه لتشغيل حاوية Hello World البسيطة. يتم اختبار خطواتنا على جهاز افتراضي، ولكن يمكنك أيضًا التشغيل المزدوج من جهاز الكمبيوتر الشخصي الذي يعمل بنظام Windows أو استخدام ملف كمبيوتر محمول رائع لنظام التشغيل Linux.
لقد أصبح Docker بسرعة أداة النقل بالحاويات الفعلية. على الرغم من وجود أدوات أخرى، إلا أن Docker تم اعتماده على نطاق واسع وهو مثالي للجميع باستثناء التطبيقات الأكثر تطلبًا. هناك وثائق حول الطرق المختلفة لتثبيت Docker، لكننا سنستخدم البرنامج النصي للتثبيت المريح. سيقوم هذا الأمر بتنزيل البرنامج النصي من get.docker.com إلى جهازك المحلي:
$ curl -fsSL https://get.docker.com -o get-docker.sh
يمكنك بعد ذلك تشغيل هذا البرنامج النصي لتثبيت Docker. يمكنك التحقق من تثبيت Docker بشكل صحيح عن طريق التحقق من الإصدار باستخدام:
$ sudo sh ./get-docker.sh
متبوعًا بالتحقق من الإصدار باستخدام:
$ sudo docker version
يمكنك أيضًا التحقق من أن خدمة الإرساء تعمل في الخلفية باستخدام:
$ sudo systemctl status docker
يجب أن يشير إلى "نشط (قيد التشغيل)" بالنص الأخضر، كما هو موضح في لقطة الشاشة أدناه. يجب أيضًا طباعة إصدار محرك Docker بدون أخطاء.
تشغيل مثال بسيط
الآن بعد تثبيت Docker، يمكنك استخدامه لتنزيل صورة الحاوية. تشبه صور الحاوية إلى حد كبير ملفات ISO للأجهزة الافتراضية، إلا أنها عادةً ما تكون أصغر حجمًا وأسهل في الإنشاء. قم بتنزيل صورة حاوية hello-world البسيطة باستخدام الأمر التالي:
$ sudo docker pull hello-world
بمجرد تنزيل هذه الصورة، يمكنك التحقق من خلال سرد الصور التي تم تنزيلها على نظامك باستخدام ما يلي:
$ sudo docker images
يجب أن تشاهد الآن تنزيل hello-world. لاحظ الحجم الصغير جدًا (13 كيلو بايت على جهاز الاختبار الخاص بنا)، بالإضافة إلى علامته. علامة الصورة هي في الواقع نسختها. افتراضيًا، سيقوم Docker بتنزيل أحدث إصدار من الصورة. قم بتشغيل حاوية بناءً على هذه الصورة باستخدام:
$ sudo docker run hello-world: latest
سيؤدي هذا إلى إخراج أسلوب hello-world الخاص بـ Dockers، والذي يتم تشغيله من برنامج C صغير جدًا (والذي يمكنك التحقق منه على جيثب).
تهانينا؛ لقد قمت بتشغيل الحاوية الأولى الخاصة بك! في هذه الحالة، يكون البرنامج قد أخرج نتيجته وانتهى من تنفيذه. الحاوية الآن ميتة ولم تعد تعمل.
كيفية الحفاظ على الحاويات على قيد الحياة
بعد تشغيل حاوية أساسية، يمكننا الآن إنشاء مثال أكثر تعقيدًا لا يتم الخروج منه فورًا بمجرد إكمال المهمة. غالبًا ما يتم إنشاء الحاويات حول عملية واحدة، مما قد يؤدي إلى إنتاج المزيد من العمليات. بمجرد خروج هذه العملية الأساسية، ستخرج معها الحاوية بأكملها. قد يبدو هذا بمثابة تقييد، لكنه في الواقع مشابه جدًا لكيفية عمل أنظمة init في وظيفة Linux kernel الكاملة.
لتشغيل مثال مستمر، يمكننا سحب صورة لـ Nginx، وهو خادم ويب يستخدم لاستضافة نسبة كبيرة من مواقع الويب في العالم. لقد اخترنا Nginx لهذا المثال لأنه بسيط، ولا يتطلب أي تكوين متقدم، وخفيف الوزن. قم بتنزيل أحدث صورة من Nginx باستخدام الأمر التالي:
$ sudo docker pull nginx
لقد أضفنا -ص ضع علامة هنا لتكوين إعادة توجيه المنفذ من الحاوية إلى نظام التشغيل المضيف. يُستخدم المنفذ 80 لحركة مرور HTTP (أي الويب) غير المشفرة. سيسمح لك هذا بالوصول إلى الحاوية من جهازك المضيف:
$ sudo docker run -p 80:80 nginx
سيتم تشغيل هذا الأمر في المحطة الطرفية الخاصة بك في الوضع المرفق مما يعني أن الحاوية متصلة فعليًا بالمحطة الطرفية الخاصة بك، لذلك ستتم طباعة جميع السجلات من الحاوية هناك. بمجرد بدء تشغيل الحاوية، افتحها http://localhost في متصفح الويب الخاص بك. سترى شاشة ترحيب لـ Nginx مشابهة لما يلي:
حاوية Nginx تعمل الآن داخل محرك الحاوية الخاص بك. بينما يعمل Nginx في الوضع المرفق، فإنه سيستمر في العمل طالما كان مفتوحًا. يمكنك الخروج من حاوية Nginx بالضغط على السيطرة + ج في المحطة الخاصة بك.
كيفية تشغيل الحاويات في الخلفية
لتشغيل Nginx في الخلفية، سنضيف علامة أخرى، -د، للوضع المنفصل. سيؤدي هذا إلى فصل الحاوية عن جهازك، مما يعني أنها موجودة في الخلفية. على سبيل المثال:
$ sudo docker run -d -p 80:80 nginx
يمكنك سرد الحاويات قيد التشغيل على النظام. لاحظ كيف تعمل حاوية Nginx الآن في الخلفية وتم تعيين معرف لها.
$ sudo docker ps
يمكن قتل حاوية الخلفية قيد التشغيل باستخدام معرفها. قد تلاحظ أيضًا أنه تم إعطاء اسم للحاوية. عندما لا يتم تحديد واحد، سيعطي Docker لكل حاوية اسمًا عشوائيًا وفريدًا.
$ sudo docker kill
ومع ذلك، يمكنك اختبار ذلك باستخدام بعض الصور الأكثر إثارة للاهتمام. هناك الكثير متاح في مركز عامل الميناء، والذي يعمل بمثابة مستودع مركزي لصور الحاويات العامة.
الغوص أعمق مع الحاويات
لقد كانت هذه مقدمة موجزة للحاويات. يمكن أن تكون الحاويات معقدة بشكل لا حدود له، ولكنها تمثل لبنة أساسية للأنظمة عالية التوزيع التي تدير معظم شبكة الإنترنت الحديثة لدينا. ومع ذلك، فإن هذه القوة لا تقلل من استخدامها على نطاق أصغر. يمكن أن يكون الإلمام بأساسيات الحاويات وDocker بمثابة البوابة لتشغيل خدمات محلية مفيدة مثل الخادم ماين كرافت أو Plex على جهاز كمبيوتر قديم.