Docker

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

ما هو Docker؟

‏Docker منصة لبناء البرمجيات وتشغيلها داخل حاويات (containers)، وتطوّرها شركة Docker, Inc. والحاوية حزمة مستقلة تضم التطبيق مع كل ما يحتاج إليه ليعمل: إصدار اللغة المناسب والمكتبات والإعدادات. ولا تشغّل كل حاوية نظام تشغيل كاملًا خاصًا بها كما تفعل الآلات الافتراضية، بل تتشارك الحاويات نواة نظام التشغيل في الخادم، لذلك تبدأ في ثوانٍ وتستهلك موارد أقل بكثير.

يصف ملف نصي قصير اسمه Dockerfile طريقة بناء البيئة، ويحوّله Docker إلى صورة (image)، أي قالب للقراءة فقط يمكن حفظه ومشاركته عبر سجلات الصور مثل Docker Hub، حيث تُنشر الصور الرسمية لـ Node.js وPHP وPostgreSQL وMySQL. وكل نسخة قيد التشغيل من الصورة هي حاوية. أما Docker Compose فيشغّل عدة حاويات معًا، كالتطبيق وقاعدة بياناته، انطلاقًا من ملف واحد، بينما تحفظ وحدات التخزين الدائمة (volumes) البيانات عند استبدال الحاوية.

أُطلق Docker برمجيةً مفتوحة المصدر عام 2013 على يد الشركة التي كانت تُسمى آنذاك dotCloud، ثم غيّرت اسمها في العام نفسه إلى Docker, Inc. وما زال Docker Engine، الذي يشغّل الحاويات على الخوادم، مفتوح المصدر ومجانيًا. أما Docker Desktop، التطبيق الذي يستخدمه المطورون على حواسيبهم، فمجاني للأفراد والتعليم والشركات الصغيرة، بينما تحتاج الشركات الكبيرة إلى اشتراك مدفوع. وقد أصبحت الحاويات منذ ذلك الحين طريقة شائعة لبناء تطبيقات الويب وتشغيلها.

أين نستخدم Docker

نلجأ إلى Docker خصوصًا في المشاريع التي تضم واجهة خلفية (back-end)، أي الجزء الذي يعمل على الخادم، أو قاعدة بيانات أو عدة خدمات تعمل معًا. وهذه أكثر المهام التي نستخدمه فيها:

  • الإعداد نفسه على كل جهاز

    بيئة المشروع موصوفة في ملفات، فيشغّل كل مطوّر المشروع بأمر واحد ويعمل بإصدارات Node.js أو PHP أو قاعدة البيانات نفسها. وهكذا تختفي مشكلة «كان يعمل على جهازي» المعروفة.

  • الواجهات الخلفية وقواعد البيانات

    في الأنظمة المخصصة التي نبنيها بـ Laravel أو Node.js، يشغّل Docker Compose التطبيق وقاعدة بيانات PostgreSQL أو MySQL والخدمات المساندة جنبًا إلى جنب، كلٌّ في حاويته، مع حفظ البيانات بأمان في وحدات التخزين الدائمة.

  • الاختبار قبل الإطلاق

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

  • التسليم والانتقال بين الخوادم

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

لماذا Docker؟

  • نتائج يمكن توقّعها

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

  • مشاريع معزولة

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

  • لا ارتباط بجهة واحدة

    ‏Docker Engine مفتوح المصدر، ويمكن نقل مشروعك إلى خادم آخر أو شركة استضافة أخرى بتغييرات قليلة، فلا تبقى مرتبطًا بمزوّد واحد ولا بنا.

كيف نعمل على مشروعك

في بداية المشروع نصف البيئة في ملف Dockerfile وملف Compose: إصدارات اللغة وقاعدة البيانات وأي خدمات إضافية. ويستخدم جميع المطورين وبيئة الاختبار هذه الملفات نفسها، وكل تعديل عليها يُسجَّل في Git مع الشيفرة.

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

تصميم المواقع وتطويرها

الأسئلة الشائعة

مركز المساعدة
هل يحتاج موقعي إلى Docker؟

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

هل لـ Docker تكلفة؟

‏Docker Engine، الذي يشغّل الحاويات على خادمك، مفتوح المصدر ومجاني. أما Docker Desktop، الذي يستخدمه المطورون على حواسيبهم، فله خطط مدفوعة للشركات الكبيرة، لكنه غير مطلوب على الخادم.

هل يمكنني نقل مشروعي إلى خادم آخر لاحقًا؟

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

هل يبطئ Docker الموقع؟

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

الأداة المناسبة مع الفريق المناسب

لنحدد معًا الأدوات التي تناسب عملك، ثم نعود إليك بخريطة طريق لمشروعك.