Kubernetes مقابل Docker: لماذا لا نستخدم كلتيهما؟

غرفة اختبار IBM Spectrum Fusion RF مع فريق من المهندسين

هل Kubernetes أم Docker هو الخيار الأفضل (أم أنه ليس خيارًا أصلًا)؟

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

إن حقيقة أن Kubernetes وDocker هما تقنيتان متكاملتان للحاويات توضّح سؤالًا متكررًا آخر: هل يحل Kubernetes محل Docker؟.

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

 

ما هي الحاوية؟

الحاوية هي وحدة برمجية تنفيذية تجمع كود التطبيق مع تبعياته، مما يمكنه من العمل على أي بنية تحتية لتكنولوجيا المعلومات.  الحاوية قائمة بذاتها؛ فهي مجردة بعيدًا عن نظام التشغيل المضيف — عادةً Linux — مما يجعلها قابلة للنقل عبر بيئات تكنولوجيا المعلومات.

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

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

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

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

ما المقصود بمنصة Docker؟

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

على الرغم من أنه بدأ كمشروع مفتوح المصدر، فإن Docker اليوم يشير أيضًا إلى شركة Docker, Inc.، وهي الشركة التي تنتج منتج Docker التجاري. حاليًا، هي الأداة الأكثر شيوعًا لإنشاء الحاويات، سواء كان المطورون يستخدمون نظام Windows أو Linux أو MacOS.

في الواقع ، كانت تقنيات الحاويات متاحة لعقود قبل إصدار Docker في عام 2013. في الأيام الأولى، كانت حاويات Linux (أو LXC) هي الأكثر انتشارًا. تم بناء Docker على LXC، لكن تقنية Docker المخصصة تجاوزت LXC بسرعة لتصبح منصة النقل بالحاويات الأكثر شعبية. 

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

تتضمن بعض الأدوات والمصطلحات الشائعة الاستخدام مع Docker ما يلي:

  • Docker Engine: بيئة وقت التشغيل التي تسمح للمطورين ببناء الحاويات وتشغيلها.
  • Dockerfile: ملف نصي بسيط يحدد كل ما يلزم لبناء صورة حاوية Docker، مثل مواصفات شبكة نظام التشغيل ومواقع الملفات. إنها في الأساس قائمة بالأوامر التي سيقوم Docker Engine بتشغيلها لتجميع الصورة.
  • Docker Compose: أداة لتحديد وتشغيل تطبيقات الحاويات المتعددة. تنشئ ملف YAML لتحديد الخدمات المضمنة في التطبيق ويمكنها نشر وتشغيل الحاويات بأمر واحد عبر Docker CLI.

الآن دعونا نعود إلى سبب توقف Kubernetes عن دعم Docker كبيئة تشغيل حاويات. كما هو مذكور في الجزء العلوي من هذا القسم، فإن Docker عبارة عن containerd وليس بيئة تشغيل حاوية. هذا يعني أن Docker موجود فوق بيئة تشغيل حاويات أساسية لتزويد المستخدمين بميزات وأدوات عبر واجهة مستخدم. ولدعم Docker كبيئة تشغيل، كان على Kubernetes دعم وتنفيذ بيئة تشغيل منفصلة تُعرف باسم Docker Shim، والتي كانت تقع بشكل أساسي بين التقنيتين وتساعدهما على التواصل.

تم ذلك في وقت لم يكن متاح فيه الكثير من بيئات تشغيل الحاويات. ولكن الآن وقد توفرت — مع كون CRI-O مثالًا لأحد بيئات تشغيل الحاويات هذه — يمكن لـ Kubernetes أن يوفر للمستخدمين الكثير من خيارات بيئة تشغيل الحاويات، والعديد منها يستخدم واجهة وقت تشغيل الحاوية القياسية (CRI)، وهي طريقة لـ Kubernetes وبيئة تشغيل الحاوية للتواصل بشكل موثوق دون وجود طبقة وسطى تعمل كوسيط.

ومع ذلك، على الرغم من أن Kubernetes لم يعد يوفر دعمًا خاصًا لـ Docker كبيئة تشغيل، فإنه لا يزال بإمكانه تشغيل وإدارة الحاويات المبنية باستخدام مبادرة الحاويات المفتوحة (OCI)، وهو تنسيق الصور الخاص بـ Docker الذي يسمح لك باستخدام Dockerfiles وإنشاء صور Docker. بعبارة أخرى، لا يزال لدى Dockers الكثير ليقدمه في النظام البنائي لـ Kubernetes.

ما هي مزايا Docker؟

توفر منصة Docker للحاويات جميع مزايا الحاويات المذكورة سابقًا، بما في ذلك ما يلي:

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

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

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

تحتوي Docker على العديد من الأوامر المستخدمة في إنشاء وتشغيل الحاويات:

  • docker build : يقوم هذا الأمر بإنشاء صورة Docker جديدة من مصدر الرمز (أي من Dockerfile والملفات الضرورية).
  • docker create : ينشئ هذا الأمر صورة Docker جديدة من صورة دون بدء تشغيلها، ويتضمن هذا الأمر إنشاء طبقة حاوية قابلة للكتابة فوق الصورة وتجهيزها.
  • docker run : يعمل هذا الأمر تماما مثل أمر docker createdocker create  ، إلا أنه يأخذ خطوة إضافية لتشغيله بعد الإنشاء.
  • docker exec : يُستَخدَم هذا الأمر لتنفيذ أمر جديد داخل حاوية قيد التشغيل بالفعل.

ما المقصود بمنصة Kubernetes؟

Kubernetes هي منصة مفتوحة المصدر لتنسيق الحاويات تستخدم لجدولة وأتمتة نشر التطبيقات في حاويات وإدارتها وتوسيع نطاقها. تعمل الحاويات في بنية حاويات متعددة تسمى "المجموعة". تشتمل  مجموعة Kubernetes  على حاوية مخصصة كطائرة تحكم تقوم بجدولة أحمال التشغيل لبقية الحاويات — أو العقد العاملة — في المجموعة.

تحدد العقدة الرئيسية مكان استضافة التطبيقات (أو حاويات Docker)، وتقرر كيفية تجميعها معًا وتدير تنسيقها. من خلال تجميع الحاويات التي تشكل تطبيقًا ما في مجموعات، يسهّل Kubernetes اكتشاف الخدمة ويتيح إدارة كميات كبيرة من الحاويات طوال دورات حياتها. 

قدمت Google Kubernetes كمشروع مصدر مفتوح في عام 2014. والآن، تتم إدارتها من قبل مؤسسة برمجيات مصدر مفتوح تسمى مؤسسة الحوسبة السحابية الأصلية (CNCF). صُمِم Kubernetes لتنسيق الحاويات في بيئات الإنتاج، ويحظى بشعبية كبيرة بفضل وظائفه القوية ومجتمعه النشط مفتوح المصدر الذي يضم آلاف المساهمين والدعم وإمكانية نقله عبر مقدمي الخدمات السحابية العامة الرائدين (مثل IBM Cloud وGoogle وAzure وAWS).

ما هي مزايا Kubernetes؟

  • النشر المؤتمت: يقوم Kubernetes بجدولة وأتمتة نشر الحاويات عبر عقدة حوسبة متعددة، والتي يمكن أن تكون أجهزة افتراضية أو خوادم تعمل بدون نظام تشغيل 
  • اكتشاف الخدمة وموازنة الحمل: يعرض حاوية على الإنترنت ويستخدم موازنة الحمل عندما تحدث ارتفاعات في حركة المرور للحفاظ على الاستقرار.
  • ميزات التوسع التلقائي (Auto-scaling): بدء تشغيل الحاويات الجديدة تلقائيًّا للتعامل مع الأحمال الثقيلة، سواءً بناءً على استخدام وحدة المعالجة المركزية أو عتبات الذاكرة أو المقاييس المخصصة.
  • قدرات الشفاء الذاتي: تقوم Kubernetes بإعادة تشغيل الحاويات أو استبدالها أو إعادة جدولتها عند فشلها أو عند موت العقد، وتقوم بإيقاف تشغيل الحاويات التي لا تستجيب لفحوصات الصحة التي يحددها المستخدم. 
  • الطرح والتراجع المؤتمت:  طرح تغييرات التطبيق ومراقبة سلامة التطبيق تحسبًا لأي مشكلات، ثم التراجع عن التغييرات إذا حدث خطأ ما.
  • تنسيق التخزين:  الربط التلقائي لنظام تخزين محلي أو سحابي مستمر ومختار حسب الحاجة لتقليل زمن الانتقال — وتحسين تجربة المستخدم.
  • التزويد الديناميكي لوحدات التخزين: السماح لمسؤولي المجموعة بإنشاء وحدات تخزين دون الحاجة إلى إجراء استدعاءات يدويًّا إلى موفري التخزين أو إنشاء كائنات.

Kubernetes وDocker: العثور على أفضل حل للحاويات

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

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

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

التكامل لتحسين أتمتة التطبيقات وإدارتها

تحتوي الإصدارات الأحدث من Docker على تكامل مدمج مع Kubernetes. تُمكِّن هذه الميزة فرق التطوير من أتمتة وإدارة جميع التطبيقات المعبأة في حاويات التي ساعدهم Docker في إنشائها بشكل أكثر فعالية.

في النهاية، إنها مسألة ما هو المزيج من الأدوات الذي يحتاجه فريقك لتحقيق أهداف عمله. اطلع على كيفية البدء في الاستخدام من خلال هذه البرامج التعليمية الخاصة بـ Kubernetes واستكشف خدمة IBM Cloud Kubernetes لمعرفة المزيد.

احصل على شارة من خلال برامج تعليم Kubernetes المجانية القائمة على المتصفح مع  IBM CloudLabs.

مؤلف

اتخِذ الخطوة التالية

ابدأ باستخدام منصة Red Hat OpenShift المدارة بالكامل أو استكشف مرونة نظام IBM Cloud Kubernetes. تمكَّن من تسريع عملية التطوير والنشر لديك من خلال حلول قابلة للتوسع وآمنة ومصممة لتلبية احتياجاتك.

استكشف Red Hat OpenShift استكشف Kubernetes