ما المقصود بـ Docker؟

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

تُعد Containers as a Service (CaaS) أو Container Services خدمات سحابية مُدارة لإدارة دورة حياة الحاويات. تساعد خدمات الحاويات على تنسيق وقت تشغيل الحاويات (بدء، إيقاف، قياس). باستخدام خدمات الحاويات، يمكنك تبسيط دورة حياة تطوير التطبيقات ونشرها وتشغيلها تلقائيًا وتسريعها.

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

تعريف مصطلحات Docker

Docker:

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

الحاويات:

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

محرك Docker:

إنشاء برامج المضيف مفتوحة المصدر وتشغيل الحاويات. تعمل محركات Docker كتطبيق عميل يدعم الحاويات على خوادم نوافذ وأنظمة تشغيل Linux المختلفة، بما في ذلك Oracle Linux وCentOS وDebian وFedora وRHEL وSUSE وUbuntu.

صور Docker:

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

سجل Docker:

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

من يستخدم Docker؟

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

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

DevOps والمطورون

يمكن تعبئة الحاويات بواسطة أي نوع من المطورين. غالبًا ما يفصل الأفراد في صناعة البرمجيات بين المطورين حسب التخصص - الواجهة الأمامية أو الواجهة الخلفية أو أي تركيز بينهما. بينما قد ترى في الغالب حاويات تغليف للمطورين من الواجهة الخلفية، يمكن لأي شخص على دراية بالمفاهيم الأساسية لـ CaaS أن ينجح في هذا المجال المحدد من دورة حياة تطوير البرامج. قبل أن تكون مستعدًا لحزم تبعيات التطبيق، تحقق من developer.oracle.com وتعرف على الأدوات التي يمكنك استخدامها لإنشاء التطبيق أو البرنامج.

Docker في مقابل Kubernetes

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

أساسيات Docker

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

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

صورة أساسيات docker
الشكل 1

العزل في مقابل المحاكاة الافتراضية

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

نظام الملفات المتزايدة

صورة نظام الملفات المتزايدة
الشكل 2

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

كما هو موضح في الشكل 2، يمكن أن تستند صورة Docker مع توزيع WebLogic إلى صورة ذات نطاق Oracle WebLogic Server، والذي يمكن أن يستند إلى صورة WebLogic، والتي تستند إلى صورة Java Development Kit (JDK)، والتي تستند بدورها إلى صورة أساس Oracle Linux.

سجل نظام Docker

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

يساعد سجل نظام Docker أيضًا في تحسين التحكم في الوصول وأمان صور Docker المخزنة في المستودع. وهو يدير توزيع الصور ويمكن أن يتكامل مع سير عمل تطوير التطبيقات. يمكن للمطورين إعداد سجل نظام Docker الخاص بهم، أو استخدام خدمة سجل نظام Docker مستضافة مثل Docker Hub وOracle Container Registry وAzure Container Registry وما إلى ذلك.

لوحة وصل Docker هو سجل Docker مُستضاف تتم إدارته بواسطة Docker. تحتوي لوحة وصل Docker على أكثر من 100000 صورة حاوية من موردي البرامج والمشروعات مفتوحة المصدر والمجتمع. تحتوي لوحة وصل Docker على برامج وتطبيقات من مستودعات رسمية مثل NGINX وLogstash وApache HTTP وGrafana وMySQL وUbuntu وOracle Linux.

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

الشكل 3: لقطة شاشة لسجل نظام Docker
الشكل 3

Docker كوقت تشغيل خدمات صغيرة

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

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

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

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

Docker - بُعدان رئيسيان

تغير Docker طريقة بناء البرامج وشحنها وتشغيلها ببُعدين مختلفين:

  • وهو يعزز عملية الحصول على التطبيقات بشكل موثوق من التطوير إلى الإنتاج.
  • فهو يوفر تنسيق صورة قياسيًا للانتقال من البرمجيات المحلية إلى السحابة.

ويرد شرح لكلا البُعدين بمزيد من التفصيل في الفقرات التالية.

صورة Docker - التطوير إلى الإنتاج

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

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

لقطة شاشة لصورة docker
الشكل 4

توضح الإحصائيات أن 65% من حالات استخدام Docker الحالية قيد التطوير، وأن 48% يستخدمون Docker للتكامل المستمر.

Docker Cloud

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

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

إصدارات Docker - نضج التكنولوجيا الأساسية

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

على الرغم من أن Docker وسطر الأوامر الخاص به، إلا أن برنامج محرك Docker وواجهة برمجة التطبيقات والأدوات الخاصة به مثل Docker Swarm وDocker Machine وDocker Compose تطور فقط في السنوات الثلاث الماضية، إلا أن ميزات kernel الأساسية كانت متاحة في كل نواة Linux لما يقرب من عقد من الزمان.

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

محفوظات المجموعات ومساحات الأسماء

ميزات Linux kernel الأساسية التي يستخدمها Docker هي مجموعات cgroups ومساحات الأسماء. في عام 2008 تم تقديم مجموعات cgroups إلى Linux kernel بناءً على العمل الذي قام به مطورو Google سابقًا 1. حدود مجموعات Cgroup وحساب استخدام المورد لمجموعة من عمليات نظام التشغيل.

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

خدمات Container Cloud

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

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

ولتسهيل المطورين وكفاءتها لإنشاء تطبيقات مزودة بالحاويات، يقدم موفرو الخدمات السحابية خدمات Container Cloud أو Containers as a Service (CaaS). تساعد خدمات Container Cloud Services فرق المطورين والعمليات على تبسيط دورة حياة الحاويات وإدارتها بطريقة آلية. وتسهّل خدمات التنسيق هذه، التي يتم إنشاؤها عادة باستخدام Kubernetes، على فرق DevOps إدارة التطبيقات ذات الحاوية على نطاق واسع وتشغيلها. Oracle Cloud Infrastructure Kubernetes Engine وAzure Kubernetes Service هما مثالان لخدمات السحابة المُدارة لتنسيق الحاويات.

Oracle Cloud Infrastructure Kubernetes Engine هي خدمة مدارة بالكامل وقابلة للتوسع وعالية التوافر يمكنك استخدامها لنشر تطبيقاتك ذات الحاوية في السحابة. استخدم Kubernetes Engine (يُختصر أحيانًا إلى OKE فقط) عندما يريد فريق التطوير لديك إنشاء تطبيقات السحابة الأصلية ونشرها وإدارتها بشكل موثوق.

صور Docker من Oracle

يمكن تعبئة الحاويات بواسطة أي نوع من المطورين. غالبًا ما يفصل الأفراد في صناعة البرمجيات بين المطورين حسب التخصص - الواجهة الأمامية أو الواجهة الخلفية أو أي تركيز بينهما. بينما قد ترى في الغالب حاويات تغليف للمطورين من الواجهة الخلفية، يمكن لأي شخص على دراية بالمفاهيم الأساسية لـ CaaS أن ينجح في هذا المجال المحدد من دورة حياة تطوير البرامج. قبل أن تكون مستعدًا لحزم تبعيات التطبيق، تحقق من developer.oracle.com وتعرف على الأدوات التي يمكنك استخدامها لإنشاء التطبيق أو البرنامج.

فيما يلي بعض المصادر للحصول على صور Docker أو إنشائها لمنتجات Oracle. يحتوي مخزن Oracle GitHub لصور Docker على ملفات Dockerfiles ونماذج لإنشاء صور Docker لمنتجات Oracle التجارية ومشروعات Oracle مفتوحة المصدر التي ترعاها.

التمرين العملي من Docker - تطوير حاويات مع Docker

المراجع

  1. Cgroups (ويكيبيديا)
  2. مساحات أسماء Linux (ويكيبيديا)