ما الفرق بين Docker والآلة الافتراضية؟

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

اقرأ عن Docker »

المحاكاة الافتراضية: Docker مقابل الآلة الافتراضية

تسمح المحاكاة الافتراضية بإنشاء مثيل افتراضي للموارد الواقعية، مثل الخوادم والشبكات. في مجال الحوسبة، تسمح المحاكاة الافتراضية للعديد من المثيلات المعزولة للمكون الافتراضي بالعمل على المكون الواقعي.

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

الأجهزة الافتراضية

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

جعلت الآلات الافتراضية التقنيات السحابية ممكنة، وفي Amazon Web Services (AWS)، يُطلق على الآلة الافتراضية اسم المثيل. تمتلك AWS هذه المثيلات السحابية وتحتفظ بها ويمكن استخدامها في العديد من واجهات برمجة التطبيقات.

اقرأ عن مثيلات السحابة »

Docker

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

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

ما هي أوجه التشابه الأخرى بين Docker والآلات الافتراضية؟

نظرًا لأن تقنيات المحاكاة الافتراضية، فإن Docker والآلات الافتراضية (VM) لديها بعض أوجه التشابه.

الصور

يتم إنشاء كل من حاويات Docker والآلات الافتراضية من الصور. تعمل كل صورة كمُخطط للبيئة الافتراضية. تسمح الصور للمستخدمين بإنشاء بيئات متسقة ومشاركتها بدون الحاجة إلى تكوينها في كل مرة.

تحدد الصورة جميع موارد النظام الضرورية لتشغيل التطبيقات. على سبيل المثال، تنشئ صورة آلة افتراضية نسخًا احتياطية لنظام التشغيل، بينما تنشئ صورة حاوية Docker نسخًا احتياطية لبيئة التطبيق.

التقسيم إلى إصدارات

يمكن إصدار كل من صور حاوية Docker وصور الآلة الافتراضية لتتبع تغييرات تكوين البيئة بمرور الوقت.

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

وبالمثل، تشير الإصدارات في الآلات الافتراضية إلى عملية تتبع التغييرات على صورة الآلة الافتراضية بمرور الوقت وإدارتها. يتتبع إصدار الآلة الافتراضية التغييرات، مثل التحديثات والتصحيحات، على الآلات الافتراضية أو تكوين نظام التشغيل.

إمكانية النقل

تم تصميم كل من الآلات الافتراضية وDocker لمعالجة صعوبات الاضطرار إلى تطوير تكوينات تطبيقات مختلفة لأنواع مختلفة من الهياكل والتصميمات. ومع أنها تتّبع أساليب مختلفة لمواجهة التحديات، إلا أن صور Docker والآلة الافتراضية قابلة للنقل بشكل كبير بين مُختلف الهياكل، سواء في أماكن العمل أو في السحابة. 

الاختلافات الرئيسية: Docker مقابل الآلة الافتراضية

تعالج كل من الآلات الافتراضية (VM) وDocker التحدي المتمثل في تشغيل التطبيقات في بيئات مختلفة. لكنها تفعل ذلك لأسباب مختلفة قليلاً وبنهج مختلفة.

الهدف

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

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

المنتج النهائي

Docker هو اسم منصة الحاويات المفتوحة المصدر التي تملكها وتديرها شركة Docker. هناك منصات بديلة مثل Podman، مع أنها أقل شعبية بكثير؛ Docker يشبهها تمامًا ويتيح النقل بالحاويات. الحاوية هي الأداة، الجزء التي يمكن للمستخدم النهائي استخدامه.

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

البنية

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

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

لمزيد من إدارة المحاكاة الافتراضية المتقدمة باستخدام Docker، يمكنك استخدام Kubernetes. لمزيد من المعلومات، اقرأ ما الفرق بين Kubernetes وDocker؟

مشاركة الموارد

تستخدم كل من الآلات الافتراضية وحاويات Docker تعدد إرسال الموارد أو مشاركة الموارد بين المثيلات الافتراضية.

تطلب الآلات الافتراضية مقدارًا محددًا من الموارد مقدمًا من الأجهزة وتستمر في شغل هذا المبلغ بشكل ثابت، طالما أن الآلة الافتراضية قيد التشغيل. 

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

الأمان

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

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

حالات الاستخدام: Docker مقابل الآلة الافتراضية

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

على سبيل المثال، يمكنك تدوير مثيل في AWS وتحميله فورًا باستخدام صورة Amazon Machine (AMI) التي تم تكوينها مسبقًا باستخدام Docker. 

 

ومع ذلك، إذا كنت تقرر تحديدًا ما إذا كنت تريد استخدام آلة افتراضية (VM) أو Docker لنشر التطبيقات، فإن ذلك يعتمد على متطلبات تشغيل التطبيق.

الحالات التي ننصح باستخدام آلة افتراضية فيها

من الأفضل استخدام آلة افتراضية عند تشغيل تطبيقات بهذه المتطلبات: 

  • تبعيات خاصة بنظام التشغيل
  • احتياجات كبيرة من موارد الأجهزة
  • الحاجة إلى تعيين عناصر تحكم مختلفة في أنظمة التشغيل
  • التطبيقات القديمة التي لم تعد تعمل على أنظمة التشغيل الحديثة
  • متطلبات نظام تشغيل مختلفة مع بنية تحتية مادية أساسية واحدة متاحة

متى تستخدم Docker

من الأفضل استخدام Docker عند تشغيل التطبيقات بهذه المتطلبات: 

  • متطلبات الموارد الخفيفة أو بنية الخدمات المصغرة
  • بيئة بنية تحتية مادية موزعة، بما في ذلك الخوادم المستندة إلى السحابة
  • دورات النشر السريع (لأنّ إدارة ملفات Docker أسهل من إدارة تكوينات الآلات الافتراضية)
  • متطلبات قابلية التوسع بسرعة

ملخص الاختلافات: بين Docker والآلة الافتراضية (VM)

 

حاوية Docker

الآلة الافتراضية (VM)

ما التعريف؟

Docker عبارة عن منصة برمجية لإنشاء حاويات Docker وتشغيلها. حاوية Docker هي محاكاة لمثيل مساحة المستخدم، وهو جزء من نظام التشغيل حيث يتم تشغيل عمليات المستخدم.

محاكاة جهاز مادي، بما في ذلك الآلات الافتراضية، التي تعمل بنظام تشغيل.

المحاكاة الافتراضية

تستخرج الحاوية تفاصيل نظام التشغيل من رمز التطبيق.

تجرّد الآلة الافتراضية تفاصيل الأجهزة من رمز التطبيق.

الهدف

تجريد تفاصيل الأجهزة وزيادة استخدام الأجهزة.

تحسين إدارة بيئة التطبيقات وتحقيق الاتساق بين بيئات متعددة.

تتم إدارته بواسطة

ينسّق Docker Engine بين نظام التشغيل وحاويات Docker.

ينسّق مراقب الآلات الافتراضية بين الأجهزة المادية للجهاز والآلات الافتراضية.

البنية

يشارك الموارد مع نواة المضيف الأساسية.

يشغّل نواة ونظام تشغيل خاصين به.

مشاركة الموارد

حسب الطلب

مبلغ ثابت، يتم تحديده في متطلبات تكوين صورة الآلة الافتراضية.

كيف يمكن أن تلبّي AWS متطلباتك لنشر التطبيقات؟

تقدّم Amazon Web Services (AWS) مجموعة من الخدمات المصممة خصيصًا للآلات الافتراضية (VM) وإدارة Docker:

  • توفّر خدمة Amazon Elastic Cloud Compute (Amazon EC2) أكثر من 600 نوع مختلف من المثيلات الآمنة والموثوقة والقابلة للتطوير. من خلال تحميل نموذج Amazon Machine Image (AMI)، يمكنك الحصول على خادم بيئة تطوير أو اختبار أو إنتاج محدد بالكامل وجاهز للعمل في غضون دقائق.
  • خدمة الحاويات المرنة بـ Amazon‏ (Amazon ECS) هي عبارة عن خدمة مُدارة بالكامل تعمل على تكوين الحاويات وتنسيقها وأتمتة إدارتها لتسهِّل عليك نشر التطبيقات المخزّنة في حاويات وتوسيع نطاقها. يمكن للعملاء تكوين مثيلات الحاوية الخاصة بهم للوصول إلى سجل صور Docker الخاص داخل سحابة خاصة افتراضية (VPC) أو سجل يمكن الوصول إليه خارج السحابة الخاصة الافتراضية.
  • يتيح لك سجل الحاويات المرن بـ Amazon (‏Amazon ECR) تخزين حاوياتك ومشاركتها ونشرها بسهولة في أي مكان. يتكامل Amazon ECR مع واجهة سطر أوامر Docker (‏Docker CLI) لتبسيط أعباء عمل التطوير والإنتاج. على سبيل المثال، يمكنك دفع صور الحاوية إلى Amazon ECR باستخدام Docker CLI من جهاز التطوير الخاص بك. ويمكن لمنظمي حاويات Amazon سحبها مباشرةً بهدف استخدامها في عمليات نشر الإنتاج.
  • AWS Fargate هي خدمة بلا خادم تتيح لك نشر الحاويات وإدارتها بدون الحاجة إلى إدارة خادم فعلي أو آلات افتراضية.

ابدأ في تطوير تطبيقاتك على AWS من خلال إنشاء حساب اليوم.