# دوكر

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

## النشأة

تأسست شركة دوكر من قبل سولومون هيكيس وسيباستيان بال خلال مجموعة حاضنة Y Combinator Summer 2010 التي تم إطلاقها في عام 2011. بدأ هيكيس مشروع دوكر في فرنسا كمشروع داخلي داخل دوت كلاود (dotCloud)، وهي شركة منصة كخدمة.
بدأ المشروع عام 2008 كمشروع صغير مفتوح المصدر باسم إل إكس سي (LXC)، لكن البداية الحقيقية لهذا التكنولوجيا كانت عام 2013 على يد شركة دوكر التي نشرت هذة التكنولوجيا بشكل رسمي وأصبح دوكر من أهم مكونات المنصات السحابية PaaS اللازمة لتطوير التطبيقات وأكثرها انتشارا.
من أسباب نجاح دوكر أنه أحدث نقلة نوعية في عملية تطوير التطبيقات، كما مكن المطورين من المشاركة والعمل على نفس المشروع فيما بينهم بسهولة وكذلك من إزالة بعض التعقيدات البرمجية.
في عام 2017، أنشأت دوكر مشروع موبي للبحث والتطوير المفتوح.

## الفرق بين دوكر والآلات الافتراضية

يعد دوكر أخف بكثير من الآلات الافتراضية، حيث يمكن تشغيل العشرات من الحاويات في حاسوب عادي واحد، في حين لا يمكن تشغيل 3-4 آلات افتراضية في حاسوب عادي واحد ولو كان قويا نسبيا. أي أن دوكر يستهلك موارد أقل بكثير. ثم إن الآلات الافتراضية تقوم بمحاكاة كامل النظام وكل ما فيه ووضعه فوق النظام المضيف، في حين يقوم دوكر بتشارك النواة (Linux kernel) مع النظام المضيف. ما يقوم به دوكر هو تنزيل التوزيعات فقط، أي الـ bins/libs لكل توزيعة فقط، في حين يتشارك النواة مع النظام المضيف ولا يُنزّل نواة جديدة مع تلك التوزيعة. تلك الـ bins/libs كفيلة لمحاكاة بيئة التوزيعة المرجوة، أما النواة فهي متشابهة بين جميع التوزيعات وبالتالي يتقاسمها مع النظام المضيف وهو يعمل على كافة أنواع أنظمة التشغيل، هذا بالإضافة إلى أن دوكر يعزل التطبيق واعتمادياته فقط، في حين الآلات الافتراضية تعزل كامل النظام وما فيه من تطبيقات.

## المكونات

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

## الأدوات

* دوكر كومبوس (Docker Compose) هي أداة لتعريف وتشغيل تطبيقات دوكر متعددة الحاويات. ويستخدم ملفات YAML لتكوين خدمات التطبيق وللقيام بعملية الإنشاء وبدء التشغيل لكافة الحاويات ذات الأمر الواحد. تسمح الأداة المساعدة CLI الخاصة بدوكر كومبوس للمستخدمين بتشغيل الأوامر على حاويات متعددة في وقت واحد، على سبيل المثال، بناء الصور وتحجيم الحاويات وتشغيل الحاويات التي تم إيقافها والمزيد. الأوامر المتعلقة بمعالجة الصور، أو الخيارات التفاعلية للمستخدم، ليست ذات صلة بدوكر كومبوس لأنها تتناول حاوية واحدة. يتم استخدام ملف docker-compose.yml لتعريف خدمات التطبيق ويتضمن خيارات تكوين مختلفة. على سبيل المثال، يحدد خيار الإنشاء خيارات التكوين مثل مسار ملف دوكر (Dockerfile)، يسمح خيار الأمر بتجاوز أوامر دوكر الافتراضية، والمزيد. تم إصدار أول إصدار تجريبي من دوكر كومبوس (الإصدار 0.0.1) في 21 ديسمبر عام 2013. تم توفير أول إصدار جاهز للإنتاج (1.0) في 16 أكتوبر 2014.
* دوكر سوارم (Docker Swarm) الذي يوفر وظائف التجميع الأصلية لحاويات دوكرويحول مجموعة من محركات دوكر إلى محرك دوكر افتراضي واحد. في دوكر 1.12 وأعلى، وضع سوارم يدمج مع محرك دوكر. يسمح CLI دوكر سوارم للمستخدمين بالقيام بتشغيل حاويات سوارم وإنشاء رموز توكن وتعداد العقد في الكتلة وأكثر. تسمح عقدة دوكر للمستخدمين بتشغيل أوامر مختلفة لإدارة العقد في سوارم، على سبيل المثال، سرد العقد في سوارم وتحديث العقد وإزالة العقد من سوارم. يدار دوكر سوارم باستخدام خوارزمية توافق الآراء رافت. وفقا لرافت، ليتم تنفيذ التحديث، فإن غالبية عقد سوارم تحتاج إلى الاتفاق على التحديث.