VM أو Docker؟

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

إذن ما هو الفرق بين حاويات Docker و VMs؟

آلة افتراضية (VM) هو كمبيوتر افتراضي به جميع الأجهزة الافتراضية وقرص ثابت افتراضي ، يتم تثبيت نظام تشغيل مستقل جديد عليه إلى جانب برامج تشغيل الأجهزة الافتراضية وإدارة الذاكرة والمكونات الأخرى. أي أننا نحصل على فكرة مجردة عن الأجهزة المادية التي تسمح لك بتشغيل العديد من أجهزة الكمبيوتر الافتراضية على جهاز كمبيوتر واحد.
يمكن أن يشغل الجهاز الظاهري المثبت مساحة القرص بطرق مختلفة:

  • مساحة ثابتة على القرص الثابت ، مما يتيح وصولاً أسرع إلى القرص الثابت الظاهري ويتجنب تجزئة الملفات ؛
  • تخصيص الذاكرة الديناميكي. عند تثبيت تطبيقات إضافية ، سيتم تخصيص الذاكرة لها ديناميكيًا حتى تصل إلى الحد الأقصى المخصص لها.

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

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

توفر الحاوية آلية أكثر كفاءة لتغليف التطبيقات من خلال توفير الواجهات الضرورية للنظام المضيف. تسمح هذه الميزة للحاويات بمشاركة جوهر النظام ، حيث تعمل كل حاوية كعملية منفصلة لنظام التشغيل الرئيسي ، الذي يحتوي على مجموعة مناطق الذاكرة الخاصة به (مساحة العنوان الافتراضية الخاصة به). نظرًا لأن مساحة العنوان الظاهرية لكل حاوية خاصة بها ، فلا يمكن تغيير البيانات التي تنتمي إلى مناطق ذاكرة مختلفة.
نظام التشغيل الأصلي لـ Docker هو Linux (يمكن أيضًا استخدام Docker على نظامي التشغيل Windows و MacOS) ، ويستخدم مزاياه الرئيسية ، والتي تسمح له بتنظيم نواة مقسمة. سيتم إطلاق حاويات Docker على Windows داخل جهاز ظاهري Linux. تشترك الحاويات في نظام تشغيل النظام المضيف ونظام التشغيل الرئيسي لها هو Linux.

الحاوية - كيف تعمل؟

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

يمكن تكوين كل حاوية من خلال ملف في مشروع docker-compose المضمن في الحل الرئيسي docker-compose.yml. هناك يمكنك تعيين معلمات مختلفة مثل اسم الحاوية والمنافذ والمعرفات وحدود الموارد والتبعيات بين الحاويات الأخرى. إذا لم تحدد اسم حاوية في الإعدادات ، فسيقوم Docker بإنشاء حاوية جديدة في كل مرة ، مع تخصيص اسم لها بشكل عشوائي.

عند بدء تشغيل حاوية من صورة ، يقوم Docker بتثبيت نظام ملفات القراءة / الكتابة فوق أي طبقات أدناه. هذا هو المكان الذي سيتم فيه تشغيل جميع العمليات التي نريد تشغيل حاوية Docker الخاصة بنا.

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

كيف ترتبط الصورة بالحاوية؟

صورة - العنصر الأساسي لكل حاوية. يتم إنشاء الصورة من Dockerfile مضافًا إلى المشروع وهي عبارة عن مجموعة من أنظمة الملفات (الطبقات) مرتبة فوق بعضها البعض ومجمعة معًا ، وهي متاحة للقراءة فقط ؛ الحد الأقصى لعدد الطبقات هو 127.

يوجد في قلب كل صورة صورة أساسية ، يتم تحديدها بواسطة الأمر FROM - نقطة الدخول عند إنشاء صورة Dockerfile. كل طبقة عبارة عن طبقة للقراءة فقط ويتم تمثيلها بأمر واحد يعدل نظام الملفات ، مكتوبًا في ملف Dockerfile.
لدمج هذه الطبقات في صورة واحدة ، يستخدم Docker نظام ملفات Union متعدد الطبقات المتقدم (AuFS مبني على قمة UnionFS) ، مما يسمح لملفات وأدلة مختلفة من طبقات ملفات مختلفة بالتداخل بشفافية ، وإنشاء نظام ملفات مرتبط.

تحتوي الطبقات على بيانات وصفية تتيح لك تخزين المعلومات ذات الصلة حول كل طبقة في وقت التشغيل ووقت الإنشاء. تحتوي كل طبقة على رابط للطبقة التالية ، إذا لم يكن للطبقة رابط ، فهذه هي الطبقة العليا في الصورة.

قد يحتوي Dockerfile على أوامر مثل:

  • من - نقطة الدخول في تشكيل الصورة ؛
  • MAINTAINER - اسم صاحب الصورة ؛
  • RUN - تنفيذ الأمر أثناء تجميع الصورة ؛
  • إضافة - نسخ ملف المضيف إلى صورة جديدة ، إذا قمت بتحديد ملف URL ، فسيقوم Docker بتنزيله إلى الدليل المحدد ؛
  • ENV - متغيرات البيئة ؛
  • CMD - يبدأ في إنشاء حاوية جديدة بناءً على الصورة ؛
  • نقطة الدخول - يتم تنفيذ الأمر عند بدء الحاوية.
  • WORKDIR هو دليل العمل لتنفيذ الأمر CMD.
  • USER - يعيّن UID للحاوية التي تم إنشاؤها من الصورة.
  • حجم - تحميل الدليل المضيف في الحاوية.
  • EXPOSE عبارة عن مجموعة من المنافذ التي يتم الاستماع إليها في الحاوية.

كيف يعمل UnionFS؟

UnionFS - نظام ملفات مكدس الخدمة (FS) لنظامي Linux و FreeBSD. يطبق FS هذا آلية النسخ عند الكتابة (Copy-On-Write ، COW). وحدة العمل في UnionFS هي طبقة ، يجب اعتبار كل طبقة كنظام ملفات كامل منفصل مع تسلسل هرمي للدليل من الجذر نفسه. ينشئ UnionFS قاعدة اتحاد لأنظمة الملفات الأخرى ويسمح لك بدمج الملفات والأدلة بشفافية من أنظمة ملفات مختلفة (تسمى الفروع) في نظام ملفات مرتبط واحد ، بشفافية للمستخدم.

سيتم عرض محتويات الدلائل التي لها نفس المسارات معًا في دليل واحد مدمج (في نفس مساحة الاسم) لنظام الملفات الناتج.

تجمع UnionFS الطبقات بناءً على المبادئ التالية:

  • تصبح إحدى الطبقات طبقة مستوى أعلى ، وتصبح الطبقات الثانية واللاحقة طبقات منخفضة المستوى ؛
  • كائنات الطبقة يمكن للمستخدم الوصول إليها "من أعلى إلى أسفل" ، أي إذا كان الكائن المطلوب موجودًا في الطبقة "العليا" ، يتم إرجاعه ، بغض النظر عن وجود كائن يحمل نفس الاسم في الطبقة "السفلية" ؛ وإلا ، يتم إرجاع كائن الطبقة "السفلي" ؛ إذا لم يكن الكائن المطلوب موجودًا أو موجودًا ، يتم إرجاع الخطأ "لا يوجد مثل هذا الملف أو الدليل" ؛
  • طبقة العمل هي الطبقة "العلوية" ، أي أن جميع إجراءات المستخدم لتغيير البيانات تنعكس فقط على طبقة المستوى الأعلى ، دون التأثير على محتويات الطبقات ذات المستوى الأدنى.

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

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

المصدر: www.habr.com

إضافة تعليق