يحزّم Docker التطبيق مع كل ما يحتاجه للعمل — نسخة اللغة، والامتدادات، ومكتبات النظام — في حاوية تتصرف بشكل متطابق على حاسب محمول، وفي CI، وفي الإنتاج.
ما هي Docker؟
تقليديًا، كان النشر يعني تثبيت نسخة اللغة والامتدادات الصحيحة على خادم وأمل أن تطابق جهاز التطوير. وكثيرًا ما لم تطابق، وكانت الأخطاء الناتجة أصعب الأنواع: خاصة بالبيئة وغير قابلة لإعادة الإنتاج.
والحاوية تتضمن التطبيق وبيئته كاملة. فالصورة نفسها تعمل على حاسب مطوّر، وفي خط الاختبار، وعلى خادم الإنتاج، ما يزيل ذلك الصنف كله من المشاكل لا يقلّله.
ويجعل التراجع تافهًا: فالنسخة السابقة صورة سابقة، والعودة ثوانٍ لا استعادة.
متى نختار Docker
في أي مشروع يُنشر على خادم افتراضي أو منصة سحابية أو خدمة حاويات. فلا سلبية تقريبًا هناك، والاتساق الذي يشتريه يغطي كلفته أول مرة كان فارق بيئة سيسبب انقطاعًا.
وخصوصًا لخدمات Python وNode، حيث انحراف الاعتماديات وبيئة التشغيل شائع بما يجعل الحوسبة في حاويات شبه إلزامية.
وهو أيضًا ما يجعل مشروعًا متعدد الخدمات قابلًا للتعامل من فريق. فيشغّل مطوّر جديد أمرًا واحدًا فتعمل لديه محليًا التطبيق وقاعدة البيانات والذاكرة المؤقتة وأي خدمات Python بالنسخ نفسها كالإنتاج، بدل قضاء يوم أول في تثبيت الأشياء.
متى لا نستخدم Docker
على استضافة cPanel المشتركة التي لا تدعم الحاويات. وتلك حصة كبيرة من استضافة الشركات الصغيرة في الخليج، ولهذا يُطلق هذا الموقع كملفات عادية مع مثبّت موجّه لا كصورة.
ولموقع ثابت صغير، حيث تكون الحاوية آلات حول شيء لا يحتاج أيًا منها.
ما الذي نبنيه بـ Docker
نشر قابل لإعادة الإنتاج
الصورة نفسها عبر التطوير والاختبار والإنتاج، فما اختُبر هو بالضبط ما يعمل. والتراجع عودة إلى الصورة السابقة، ما يحوّل نشرًا سيئًا إلى مشكلة ثلاثين ثانية.
أنظمة متعددة الخدمات
تطبيق Laravel وخدمة ذكاء اصطناعي بـ Python وPostgres وRedis تعمل معًا ومعرَّفة في ملف واحد، فيشغّل مطوّر جديد النظام كله محليًا في دقائق لا في يوم.
خطوط تكامل مستمر
اختبارات تعمل في الصورة نفسها التي ستُطلق، فيعني بناء ناجح فعلًا أن النسخة المنشورة تعمل لا أنها عملت على إعداد مشغّل CI بعينه.
عزل اعتمادية قديمة
مكتبة أو نسخة PHP قديمة لا يزال مكوّن حرج للعمل يحتاجها، محتواة فلا تستطيع إملاء النسخ التي يعمل عليها كل شيء آخر. ويشتري هذا سنوات من متسع النفس في نظام لا يمكن إعادة كتابته بعد.
بيئات محلية تطابق الإنتاج
أمر واحد يشغّل التطبيق وقاعدة البيانات والذاكرة المؤقتة وأي خدمات مساندة بالنسخ نفسها التي يشغّلها الخادم. فيصبح مطوّر جديد منتجًا في اليوم الأول بدل قضائه في تثبيت الاعتماديات.
كيف نطلق مشاريع Docker
بناء متعدد المراحل فتحتوي صورة الإنتاج التطبيق لا سلسلة الأدوات التي بنته — أصغر نقلًا وأصغر سطحًا للتأمين.
ولا تعمل أبدًا كمستخدم جذر، والأسرار تُحقن في زمن التشغيل لا تُدمج في الصورة، لأن الصورة ملف يُنسخ هنا وهناك.
ما تكلّفك Docker
هو طبقة أخرى تُفهَم، وفريق لم يستخدمه قط سيجد الشهر الأول أبطأ.
ولا يعمل على الاستضافة المشتركة، ما يعني لكثير من العملاء هنا أن الاختيار يُتخذ نيابةً عنا.
حجم الصورة يستحق الانتباه. فصورة مبنية بإهمال قد تكون غيغابايت حيث تكون المدروسة ثمانين ميغابايت، وذلك الفارق يظهر كنشر بطيء وسطح أكبر يبقى مرقَّعًا. والبناء متعدد المراحل يصلحه ويستغرق ساعة لإعداده بشكل سليم.
أسئلة تُطرح علينا عن Docker
فقط إن كان يُنشر في مكان يدعم الحاويات. فعلى استضافة cPanel المشتركة ليس خيارًا وليس خسارة. وعلى خادم افتراضي أو منصة سحابية يستحق لأجل اتساق النشر وحده.
لا، ومن يقول غير ذلك يخلط بينه وبين شيء آخر. فهو يجعل النشر موثوقًا والتراجع فوريًا. وتلك تساوي كثيرًا؛ أما السرعة الخام فليست ما يغيّره.
فقط إن كانت خادمًا افتراضيًا أو منصة سحابية أو خدمة حاويات. فاستضافة cPanel المشتركة لا تستطيع تشغيل الحاويات. وإن كنت هناك وكنت راضيًا، فـ Docker ببساطة ليس جزءًا من الحديث ولا شيء يُفقد.
هو حد لا ضمان أمني. ونشغّل الحاويات بمستخدم غير جذر، ونُبقي الصور الأساسية محدَّثة، ونحقن الأسرار في زمن التشغيل بدل دمجها في صورة — لأن الصورة ملف يُنسخ إلى أماكن لم تخطط لها.
يبني الخط صورة، ويشغّل الاختبارات داخلها، وإن نجحت يسحب الخادم تلك الصورة بعينها ويتحول إليها. فلا يُبنى شيء على خادم الإنتاج، ويصبح النشر تنزيلًا وإعادة تشغيل لا سلسلة خطوات قد تنجح نصفًا.
تعود إلى الصورة السابقة، وذلك يستغرق ثوانٍ. وتلك الفائدة العملية التي يستهين بها الناس — فمعرفة إمكان التراجع عن إصدار سيئ في نصف دقيقة تغيّر ثقة الفريق في الإطلاق، وهي أثمن من معظم الخصائص المرفقة معها.
لا يزال يغطي كلفته، لأن القيمة في قابلية إعادة الإنتاج لا في المقياس. فخادم واحد يشغّل حاويات يمنحك النشر نفسه في كل مرة وتراجعًا يستغرق ثوانٍ. وإن كان الخادم استضافة cPanel مشتركة فالسؤال لاغٍ — إذ لا تتوفر الحاويات هناك ولا شيء يُفقد.