ما هو "Docker"؟

مكتمل

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

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

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

هناك العديد من التحديات التي سنحتاج إلى النظر فيها في السيناريو السابق:

  • إدارة بيئات الاستضافة

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

  • الاستمرارية في تسليم البرامج

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

  • استخدام فعال للأجهزة

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

  • إمكانية نقل التطبيق

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

وقبل تناول ميزات "Docker" التي تساعد على حل هذه التحديات، سنناقش بعض المفاهيم، ونُلقِ نظرة موجزة على البنية الأساسية لحل "Docker".

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

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

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

ما المقصود بالتعبئة في حاوية البرامج؟

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

ما هو "Docker"؟

يُعد "Docker" نظامًا أساسيًا للتعبئة في حاوية يستخدم لتطوير الحاويات وشحنها وتشغيلها. لا يستخدم "Docker" برنامج hypervisor، ويمكنك تشغيل "Docker" على سطح المكتب أو الكمبيوتر المحمول إذا كنت تقوم بتطوير واختبار التطبيقات. يدعم إصدار سطح المكتب من "Docker" نظام التشغيل Linux وWindows وmacOS. بالنسبة إلى أنظمة الإنتاج، يتوفر "Docker" لبيئات الخادم، بما في ذلك العديد من المتغيرات لخادم نظام تشغيل Linux و Microsoft Windows Server 2016 والإصدارات التالية. يتم دعم Docker من قِبل سحب عديدة، بما في ذلك Azure.

البنية الهيكلية لحل "Docker"

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

محرك "Docker"

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

Diagram showing a high-level overview of the Docker architecture.

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

عميل "Docker"

هناك بديلان لعميل Docker: تطبيق سطر الأوامر المسمى docker أو تطبيق يستند إلى واجهة المستخدم الرسومية (GUI) يسمى Docker Desktop. يتفاعل كل من CLI وDocker Desktop مع خادم Docker. docker تستخدم الأوامر من CLI أو Docker Desktop واجهة برمجة تطبيقات Docker REST لإرسال إرشادات إلى خادم محلي أو بعيد وتعمل كواجهة أساسية نستخدمها لإدارة حاوياتنا.

خادم "Docker"

خادم "Docker" هو برنامج خفي يسمى dockerd . يستجيب برنامج dockerdالخفي للطلبات الواردة من العميل عبر واجهة برمجة تطبيقات "Docker" REST ويمكنه التفاعل مع برامج خفية أخرى. ويكون خادم "Docker" مسؤولاً أيضًا عن تتبع دورة حياة الحاويات لدينا.

عناصر "Docker"

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

Docker Hub

يمثل Docker Hub سجل حاويات Docker لخدمة تأجير البرامج (SaaS). وتمثل سجلات "Docker" مستودعات نستخدمها لتخزين وتوزيع صور الحاوية التي ننشئها. يمثل مركز "Docker" السجل العام الافتراضي الذي يستخدمه "Docker" لإدارة الصور.

ضع في اعتبارك أنه يمكنك إنشاء سجل "Docker" خاص واستخدامه أو استخدام أحد خيارات موفر السحابة العديدة المتاحة. على سبيل المثال، يمكنك استخدام Azure Container Registry لتخزين صور حاويات لاستخدامها في العديد من الخدمات الممكنة لحاوية Azure.