اذهب إلى المحتوى

أصبحت الحاويات Containers جزءًا رئيسيًا من عمليات تكنولوجيا المعلومات. تحتوي صورة الحاوية container image على تطبيق جاهز packaged application إضافةً إلى اعتمادياتها dependencies ومعلومات حول الخدمات التي تشغلها عند إقلاعها.

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

FROM registry.access.redhat.com/ubi8/ubi:8.1

RUN yum --disableplugin=subscription-manager -y module enable php:7.3 \
  && yum --disableplugin=subscription-manager -y install httpd php \
  && yum --disableplugin=subscription-manager clean all

ADD index.php /var/www/html

RUN sed -i 's/Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf \
  && sed -i 's/listen.acl_users = apache,nginx/listen.acl_users =/' /etc/php-fpm.d/www.conf \
  && mkdir /run/php-fpm \
  && chgrp -R 0 /var/log/httpd /var/run/httpd /run/php-fpm \
  && chmod -R g=u /var/log/httpd /var/run/httpd /run/php-fpm

EXPOSE 8080
USER 1001
CMD php-fpm & httpd -D FOREGROUND

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

001bus-containers.png

آلية تنفيذ تلك الخطوات

عليك أن تتعلم بعض المفاهيم عن صورة الحاوية، ومن الضروري أن تفهمها وفق الترتيب التالي:

  1. أنظمة الملفات الموحدة UnionFS.
  2. النسخ عند الكتابة
  3. أنظمة ملفات أوفرلاي Overlay
  4. اللاقطات Snapshotters

أنظمة ملفات يونيون Aufs

يكون نظام ملفات يونيون UnionFS مدمج في نواة نظام لينوكس. يسمح بدمج محتويات نظام ملفات مع محتويات نظام ملفات آخر مع إبقاء محتواهما "الفيزيائي" منفصلًا، لينتج نظام ملفات موحَّد رغم أن البيانات منظَّمة فعليًا في فروع.

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

002unionfs.png

نظام ملفات يونيون

تكون كل طبقة عبارة عن نظام ملفات يمكن مشاركته بين حاويات متعددة، فمثلًا الطبقة الأساسية base layer لخدمة httpd هي الصورة الرسمية لخادم الويب أباتشي Apache ويمكن لأي عدد من الحاويات أن تستخدمها. سيوفر ذلك كثيرًا من مساحة القرص الصلب لأننا نستخدم نفس الطبقة الأساسية في جميع الحاويات.

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

النسخ عند الكتابة

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

تعمل الحاويات والصور بآلية النسخ عند الكتابة لتحقيق ذلك، فبدلًا من نسخ الملفات تشارك استراتيجية النسخ عند الكتابة Copy-on-write نسخة البيانات ذاتها مع عدة عمليات، ولا تنسخها إلا عندما تحتاج إحدى هذه العمليات إلى تعديل أو كتابة البيانات. قبل أن تنفَّذ أية عملية كتابة ضمن حاوية قيد التشغيل، توضع نسخة من الملف الذي سيعدَّل عليه على الطبقة القابلة للكتابة في هذه الحاوية. هنا تجري عملية الكتابة ولهذا تسمى بآلية النسخ عند الكتابة.

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

أنظمة ملفات أوفرلاي Overlay

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

يطلَق على أدنى مجلد أو طبقة الصورة lowerdir، أما المجلد الأعلى يدعى upperdir. أما آخر طبقة مركبة overlayed أو موحدة unified تدعى مدمَجة merged.

003rect1036.png

نظام الملفات متعدد الطبقات

تتضمن المصطلحات الموحّدة تعاريف الطبقات التالية:

  • الطبقة الأساسية Base layer: توجد فيها ملفات نظام ملفاتك، وبالنسبة لصور الحاويات ستكون هذه الطبقة الصورة الأساسية لديك base image.
  • الطبقة المركّبة Overlay layer: تدعى غالبًا طبقة الحاوية لأن كل التغييرات التي تجري على الحاوية قيد التشغيل مثل إضافة ملفات أو حذفها أو تعديلها تكتَب على هذه الطبقة القابلة للكتابة. تخزن كافة التغييرات التي أجريت على هذه الطبقة على الطبقة التي تليها، وهي المنظور الموحَّد للطبقة الأساسية وطبقة الاختلافات.
  • طبقة الاختلافات Diff layer: تحتوي على كافة التغييرات التي أجريت في الطبقة المركبة. فإذا كتبت شيئًا موجودًا مسبقًا في الطبقة الأساسية ينسخ نظام ملفات أوفرلاي الملف إلى طبقة الاختلافات ويجري التعديلات التي أردت كتابتها، وهذا ما يدعى بالنسخ عند الكتابة.

اللاقطات

تستطيع الحاويات إجراء التغييرات وإدارتها وتعميمها بأنها جزء من نظام ملفاتها باستخدام الطبقات وبرامج المخططات graph drivers، لكن العمل على برامج المخططات معقد ويحتمَل ظهور أخطاء فيه. تختلف اللاقطات SnapShotters عن برامج المخططات لأنها لا تكون على دراية بالصور أو الحاويات.

تشابه طريقة عمل اللاقطات طريقة عمل Git في نواحٍ مثل مفهوم الأشجار وتتبع التغيرات على الأشجار لكل إيداع commit. تمثل اللقطة snapshot حالة نظام الملفات. تتضمن اللاقطات علاقات من نوع أب-ابن باستخدام مجموعة من المجلدات. تتخذ الاختلافات diff مكانها بين أب ولقطته لإنشاء طبقة.

توفر اللاقطات واجهة برمجية API لتخصيص وتحميل وإجراء لقطة لأنظمة الملفات التجريدية متعددة الطبقات.

الخاتمة

تكونت لديك الآن فكرة جيدة عن ماهية صور الحاويات، وكيف يجعل نهجها متعدد الطبقات الحاويات قابلة للنقل.

ترجمة -وبتصرف- للمقال ?What is a container image لصاحبه Nived V

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...