/Docker Containers

Docker Containers

“لقد كانت تعمل على جهازي !!”

إن كنت Developer أو Tester أو Operator فإنك بالتأكيد تسمع هذه المقولة أو تقولها كثيرا بشكل يومي أو شبه يومي … لماذا ؟
دعنا نتحدث قليلا عن أحد المشاكل التي قد تواجهك كـ Developers او Sysadmins.

دعنا نفترض انه لدينا web app ..

فقد أُثبت أن عدد المشاكل اللي تواجه فريق العمل تساوي حاصل ضرب M x N حيث M يعبرعن الـ production و N يعبر عن عدد أعضاء الفريق.

 انت أيضاً كـ Developer كم من الوقت تقضيه فقط في إعداد جهازك ؟ حسناً وكـ Tester ؟

باختصار تنوعت مشاكلنا ما بين :

1- مشاكل الإعتماديات Dependency :

مع كثرتها تجعل بعضها يحتاج إلي تجميع يدوي ، فيظهر التعارض بين بعض الاعتماديات واستحالة عمل احدهم في وجود الأخرى.

بالإضافة لاختلاف الإصدارات بين النسخة التي تم تطوير التطبيق بها والجديدة والتي من الممكن يجعلهم غير متوافقين تماما.

2- مشاكل النقل أو التنصيب أو النشر ، وذلك لأن أي تطبيق يحتاج إلي إعدادات مناسبة :

– بيئة العمل قد تختلف.

– إعدادات النظام.

– إعدادات الخادم.

– إعدادات الامان.

– التحديثات التي قد تسبب عطل للمشروع.

كل هذه مشاكل من الممكن أن تحدث وأكتر ، كانت ولا زالت هي سبب ارق لكل المطورين ومديرين الأنظمه.

لكن دعنا نجرب مثالا حيا شبيها بنفس المشاكل التي تواجهنا هنا :

فمثلا ، مثال نقل البضائع في الميناء والذي يشكل نفس المصفوفة N x M.

و الحل …. استخدام الحاويات Containers وهو وعاء بشكل ومواصفات معينه سهل نقله ويتم وضع البضائع فيه.

في حالتنا هذه أيضا كان الحل لهذا النوع من المشاكل هو استخدام الحاويات أو الـ containers واشهرها Docker وهو عنوان مقالتنا وما نحن بصدد الحديث عنه.

حسنا إذن ما هو الـ Docker ؟

هو عبارة عن بيئة عمل خاصة بالمطورين ومديرين الانظمة تسهل عملية تطوير التطبيق ونقلة وتثبيته في اسرع وقت ممكن ، كما يُمكنك من اختبار وتثبيت التطبيق في العمليات الانتاجيه في اسرع ما يمكن.

فهو يستخدم في إنشاء حاويات (containers)، بحيث أن هذه الحاويات تلعب دورغلاف حاوي للتطبيق، بحيث يصبح قائما بذاته ، مكتفي ذاتيا.

والحاوية هي غلاف يستخدم لعزل مجموعة عمليات عن باقي عمليات النظام في التعامل مع الـ processor و RAM و القراءة والكتابة من ال hard disk و التعامل مع الشبكة… ، وبالتالي يكون في معزل تام عن باقي الـ processes في النظام. نفس فكرة الـ sand-boxing.

من الممكن أن يكون التطبيق عبارة عن حاوية واحده او عدة حاويات تتواصل فيما بينها تحتوي علي كل ما يحتاج اليه المشروع والاعتماديات اللازمه والاعدادات بالاضافة الي التوزيعة المناسبة Fedora,Ubuntu,…..

للتوضيح اكثر ، مثلاً الـ Docker يمكنه عمل :

تطبيق تم تطويره علي Ubuntu وليكن اصدار 14.04  نقوم بتحديد التوزيعة المطلوبة “يقوم هو بإنزالها” ويتم استعمالها كتوزيعه للحاوية.

تطبيق يستعمل وليكن لغة python بإصدار 2.7 فأجعل الـ Docker يثبت لي هذا الاصدار من python.

أيضا لو كان يستعمل Django يتم تثبيته عن طريق pip وهو الـ package manager لـ python.

بالنسبة لقاعدة البيانات وليكن MySQL فاجعله بثبتها لي مباشرة عن طريق package manager.

نفس الشئ بالنسبة لـ Web Server وليكن NginX.

سنتناول الموضوع بشكل عملي واعمق في مقالات قادمة ، ولكن قبل ان ننهي المقال هناك سؤال يطرح نفسه ، هل Docker يقوم بنفس عمل المكينات الوهمية Virtual machines ؟

شاركنا بإجابتك في تعليق 😉