Your guide to the Docker .... ما هذا؟ ما هو الغرض منه؟ كيف ومتى تستخدمها؟



Your guide to the Docker .... ما هذا؟ ما هو الغرض منه؟ كيف ومتى تستخدمها؟
post

ميدان البرمجة بشكل عام لا يتكون من لغات برمجة فحسب، بل يوجد تقنيات برمجية أخرى عليها ان تساير المبرمج و لغات البرمجة، نخص بمثال لهذا تقنية الـ Git، فهي ليست بالتقنية التي تساعدك على تطوير برمجية إن صح التعبير، لكنها ضرورية بالنسبة لأي مبرمج من أجل الحفاظ على ملفات مشروعه البرمجي و مشاطرته و تنظيمه.
من بين التقنيات الشهيرة الأخرى هي تقنية الـ Docker التي قد يجيد البعض إستخدامها، و قد يسمع بها البعض الآخر لأول مرة، تقنية الـ Docker ليست بالجديدة، لكنها مفيدة جدا لعدة مبرمجين من أجل تطوير برمجيات بكفاءات عالية بغض النظر عن البيئة المستخدمة في تطوير تلك البرمجية.
سنخصص مقالنا اليوم للتحدث عن تقنية الـ Docker و تعريفها لأصدقائنا المبرمجين المتابعين لقسم البرمجة على موقعنا، و سنقوم شرح ماهيتها، و ما الهدف من إستخدام الـ Docker من أساسه، ثم متى و أين و كيف تستخدم الـ Docker.
- أساس المعضلة :
لكن البرنامج يشتغل على جهازي !
كم مرة قلت هذه العبارة حين تقوم بنقل المشروع من جهازك الى جهاز / سيرفر العمل؟ او سمعت أحد يقولها حين يقوم بنقل مشروعه اليه ؟ السبب الحقيقي وراء إشتغال مشاريع برمجية في حاسوب هذا و عدم إشتغالها في حاسوب ذاك عائد بشكل أساسي الى إختلاف الموارد او الحزم (Packages) او الإعتماديات (Dependencies) المكونة للمشروع سواء بعدم وجودها من أساسها او بتنصيب نسخ قديمة او أحدث من الموارد المنصبة مسبقا في المشروع البرمجي، فإن كان كل شيئ شغال في جهازك ثم نقلته الى حاسوب صديقك ( عن طريق الـ Git مثلا ) او قمت برفعه في سيرفر او خادم، فقد لا يشتغل المشروع كما يجب و ذلك عائد لبضعة أسباب أهمها انه لا يستخدم تلك الموارد و الحزم في جهازه، و على مستوى الخادم فربما الخادم لا يدعمها أيضا، فإن كان مشروعك مبني على الـ Php 7 و الخادم لا يدعم سوى Php 5 فحتما لن يشتغل المشروع.
نعلم جيداً ان أي مشروع كبير نسبيا يعتمد بشكل كبير على برمجيات الطرف الثالث و مكتبات و حزم خارجية وُجِب إضافتها في المشروع البرمجي، و إختلافها او إتلافها او عدم تنصيب أساسياتها في أي منصة يؤدي الى تعطل المشروع بالكامل او عدم إشتغاله بكفاءة.

- ما هو الـ Docker ؟
من أجل حل المشكل سالفه، نقوم بتحميل بيئة وهمية بالكامل ( شبيه بالنظام الوهمي ) ثم نقوم بتنصيبها في جهازنا الخاص و نقوم بتهيئة المشروع عليها، بحيث كل الموارد الموجودة في المشروع تبقى في ذلك النظام و لا تتعارض مع نظامنا الذي نشتغل عليه، نقوم بتطوير المشروع في هذا النظام الوهمي حتى النهاية، ثم عند إرادتك تنصيبه لا داعي لنسخ المشروع وحده، بل قم بأخذ النظام الوهمي بالكامل و قم بتنصيبه في الحاسوب النهائي، بذلك ستبقى كل الموارد جاهزة و شغالة و بدون مشاكل. في السابق تمت العملية حرفيا بإستخدام نظام وهمي في الحاسوب، لكن عدة مشاكل قد بزغت أيضا منها ثقل تشغيل النظام و صعوبة التعامل معه في حالة كانت موارد الحاسوب ضعيفة، لذلك تم إبتكار الـ Docker، و هي تقنية خفيفة و بسيطة تساعدك على صناعة البيئة المثالية لتطوير أي مشروع في أي حاسوب و على أي بيئة، تقوم بتهيئتها حسب المشروع الخاص بك، ثم بعد الإنتهاء يمكنك نقلها الى أي منصة أخرى و إستخدامها دون الحاجة الى إعادة تنصيب الموارد الخارجية او فقدان فعالية مشروعك البرمجي.
- لماذا نستخدم الـ Docker ؟
يوجد الكثير من الأسباب لإستخدام الـ Docker لكن يبقى أهمها ضمان توافق مشروعك البرمجي مع السيرفر او الخادم الذي تستضيف عليه مشروعك في النهاية، إذ يحدث أحيانا انك تستضيف مشروعك في خادم قد لا يدعم تقنية محددة او يدعم نسخة قديمة من أحد الحزم المستخدمة في المشروع فيؤدي الى تعطل مشروعك بالكامل، بما ان الـ Docker يخلق بيئة خاصة به، فإن توافق مشروعك مع الخادم أمر مضمون عن طريق الـ Docker.
- نظرة أعمق عن الـ Docker ؟
إن مبدأ الـ Docker بسيط، إذ يتكون مما نسميه بالحاويات او الـ Containers، كل Container هي عبارة عن البيئة المثالية لتطوير أي مشروع برمجي تريد، بعد تنصيب الـ Docker و تشغيله لديك تقوم بصناعة حاوية بخواص محددة، مثلا تقوم بصناعة حاوية بنظام Ubuntu، ثم تقوم بتنصيب مثلا خدام Apache و تنصيب الـ Php و تنصيب الـ Composer و تنصيب Laravel و كل المكتبات و الموارد و الإعتمادات الخارجية التي تريد إستخدامها في مشروعك البرمجي على تلك الحاوية، بعدها يتم خلق ما يسمى بالـ Image او الصورة الخاصة بتلك الحاوية، الآن كل ما عليك فعله هو أخذ تلك الصورة و تنصيبها في أي خادم او حاسوب و إستقبال مشروعك البرمجي عليها دون مشاكل و دون إعادة تنصيب لكل تلك البرمجيات و الأدوات الخارجية سالفة الذكر.
post

- متى يمكننا إستخدام الـ Docker ؟
رغم ان للـ Docker الكثير من الإيجابيات التي تعينك على الحفاظ على توازن مشروعك البرمجي، إلا ان بعض السلبيات فيه تجعل البعض يستغني عنه مثل الخطوات الكثيرة لتهيئة المشروع المتوافق ( بحيث سيتوجب عليك تحميل النظام، تحميل كل الأدوات و الحزم خارجيا ثم تنصيبها ...) و ثانيا الحجم الكبير للـ Docker و الحاويات و الأنظمة فيه مما يجعل مثلا تنصيب حاوية Ubuntu مثلا يستغرق وقتا طويلا. لذلك لا يمكنك فقط إستخدام الـ Docker وقتما تريد فهذا سواء إستخدام له، يمكنك إستخدام الـ Docker في المشاريع الجدية ذات هدف محدد و التي تنوي و فريق عملك إستكمالها إلى الأخير و إستضافتها في الخادم او السيرفر، فتهيئة حاوية أمر صعب نسبيا و يحتاج الى الوقت و الجهد و صناعة صورة منها كذلك و تمريرها و تصديرها ثم إعادة رفعها الى الخادم أمر مرهق بالرغم من المزايا التي يجلبها الـ Docker، فحاول إستخدامه بعقلانية و في المشاريع الحازمة فقط و ليس مشاريع تعلم طباعة Hello World.