يعمل المطور في العادة على مشاريع مختلفة بعدة لغات، وكل مشروع يحتاج إلى حزم أو متغيرات نظام (Environment Variables) مختلفة عن المشروع الآخر، وأحيانا تستخدم مكتبات أو برامج معينة ضمن مشروعك تعتمد على نسخ مختلفة من نفس الحزمة، إضافة إلى ذلك فقد يواجه المطور صعوبة في إدارة الحزم والبرامج والخدمات التي تعمل في جهازه بسبب كثرتها أو تعدد النسخ التي يحتاجها، بل قد يواجه بعض المشاكل أحيانا عند نقل المشروع من الجهاز المستخدم للتطوير، إلى الجهاز الذي سيعمل عليه البرنامج، أو السيرفر الذي سيقوم بتشغيل هذا البرنامج
وقد لا يعمل البرنامج في البيئة الانتاجية ( Production ) بسبب اختلاف الحزم أو متغيرات النظام بين بيئة الانتاج وبيئة التطوير، وعندها يكون المطور بحاجة لوقت أكبر حتى يكتشف المشكلة ويحدد الحزمة التي يحتاجها أو المتغير الذي يحتاج إلى إعداده في بيئة الانتاج.
بسبب هذه المشاكل وغيرها، يلجأ بعض المطورين إلى تشغيل المشاريع على آلات وهمية (Virtual Machines) يقومون فيها بمحاكاة بيئة الإنتاج، وهذه الطريقة فيها بعض المشاكل أيضا، فأحيانا قد تصعب محاكاة بيئة الإنتاج أو قد يأخذ إعداد البيئة على الجهاز الوهمي وقتا طويلة، إضافة إلى عدم إمكانية عزل الحزم المتعارضة مع بعضها داخل البيئة الوهمية بسهولة، كذلك لا يمكن حل هذه المشكلة باستخدام البيئة الوهمية وتشغيلها على السيرفر واستخدامها في الانتاج لأن الأجهزة الوهمية تستهلك كثيرا من موارد الجهاز، إضافة إلى أن الجهاز الوهمي قد يحتاج إلى وقت طويل أثناء التشغيل
ما هو Docker
دوكر (Docker) هي أداة مُوجَّهةٌ لمُدراءِ الأنظمة والمطورين تستخدم في عمليات بناء ( Build ) وتشغيل البرامج ضمن بيئة معينة عبر تشغيل المشروع بداخل حاويات دوكر ( Docker Containers )، مما يسهل عملية نقل المشروع من جهاز إلى جهاز آخر دون الحاجة لتعديل إعدادات ومتغيرات النظام، أو تنصيب أو تحميل حزم معينة، حيث يتم فقط تنصيب دوكر وتشغيل الحاويات المُعدة مسبقا بإعدادات معينة تسمح بتشغيل التطبيق ضمن هذه الحاويات.
ما هي الحاوية (Container) وما الفرق بينها وبين الآلة الوهمية (VM)
الحاوية (Container) هي عبارة عن مجموعة من الحزم، المعزولة عن الجهاز المحلي الخاص بك (Local Machine) يمكن تشغيل واستخدام البرامج الموجودة داخل الحاوية دون أن تتعارض الحزم الموجودة داخل الحاوية مع الحزم المنصبة بالفعل على جهازك.
لو احتجنا إلى مشروع يجب تشغيله على توزيعة Ubuntu، يمكننا إما استخدام حاوية Ubuntu أو آلة وهمية منصب عليها التوزيعة، لإعداد الآلة الوهمية سنحجز لها مساحة معينة على وحدة التخزين في الجهاز، ومساحة من الذاكرة Ram، ثم سنقوم بتحميل توزيعة Ubuntu كاملة وتثبيتها في الآلة الوهمية لنجرب أو ننشئ المشروع بداخل الآلة الوهمية، وهذا سيأخذ وقتا طويلا جدا، بينما استخدامنا لحاوية Ubuntu فلن يأخذ الكثير من الوقت، لأن Docker لا يقوم بتنصيب التوزيعة كاملة بداخل الحاوية، إنما يقوم بتنصيب الحزم الخاصة بالتوزيعة فقط، ويستخدم النواة (Kernel) الخاصة بنظام التشغيل على جهازك، فهذا سيفيد في تقليل استخدام موارد الجهاز إضافة إلى سرعة التشغيل، فالنواة ستكون مشتركة بين الحاوية ونظام التشغيل الخاص بك، والاختلاف سيكون فقط بالحزم لأنها تعمل بداخل الحاوية بمعزل عن نظام التشغيل.