fbpx

ما هو Docker

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

تحتوي الخدمة على مستويات مجانية ومتميزة.

يسمى البرنامج الذي يستضيف الحاويات Docker Engine.

بدأت لأول مرة في عام 2013 وتم تطويرها بواسطة Inc, Docker.

كيف تعمل الحاويات، ولماذا تحظى بشعبية كبيرة؟

أصبحت الحاويات ممكنة بفضل قدرات عزل العمليات والمحاكاة الافتراضية المضمنة في نواة Linux.

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

والذاكرة والموارد الأخرى لخادم جهاز واحد. 

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

  • أخف وزنا: على عكس الأجهزة الظاهرية، لا تحمل الحاويات حمولة مثيل نظام التشغيل بأكمله وبرنامج Hypervisor.

وهي تشمل فقط عمليات نظام التشغيل والتبعيات اللازمة لتنفيذ التعليمات البرمجية.

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

  • تحسين إنتاجية المطور: يمكن كتابة التطبيقات المعبأة في حاويات مرة واحدة وتشغيلها في أي مكان.

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

وهذا يجعلها مثالية للاستخدام في خطوط أنابيب التكامل المستمر والتسليم المستمر (CI / CD) ومناسبة بشكل أفضل لفرق التطوير التي تتبنى ممارسات Agile وDevOps.

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

هذا يمكن أن يقلل من الإنفاق على الكلاود.

لماذا تستخدمDocker؟

يحظى Docker بشعبية كبيرة اليوم لدرجة أن “Docker” و“الحاويات” يستخدمان بالتبادل.

لكن التقنيات الأولى المتعلقة بالحاويات كانت متاحة لسنوات – حتى قبل إصدار Docker للجمهور في عام 2013.

وعلى الأخص، في عام 2008، تم تنفيذ LinuXContainers (LXC) في نواة Linux، مما مكن المحاكاة الافتراضية بالكامل لمثيل واحد من Linux.

على الرغم من أن LXC لا يزال يستخدم اليوم، إلا أن التقنيات الأحدث التي تستخدم نواة Linux متوفرة.

يوفر Ubuntu، وهو نظام تشغيل Linux حديث مفتوح المصدر، هذه الإمكانية أيضا.

يتيح Docker للمطورين الوصول إلى إمكانات الحاويات الأصلية هذه باستخدام أوامر بسيطة وأتمتتها من خلال واجهة برمجة تطبيقات (API) لتوفير العمل.

مقارنة ب LXC، تقدم Docker

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

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

  • إنشاء حاوية تلقائية: يمكن ل Docker إنشاء حاوية تلقائيا استنادا إلى التعليمات البرمجية المصدرية للتطبيق.
  • تعيين إصدار الحاوية: يمكن ل Docker تتبع إصدارات صورة الحاوية والرجوع إلى الإصدارات السابقة وتتبع من أنشأ إصدارا وكيف.

يمكنه حتى تحميل الدلتا فقط بين إصدار موجود وإصدار جديد.

  • إعادة استخدام الحاويات: يمكن استخدام الحاويات الموجودة كصور أساسية – بشكل أساسي مثل قوالب إنشاء حاويات جديدة.
  • مكتبات الحاويات المشتركة: يمكن للمطورين الوصول إلى سجل مفتوح المصدر يحتوي على الآلاف من الحاويات التي يساهم بها المستخدمون.

اليوم تعمل حاويات Docker أيضا مع Microsoft Windows وApple MacOS.

يمكن للمطورين تشغيل حاويات Docker على أي نظام تشغيل، ويقدم معظم موفري الخدمات الكلاود الرائدين، بما في ذلك Amazon Web Services (AWS) وMicrosoft وAzure خدمات محددة لمساعدة المطورين على إنشاء التطبيقات ونشرها وتشغيلها في حاويات مع Docker.  

أدوات ومصطلحات Docker

تتضمن بعض الأدوات والمصطلحات والتقنيات التي يواجهها مطورو البرامج عند استخدام Docker ما يلي:

ملفات Docker

تبدأ كل حاوية Docker بملف نصي بسيط يحتوي على إرشادات حول كيفية إنشاء صورة حاوية Docker.

يقوم DockerFile بأتمتة عملية إنشاء صورة Docker.

إنها في الأساس قائمة بتعليمات واجهة سطر الأوامر (CLI) التي سيقوم Docker Engine بتشغيلها لتجميع الصورة.

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

صور Docker

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

عند تشغيل صورة Docker، تصبح مثيلا واحدا للحاوية. 

من الممكن إنشاء صورة Docker من الصفر، لكن معظم المطورين يسحبونها من المستودعات الشائعة.

يمكن إنشاء صور Docker متعددة من صورة أساسية واحدة، وستشارك القواسم المشتركة في مكدسها.

 تتكون صور Docker من طبقات، وتتوافق كل طبقة مع إصدار من الصورة.

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

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

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

يتم حفظ التغييرات التي يتم إجراؤها على الحاوية – مثل إضافة الملفات أو حذفها – في طبقة الحاوية فقط وتوجد فقط أثناء تشغيل الحاوية.

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

حاويات Docker

حاويات Docker هي المثيلات المباشرة والجارية لصور Docker.

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

يمكن للمستخدمين التفاعل معهم، ويمكن للمسؤولين ضبط إعداداتهم وشروطهم باستخدام أوامر Docker

Docker Hub

Docker Hub هو المستودع العام لصور Docker التي تطلق على نفسها اسم “أكبر مكتبة ومجتمع في العالم لصور الحاويات”.

يحتوي على أكثر من 100,000 صورة حاوية مصدرها بائعي البرامج التجارية والمشاريع مفتوحة المصدر والمطورين الأفراد.

ويشمل الصور التي تم إنتاجها من قبل Inc,Docker. والصور المعتمدة التي تنتمي إلى سجل Docker Trusted، وعدة آلاف من الصور الأخرى. 

يمكن لجميع مستخدمي Docker Hub مشاركة صورهم حسب الرغبة.

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

توجد مستودعات صور أخرى أيضا، ولا سيما GitHub.

GitHub هي خدمة استضافة مستودع، معروفة جيدا بأدوات تطوير التطبيقات وكمنصة تعزز التعاون والتواصل.

يمكن لمستخدمي Docker Hub إنشاء مستودع (repo) يمكنه الاحتفاظ بالعديد من الصور.

يمكن أن يكون المستودع عاما أو خاصا ويمكن ربطه بحسابات GitHub أو BitBucket.

Docker Desktop

Docker Desktop هو تطبيق لنظام التشغيل Mac أو Windows يتضمن Docker Engine وعميل Docker CLI وDocker Compose وKubernetes وغيرها.

ويشمل أيضا الوصول إلى Docker Hub.

Docker daemon

Docker daemon هي خدمة تقوم بإنشاء صور Docker وإدارتها، باستخدام الأوامر من العميل.

يعمل Docker daemon بشكل أساسي كمركز تحكم في تنفيذ ل Docker الخاص بك.

يسمى الخادم الذي يعمل عليه daemon Docker مضيف Docker.

سجل Docker

سجل Docker هو نظام تخزين وتوزيع مفتوح المصدر قابل للتطوير لصور Docker.

يمكنك السجل من تتبع إصدارات الصور في المستودعات، باستخدام وضع العلامات لتحديد الهوية.

يتم تحقيق ذلك باستخدام git، وهي أداة للتحكم في الإصدار.

نشر Docker وتنسيقه

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

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

اضافات Docker

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

 يتم تضمين عدد قليل من المكونات الإضافية ل Docker في نظام المكون الإضافي Docker Engine، ويمكن تحميل المكونات الإضافية التابعة لجهات خارجية أيضا.

تأليف Docker

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

يقوم Docker Compose بإنشاء YAML  (.YML)الذي يحدد الخدمات المضمنة في التطبيق ويمكنه نشر الحاويات وتشغيلها بأمر واحد.

نظرا لأن بناء جملة YAML لا أدري لغوي، يمكن استخدام   ملفات YAML في البرامج المكتوبة بلغة Java وPython وRuby والعديد من اللغات الأخرى. 

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

Kubernetes

تتطلب مراقبة دورات حياة الحاويات وإدارتها في بيئات أكثر تعقيدا أداة تنسيق الحاويات.

بينما يتضمن Docker أداة التنسيق الخاصة به (تسمى Docker Swarm)، يختار معظم المطورين Kubernetes بدلا من ذلك. 

Kubernetes هي منصة تنسيق حاويات مفتوحة المصدر تنحدر من مشروع تم تطويره للاستخدام الداخلي في Google.

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

بالإضافة إلى ذلك، فإن النظام البيئي مفتوح المصدر لأدوات Kubernetes – والذي يتضمن lstio وKnative– يمكن المؤسسات من نشر نظام أساسي عالي الإنتاجية كخدمة (PaaS) للتطبيقات المعبأة في حاويات وأسرع على on-ramp  إلى الحوسبة بدون خادم.

راسلنا