كيف تفهم أنك بحاجة إلى عامل ميناء ، وليس جهاز VM؟ دعنا نحاول فهم الاختلافات الرئيسية بين عزل الأجهزة الظاهرية (VMs) وحاويات Docker ، سواء كانت قابلة للتبديل وكيف يمكننا استخدامها.
فما هو الفرق بين حاويات دوكر و VM؟
الجهاز الظاهري (VM) هو كمبيوتر افتراضي به جميع الأجهزة الظاهرية وقرص صلب افتراضي ، حيث يتم تثبيت نظام تشغيل مستقل جديد (OS OS) مع برامج تشغيل الأجهزة الافتراضية ، وإدارة الذاكرة والمكونات الأخرى. أي أننا نحصل على مجموعة من المعدات المادية التي تسمح لك بتشغيل العديد من أجهزة الكمبيوتر الافتراضية على جهاز كمبيوتر واحد. يتم عرض المعدات الافتراضية في خصائص النظام ، والتطبيقات المثبتة تتفاعل معها كما لو كانت حقيقية. في الوقت نفسه ، فإن الجهاز الظاهري نفسه معزول تمامًا عن الكمبيوتر الحقيقي ، على الرغم من أنه يمكنه الوصول إلى القرص والأجهزة الطرفية الخاصة به.
يمكن أن يشغل VM المثبت مساحة على قرص كمبيوتر بطرق مختلفة:
- مساحة ثابتة على القرص الصلب ، والتي تتيح الوصول بشكل أسرع إلى القرص الصلب الظاهري وتجنب تجزئة الملفات ؛
- تخصيص الذاكرة الديناميكية. عند تثبيت تطبيقات إضافية ، سيتم تخصيص الذاكرة ديناميكيًا لها حتى تصل إلى الحد الأقصى للمبلغ المخصص لها.
عند استخدام VM ، هناك تكاليف إضافية لمحاكاة المعدات الافتراضية وتشغيل نظام التشغيل الضيف ، ودعم وإدارة البيئة اللازمة لتشغيل التطبيق الخاص بك. أيضًا ، عندما تقوم بنشر عدد كبير من الأجهزة الافتراضية على الخادم ، فإن مساحة المساحة التي تشغلها على القرص الصلب سوف تنمو فقط ، لأن كل VM يتطلب مساحة ، على الأقل لنظام التشغيل الضيف وبرامج التشغيل للأجهزة الافتراضية.
Docker هو برنامج لإنشاء التطبيقات المستندة إلى الحاوية. حاويات والأجهزة الافتراضية حل مشكلة واحدة ، لكنها تفعل ذلك بشكل مختلف. حاويات تأخذ مساحة أقل ل إعادة استخدام موارد النظام المضيف المشتركة أكثر من VM على عكس VM ، يوفر المحاكاة الافتراضية على مستوى نظام التشغيل ، وليس الأجهزة. يوفر هذا النهج مساحة أقل على القرص الثابت ، ونشر أسرع ، وتحجيم أسهل.
توفر حاوية الإرساء آلية تغليف تطبيق أكثر كفاءة ، وتوفر واجهات النظام المضيف الضرورية. تسمح هذه الميزة للحاويات بتقسيم قلب النظام ، حيث تعمل كل حاوية كعملية منفصلة لنظام التشغيل الرئيسي ، والتي تحتوي على مساحة عنوان افتراضية خاصة بها ، لذلك لا يمكن تغيير البيانات التي تنتمي إلى مناطق مختلفة من الذاكرة.
Docker هي التقنية الأكثر شيوعًا لاستخدام الحاويات في التطبيق. لقد أصبح المعيار في هذا المجال ، بناءً على مجموعات cgroups ومساحة الاسم التي توفرها نواة Linux. نظام التشغيل الأصلي لـ Docker هو نظام Linux ، لذلك سيتم إطلاق حاويات Docker على نظام Windows داخل جهاز Linux افتراضي.
ما هو حاوية مصنوعة من؟
الصورة هي العنصر الرئيسي الذي يتم إنشاء الحاويات منه. يتم إنشاء الصورة من Dockerfile المضافة إلى المشروع وهي عبارة عن مجموعة من أنظمة الملفات (الطبقات) ذات طبقات على بعضها البعض ويتم تجميعها معًا ، للقراءة فقط ؛ الحد الأقصى لعدد الطبقات هو 127.
توجد في قلب كل صورة صورة أساسية ، تتم الإشارة إليها بواسطة أمر FROM - نقطة الدخول لتكوين صورة Dockerfile. كل طبقة هي طبقة للقراءة وتمثلها أمر واحد يعدل نظام الملفات المكتوب إلى Dockerfile. يتيح هذا النهج تداخل الملفات والدلائل المختلفة من طبقات الملفات المختلفة بشفافية ، مما يؤدي إلى إنشاء نظام ملفات متكامل. تحتوي الطبقات على بيانات أولية ، مما يسمح لك بحفظ المعلومات ذات الصلة حول كل طبقة في وقت التشغيل والبناء. تحتوي كل طبقة على رابط للطبقة التالية ، إذا لم يكن للطبقة رابط ، فهذه هي الطبقة العليا في الصورة.
بدءًا من الإصدار Docker EE 06.17.02-ee5 ، ويستخدم Docker Engine - Community ، Overlay2 أو Overlay ، وتستخدم الإصدارات السابقة AuFS (نظام الملفات المتقدم متعدد الطبقات Union).
الحاوية - كيف يعمل؟
الحاوية عبارة عن تجريد على مستوى التطبيق يجمع بين الكود والتبعيات. يتم إنشاء الحاويات دائمًا من الصور ، مع إضافة طبقة علوية قابلة للكتابة وتهيئة المعلمات المختلفة. نظرًا لأن الحاوية لها طبقة تسجيل خاصة بها ويتم حفظ جميع التغييرات في هذه الطبقة ، يمكن لعدة حاويات مشاركة الوصول إلى نفس الصورة. يمكن تكوين كل حاوية من خلال ملف في مشروع docker-compose.yml ، مع تحديد معلمات متنوعة ، مثل اسم الحاوية والموانئ والمعرفات والتبعيات بين الحاويات الأخرى. إذا لم تحدد اسم حاوية في الإعدادات ، فسيقوم Docker بإنشاء حاوية جديدة في كل مرة ، مع تخصيص اسم لها بشكل عشوائي.
عندما تبدأ الحاوية من الصورة ، يحمّل Docker نظام الملفات للقراءة والكتابة فوق أي طبقات أدناه. هذا هو المكان الذي سيتم تنفيذ جميع العمليات. عند بدء تشغيل الحاوية لأول مرة ، تكون طبقة القراءة والكتابة الأولية فارغة. عندما تحدث التغييرات ، فإنها تنطبق على هذه الطبقة ؛ على سبيل المثال ، إذا كنت ترغب في تعديل ملف ، فسيتم نسخ هذا الملف من الطبقة السفلية للقراءة فقط إلى طبقة القراءة والكتابة. ستظل هناك نسخة للقراءة فقط من الملف ، لكن الآن مخفية تحت النسخة.
كيف يعمل نظام ملفات متتالي متتالي؟
يقوم نظام الملفات المتتالي (FS) بتطبيق آلية نسخ نسخ (COW). وحدة العمل هي طبقة ، كل طبقة يجب اعتبارها نظام ملفات كامل منفصل مع تسلسل هرمي من الدلائل من الجذر نفسه. يستخدم هذا النهج التحميل الموحد لأنظمة الملفات ، مما يسمح للمستخدم بشفافية ، بدمج الملفات والدلائل الخاصة بأنظمة الملفات المختلفة (تسمى الفروع) في نظام ملفات واحد متصل. سيتم عرض محتويات الدلائل التي لها نفس المسارات معًا في دليل واحد مدمج (في مساحة اسم واحدة) لنظام الملفات الناتج.
يتم دمج الطبقات وفقًا للمبادئ التالية:
- تصبح إحدى الطبقات طبقة من المستوى العلوي ، وتصبح الطبقات الثانية واللاحقة طبقات من المستوى السفلي ؛
- يمكن الوصول إلى كائنات الطبقات للمستخدم "من الأعلى إلى الأسفل" ، أي إذا كان الكائن المطلوب في الطبقة "العليا" ، فيتم إرجاعه ، بغض النظر عن وجود كائن يحمل هذا الاسم في الطبقة "السفلية" ؛ وإلا ، يتم إرجاع كائن الطبقة "السفلى" ؛ إذا لم يكن الكائن المطلوب موجودًا هناك أو هناك ، فسيتم إرجاع الخطأ "لا يوجد مثل هذا الملف أو الدليل" ؛
- طبقة العمل "العلوي" ، أي أن جميع إجراءات المستخدم لتغيير البيانات تنعكس فقط على طبقة المستوى العلوي ، دون التأثير على محتويات طبقات المستوى الأدنى.
استنتاج
إذا كنت بحاجة إلى إنشاء نظام افتراضي بموارد مخصصة مضمونة وأجهزة افتراضية ، فعليك اختيار جهاز VM. ما يعطي استخدام VM:
- القدرة على تثبيت العديد من أنظمة التشغيل المختلفة على جهاز كمبيوتر واحد ؛
- توزيع موارد النظام بين الأجهزة الافتراضية ؛
- لا حاجة لإعادة التشغيل للتبديل بين أنظمة التشغيل ؛
- القدرة على التقاط "لقطة" للحالة الحالية للنظام ومحتويات الأقراص لإعادة النظام إلى حالته الأصلية ؛
- عزل الأخطاء وانتهاكات نظام الأمن على مستوى الأجهزة ؛
- القدرة على محاكاة شبكة الكمبيوتر على جهاز كمبيوتر واحد.
إذا كنت ترغب في عزل التطبيقات قيد التشغيل كعمليات منفصلة ، فإن Docker مناسب لك. ما يعطي استخدام Docker:
- يوفر الافتراضية على مستوى نظام التشغيل ؛
- تشارك الحاويات جوهر النظام ، حيث تعمل كعملية منفصلة لنظام التشغيل الرئيسي ؛
- يمكن الحد من استهلاك موارد النظام ، مثل استهلاك الذاكرة وتحميل وحدة المعالجة المركزية ، بشكل منفصل لكل حاوية باستخدام cgroups ؛
- يتم إنشاء FS للحاويات باستخدام آلية COW ، والتي تسمح بتسريع نشر التطبيق ، ويقلل من استهلاك الذاكرة ويوفر مساحة القرص ؛
- يمكن استخدام نظام الملفات المتغير للحاوية الواحدة كأساس لتشكيل صور أساسية جديدة للحاويات الأخرى.