المواضيع في السلسلة:
- مقدمة حول دوكر Docker (الموضوع الحالي)
- البداية مع دوكر Docker
- مشاركة المجلدات في دوكر Docker
- بناء ال Docker Images
- تشغيل قواعد البيانات في دوكر Database in Docker
- تشغيل البرامج باستخدام ال Docker Compose
يعتبر مشروع دوكر Docker من المشاريع الإبداعية والتي تغير وتسهل طريقة التعامل مع البرمجيات سواءً من ناحية تنزيل Installing هذه البرمجيات، وطريقة نشرها للمستخدمين Deployment وايضاً اثناء التطوير والاختبارات Building للمطورين.
ولأن دوكر Docker يعتبر أحد المشاريع التي تستخدم مفهوم ال Containers وال Images، وأيضاً هناك غيره من المشاريع يستخدم نفس المفاهيم مثل Rkt، فمن المهم أن تكون المقالة الأولى هو عن ماهية هذه المفاهيم (Containers & Images) وما هي أهميتها، وما الدور الذي جعلت المشاريع التي تستخدمها مثل Docker or Rkt من انجح المشاريع حالياً. وسوف نناقش ما يلي:
- لماذا نحتاج الى طريقة جديدة في التعامل مع البرمجيات
- الفرق بين ال Container وال Virtual Machine
- ما هو ال Container وال Images
- ما هو Docker
لماذا نحتاج لطريقة جديدة في التعامل مع البرمجيات؟
لكي نفهم ال Containers والحوجة لها وما الذي اضافته لنا، فسوف نقوم بعمل مقارنة بين الأسلوب القديم عندما نعمل على البرمجيات من أكتر من منظور:
- عند تحميل البرامج – كمستخدم او شخص يريد تحميل أدوات لجهازه
- أثناء البرمجة والتطوير ونشر البرمجيات على السيرفر –وكيف يتم توحيد بيئة التطوير والاختبارات وتسهيل عملية نشر البرمجيات
وسنبدأ بأول نقطة وهي في العمل على البرمجيات: ولنفرض أنك اردت تحميل أي برنامج لكي تستخدمه على جهازك، وليكن مثلاً MySQL أو RabbitMQ أو برنامج اخر، فسوف تجد أن هناك خطوات عليك القيام بها:
- البحث Finding: عن مكان لتحميل البرنامج، سواءً من موقعه الًاصلي، او من مواقع أخرى
- التنزيل Downloading: فتح صفحة التحميل وقراءتها بتركيز لتحميل البرنامج المطلوب، على حسب نظام التشغيل، وهل هو 32bit/64bit والتأكد من تحميل النسخة الصحيحة
- التنصيب Installing: قرائه صفحة الاعتماديات وهل هناك متطلبات لتحميل برامج وأدوات أخرى مطلوبة، ووضع متغيرات في النظام Environment Variables يحتاجها البرنامج في عمله
- التشغيل Running: تشغيل البرنامج بشكل صحيح والقدرة على إيقافه وتشغيله متى ما اردت.
الصورة التالية تبين كل هذه الخطوات سوف تقوم بها حتى تقوم بتحميل البرنامج ومن ثم تشغيله لأول مرة:
وهذه الخطوات ليست بالسهلة وقد تخطئ في أحد الخطوات ولن تستطيع اكمال تنصيب او تشغيل البرنامج بشكل صحيح، وقد تلغى فكرة استخدام هذا البرنامج من الأساس وتبدأ في البحث عن بديل بسبب هذه المشكلة، ففي كل خطوة قد تجد العديد من المشاكل، على سبيل المثال:
البحث Searching:
- مكان البرنامج Where: وهل سيتم تحميله ال App Store مثلاً إذا كان يتواجد في نظام التشغيل، أم قد يكون نظام التشغيل به Package Manager كما في لينوكس وتستطيع تحميل البرنامج مباشرة، ولكن احياناً تكون بعض البرامج قديمة حتى في ال Package Manager ولا يوجد بها التحديث الأخير، بالإضافة الى أنه قد تجد برنامج معين في ال package manager في توزيعه لينوكس ما ولن تجده على توزيعه أخرى مثلاً. في نظام ويندوز او ماك قد تجد في الغالب أنك مضطراً لتحميل البرنامج من مواقع Standalone website بواسطة الموقع الأصلي أم مواقع أخرى توفر البرنامج
- معلومات عن البرنامج Stats & Metadata: قبل تحميلك للبرنامج قد تحتاج بعض المعلومات لأخذ القرار هل تريد تنزيله ام لا، وقد لا يتوفر في مكان التحميل أي معلومات إحصائية عن عدد التحميلات واي معلومات أخرى عن البرنامج، مثلاً عدد المشاكل للمستخدمين وغيرها، أخر تحديث للبرنامج. وقد تجد بعض المواقع توفر هذه المعلومات والبعض الاخر لا يوفرها او يوفرها بطريقة مختلفة.
- الثقة Trust: قد تبحث عن البرنامج من خلال محرك البحث، ومن ثم تصل الى موقع ما يوفر خاصية التحميل، لكن هل هو موقع موثوق، او موقع مزيف به برمجيات خبيثة ملغمة؟ وهل الموقع يوفر حماية عند تنزيل المشروع باستخدام HTTPS؟ بالإضافة الى انه أحياناً هل الموقع يعمل دائماً Availability ام احياناً به مشاكل ولا أستطيع تحميل البرنامج، وغيرها من المشاكل اثناء هذه المرحلة.
التحميل Installing:
- نظام التشغيل Operation System: هل سيعمل على نظام التشغيل الحالي، هل هو Cross-Platform وسوف يعمل على هذه النسخة المعينة بالضبط version/build من نظام التشغيل، هل سيعمل على هذه ال CPU التي اعمل بها والمعمارية التي يعمل بها Architecture.
- ماهية البرنامج Format: هل سيأتي السورس كود فقط واقوم ببنائه وتشغيله، أو يأتي على شكل executable يعمل مباشرة، أم يأتي به الملف التنفيذي مع كامل المكتبات المطلوبة به في ملف مضغوط Zip؟ أو على شكل Setup به كامل الملفات، وهل سيأتي معه ال Runtime المطلوبة مثل ال JRE أو .NET ام لا.
- طريقة التحديث Updates: كيف ستكون وبأي الية وهل سيتم مسح القديم كلياً وإعادة تنصيبه، وهل من خلال برنامج اخر أم ما هي التفاصيل لذلك.
التشغيل Running:
- التوثيق للبرنامج Documentation: وهل هناك توثيق محدث بحيث اتبع الخطوات فيه ام احتاج للبحث في الانترنت عن كيفية تشغيله.
- المسارات Path: هل احتاج لوضع متغيرات في النظام Environment Variables يحتاجها البرنامج في عمله أم يقوم بها اثناء التنزيل
- الاعتماديات Dependencies: هل سيقوم بتحميلها كاملة او ام أقوم بتحميلها قبل تحميل البرنامج، وهل تحتاج هذه الاعتماديات الى اعتماديات اخرى
- كيفية التشغيل والايقاف Service Registration: هل من خلال الواجهة ام احتاج اغلق البرنامج، هل تحتاج لوضعه ك Service لكي يعمل مباشرة بعد إعادة التشغيل أو تريد إيقافه وتشغيله مجددا
- هل هناك تعارض مع البرامج الأخرى: إذا كان البرنامج سوف يفتح بورت معين Port أو يحتاج وصول لملفات معينة فيجب التأكد من عدم استخدامها بواسطة برمجيات أخرى
- هل التحديثات القادمة سوف تؤثر على البرنامج: مثل تحديثات نظام التشغيل في ال Shared Library التي يستخدمها البرنامج ويعتمد عليها.
لذلك قد تجد أنك تحتاج لساعات عديدة فقط لتنصيب برنامج قبل البدء باستخدامه، مثلاً وجدت قاعدة بيانات Casandra أو مثلاً Elastic Search وغيرها من البرمجيات التي قد تود أن تتعلمها، فقد تمضي ساعات عديدة وتلغى فكرة تعلمها بسبب واحد هو تعقيد مسألة التعامل مع البرمجيات بشكل عام، بدءاً من البحث، التنزيل، والتشغيل.
فهل توجد الية ما بحيث نجعل هذه العملية في منتهى البساطة، وتكون موحدة وتعمل في أي مكان، وكل ما في الأمر أقوم بتحميل البرنامج من مكان موثوق بسهولة، وبأمر واحد يعمل بكافة الاعتمادية المطلوبة ويكون البرنامج معزول عن بقية البرامج الأخرى، ويتم تشغيله بسرعة وايقافه بسرعة وتشغيل أكثر من نسخة بسهولة ايضاً؟ مرحباً بك في ال Containers & Images – ودوكر 🙂
ملاحظة: كثيراً من المواضيع عندما تتحدث عن ال Docker & Containers فمباشرة تبدأ بالحديث عن الفرق بين ال Containers وال Virtual Machines وبالرغم من أن هناك فروق وسوف نتحدث عنها ايضاً، لكن البداية بهذا الشكل قد يعطي الانطباع بأن ال Docker وال Containers هي بديل لل Virtual Machines بحيث تكون Virtualization من نوع آخر، وبالرغم من أن هذا صحيح وأنه يمكن ان يكون بديل لل Virtualization الا ان ال Containers بشكل عام ليست عن ال Virtualization وانما هي لتسهيل التعامل مع البرمجيات (مثلاً يمكنك اختصارها بأنها لل Software Delivery أو لل Running Software) بدءاً من البحث، التحميل، التنزيل، التشغيل.
بهذه المنظور سوف يسهل عليك العمل على ال Containers والدوكر وسوف تفهمها بالطريقة الصحيحة، ولن تتفاجأ فيما بعد مثلاً بأن هناك بعض البرمجيات او ال Containers سوف تعمل على ال VM بسبب معين سوف نتحدث عنه فيما بعد (مثلاً تشغيل ال Linux Containers بداخل الويندوز، فهذا يتطلب تشغيل Linux VM ومن ثم تشغيل ال Container بها، ولكن الامر هذا سيتم في ثواني معدودة وبشكل Abstracted بحيث لا تدري عنه ماذا يحصل داخلياً) لكن الفكرة هو النظر لدوكر على انه Build, Ship, Delivery وليس بديل لل Virtualization.
مثال:
سوف نقوم الان بتنصيب برنامج بالطريقة السابقة التي كنا نتعامل معها طوال السنوات السابقة، ومن ثم نجرب الطريقة الحديثة ولنرى كيف أصبحت العملية في منتهى البساطة بها، ويمكنك ان تقرا الان بدون تجربة في هذا المثال، لأن الفكرة هو اعطائك نظرة وفهم لما يحدث، وسوف نتناول فيما بعد تنصيب الدوكر خطوة بخطوة، ولكن لنركز على ال Big Picture الآن.
سوف نقوم بتنزيل MongoDB بالطريقة اليدوية، وسوف نبدأ بالبحث في Google عن MonogoDB وسوف تجد خرجت الصفحة الرئيسية، وبعدها انتقل لصفحة التنزيل، وهناك سوف أجد عدة خيارات سوف اختار منها ال Community Server، واختار نسخة نظام التشغيل الذي اعمل عليه، وايضاً تحدد هل تريد تحميله مضغوط Zip أو على شكل Installer بالامتداد msi، وسوف تجد ايضاً رابط لدليل وخطوات التحميل.
بعدها سيتم التحميل بامتداد msi، واثناء ذلك يمكن فتح دليل التنصيب في الرابط وسوف نجد ان ال Installer يقوم بالعديد من الخطوات، لكن مثلاً تحتاج الى وضع البرنامج في متغيرات النظام ان اردت تشغيله مباشرة من أي مسار على سبيل المثال.
بعد ان يتم التحميل يمكن الضغط على التالي Next-Next ليتم تنصيب البرنامج بالإعدادات الافتراضية وبعدها لن تجد شيئاً، وسوف تحتاج ان ترجع للدليل لكي تعرف كيف سيتم تشغيل ال MongoDB server:
سوف تجد في الصورة مكان تواجد البيانات الافتراضي هو /data/db وهذا المسار عموماً بطريقة اللينوكس بينما في الويندوز نحتاج لتحديد البارتيشن الذي يتواجد فيه اولاً، وسوف نقوم بفتح مسار ال MongoDB من سطر الأوامر وتنفيذ أمر التشغيل:
سوف تجد خطأ في المسار، وعليك أن تقوم بإنشائه وسوف ننشئ المجلد على القرص C، وبعدها نقوم بتشغيله مجددا وسوف يعمل الان، وسوف تجد رسالة بأن ينتظر الاتصال على البورت 27017:
سوف نفتح سطر أوامر اخر لكي نتصل بهذا السيرفر الذي ينتظر أي كلاينت يتصل به، وسوف نكتب الامر mongo.exe لتشغيل الكلاينت، ونكتب أي أمر مثلاً لمشاهدة قواعد البيانات show dbs:
سوف نقوم الان بنفس التجربة ولكن بمفهوم ال Containers/Images ولنرى الفرق الكبير بينهم، فسوف نبدأ بالبحث عن mongodb docker في محرك البحث وسوف يظهر اول نتيجة في ال docker hub:
لتحميل ال MongoDB من ال Docker Hub سوف نقوم بعمل ال Pull (وهو أمر التحميل) وسيتم تحميل ما يعرف بال Image (ويمكن تصورها على أنها البرنامج) وهي فعلياً تحتوي على البرنامج مع كل الاعتماديات الأخرى. وسوف تلاحظ وجود ال Official Repository في أعلى الصفحة للدلالة على ان هذا البرنامج (ال Repository) من مصدره الرسمي.
الصورة التالية تبين طريقة التحميل وتم تحديد اسم البرنامج، بالإضافة الى تحديد windowsservercore وذلك لأني أعمل على Windows وأريد تشغيل البرنامج) بداخل نظام التشغيل مباشرة وبالتالي احتاج الى ان استخدم نسخة الويندوز وليس اللينوكس، وبالرغم من انه يمكن تشغيل نسخة اللينوكس على الويندوز بأي حالة ولكن هذا يستوجب اخبار دوكر واعداده ليشغل نمط ال Linux Container، سوف نتحدث عن هذه النقطة بالتفصيل فيما بعد، الذي يهم الان هو تحميل ال Image بهذا الأمر: docker pull mongo:windowsservercore
سوف يأخذ تحميل البرنامج بعضاً من الوقت نظراً لأن بها كل الاعتماديات بالإضافة الى ان ال Windows Images عموماً أكبر جحماً (وكما ذكرنا يمكن أن نستخدم ال MongoDB Linux Image بداخل الويندوز بسهولة وسيتم توضيحها فيما بعد)، والآن بعد أن ينتهي تحميل ال Image نكون أنهينا الخطوة الثانية وهي التحميل، ولننتقل الى الخطوة الثالثة وهي تنصيب البرنامج، وفي عالم الدوكر يمكن ان نتخيل عملية التنصيب هي ال Container او وضع ال Image بداخل ال Container، بمعنى ان ال Container هو البرنامج بعد تنزيله والذي يكون جاهزاً للتشغيل، والخطوة الأخيرة هي تشغيل ال Container، وسوف نرى كيف يمكن ان نشغل ال MongoDB Image الان في ال Container.
الصورة التالية توضح الخطوات لتحميل البرامج باستخدام ال Containers/Images وسوف نجد أنها أصبحت بسيطة للغاية، والنقطة الأهم موحدة لجميع البرامج:
حتى هذه اللحظة فقد قسمنا هذه العملية الى خطوات لأخذ تصور عما يحدث، ولكن الأمر الخاص بالتشغيل سوف يقوم بكل هذه العمليات في آن واحد، بمعنى هو أمر واحد سوف يقوم بتحميل ال Image وتشغيلها في Container مباشرة (سوف يقوم بتحميل ال Image في حال لم تكن موجودة ويقوم داخلياً بعمل Docker Pull، وإذا كانت موجودة فيتم استخدامها) وهو كما يلي: docker run:mongo:windowsservercore
سوف تجد الأن نفس المخرج السابق بالضبط عندما قمنا بتشغيل وتنصيب البرنامج بالطريقة التقليدية ونفس البورت ايضاً.
الان سوف نجد أن البرنامج يعمل بداخل ال Container (وهذا يسمي بال Attached to Container) ولذلك سوف نفتح سطر أوامر أخر، وسوف نقوم بالدخول على نفس ال Container التي تعمل من خلال هذا الأمر: docker exec –it 27 mongo وهي ستقوم بتشغيل ال mongo client بداخل نفس ال Container السابق، ومن ثم إعطاء الأمر show dbs وسوف تجد نفس المخرج ايضاً، وسوف نأتي فيما بعد لوصف الأوامر وشرحها بالتفصيل، ولكن ال 5c في الأمر هو رقم ال container الذي يعمل وتم استخراجه من خلال الأمر docker ps، المهم الان سوف ندخل الى داخل ال container التي يعمل بها السيرفر، وقمنا بتشغيل برنامج الكلاينت mongo بها، وسوف نضع نفس الأمر الان لعرض قاعدة البيانات:
وسوف نجد نفس النتيجة السابقة عندما قمنا بالطريقة التقليدية، الفرق الان انه الكلاينت والسيرفر يعملان على بداخل ال container، وليس بداخل process عادية في نظام التشغيل. وفي الحقيقة سوف نجد أن هذه ال container هي عبارة عن process ايضاً في نظام التشغيل، ولكنها معزولة isolated بحيث يكون لديها نظام الملفات الخاص بها، الشبكات الخاصة بها، قائمة العمليات process الخاصة بها، وكل شيء من داخل ال container سوف يكون كأنه يعمل مفصول تماماً، ولكن من الخارج فهي مجرد process أخرى.
ولكي ناكد هذا المفهوم سوف ندخل الى ال container التي تعمل الان، بنفس الطريقة التي اشغلنا بها برنامج ال Mongo client ولكن هذه المرة لكي نشغل سطر الأوامر فيها، ونرى بعض الأمور، وسنقوم بتنفيذ الأمر: docker exec –it 5c cmd ، وبعدها قمنا بالدخول الى ال PowerShell كما يلي، وكان بالإمكان ان ندخل اليه مباشرة طالما هو برنامج على ذلك ال container:
الان سنقوم بعرض كافة العمليات التي تعمل على ال container من خلال Get-Process كما يلي:
وكما تلاحظ فان ال Mongo server وال Mongo Client يعملان الان بداخل ال container وحتى ال PowerShell الذي قمنا بتشغيله فهو يعمل الان ايضاً. بقية العمليات هي services خاصة بالويندوز. النقطة المهمة هنا هو ان العمليات معزولة ولن ترى عمليات process من نظام التشغيل الأساسي، وانما فقط العمليات بداخل ذلك ال Container.
من النظام الأساسي ال Host Machine سوف تجد في قائمة العمليات كافة العمليات التي تعمل على النظام الأساسي، بالإضافة الى كافة العمليات التي تعمل ايضاً على ال Container سوف تجدها تعمل كأنها Process عادية، ولكنها كلها تشترك في ال Job ID وجميعهم يكون بنفس الرقم. وهذا يعني أن البرامج التي يتم تشغيلها في ال Container سوف تعمل على النظام الأساسي وكأنه تم تشغيلها مباشرة بفتحها مباشرة من ال host machine.
هكذا سوف نرى ان العملية أصبحت أسهل سواءً في التحميل، التنصيب، التشغيل، بالإضافة الى وجود كمية من البرمجيات توجد على شكل Images قابلة للتشغيل ك Containers سواءً في ال Docker Hub (المستودع الأساسي لل Docker Images) أو غيرها من المواقع التي توفر هذه الخدمة.
اذاً يمكن القول بأن ال Image هي القالب Read only Template المكونة من عدة ملفات بشكل Layered مثل ملفات نظام التشغيل، ملفات للفريم وورك مثلاً NodeJS وغيرها من البرمجيات.
ال Container هو البرنامج المعزول الذي يتم انشائه من ال Image ويمكن أن يكون قيد العمل، او متوقف ويمكن أن يتم نقله ايضاً أو حذفه. وهذه العملية سريعة للغاية فيمكن انشاء وتشغيل وإيقاف ال Containers بسهولة.
ملاحظة: يعتبر ال Docker Hub أحد المواقع لتسجيل ال Docker Images بسهولة بحيث يمكن تحميلها فيما بعد، بمعنى مستودع للبرامج Repositories (مثل متجر تطبيقات Google Play store مثلاً) التي تحتاجها وهو المستودع الرئيسي في مشروع الدوكر. وبه العديد من البرمجيات مثل MySQL, WordPress, Ubuntu وغيرها، وتستطيع تحميلها pull بسهولة سواءً من جهازك الشخصي، أو من داخل أي سيرفر، ويمكنك بعد ذلك تشغيل ال image بداخل ال container.
وحتى يمكن لك أيضاً أن تعدل على ال container بأي إضافات تريدها، وبعد ترفع ال image المعدلة وبالتالي تكون image جديدة بها التعديلات التي قمت بإضافتها ويمكن لمن يرغب ان يقوم بتحميله إذا قمت برفعها بشكل عام ومتاح للجميع، وانت فقط من تستطيع رفع التحديثات على تلك ال repository. أما في حالة ال repositories الخاصة فيمكن لمن لديه صلاحية فقط بتحميلها وايضاً رفع التحديثات بها وهي مناسبة لكافة أعمالك ومشاريعك الخاصة او أي مشاريع للشركات.
ويمكن أيضاً بناء Private Registries بداخل الشركات مثل ال Docker Hub بحيث يكون مستودع لكل برمجيات الشركة داخلياً بدلاً من رفعه على أي Online Registry.
ايضاً كما نلاحظ في الصورة سوف نجد بجانب كل برنامج عدد التحميلات والمفضلة وتستطيع الذهاب لصفحة التفاصيل وسوف تجد كيفية التشغيل لهذا البرنامج، بالإضافة الى ال Images الرسمية ستجد محدده بهذا الاسم، وايضاً سوف تجد نتيجة فحص الأنتي فايروس لكل من ال Images المرفوعة على Docker Hub. وأيضاً سوف تجد رابط ال Docker Store وهو لل Images المدفوعة غير المجانية حتى تقوم بشراء الرخصة والحصول على الترخيص.
ولن تقلق من ناحية نظام التشغيل مجدداً، فاذا كنت تعمل في نظام التشغيل ويندوز فتستطيع تشغيل ال Windows Container وايضاً تستطيع تشغيل ال Linux Container كما سيأتي بعد ذلك. وايضاً لن تقلق من ناحية شكل وFormat البرنامج لأنه سيأتي بطريقة موحدة وهي ال Image. وطريقة مسح وتحديث ال Images بسيطة فكل ما عليك بتنزيل الإصدار الجديد وتشغيلها وإيقاف القديمة، وهكذا سنجد انها حلت اغلب أو كل المشاكل التي كنا نواجها بالطريقة التقليدية سابقاً.
أثناء البرمجة والتطوير: فهناك العديد من الفوائد للمطورين في دوكر:
- تسريع دخول المطورين Onboarding: سوف نجد أنه بسهولة يمكن عمل ال Development Environment فمثلاً غالب المشاريع تحتوي على العديد من الأجزاء مثل Database و Queue Server و Caching Server و Indexing Server وستجد من الصعوبة تنصيب هذه الأجزاء وقد يقع أي مطور في مشكلة التنصيب هذه، لذلك يتوفر ال Images وتشغيلها فمن الممكن توفير الكثير من الوقت والجهد للمطورين، واذا كان المشروع يعمل بفكرة ال Microservices فمن الممكن ان تكون هناك Images أخرى مثلاً لل Identity وواحدة لل Orders مثلاً وهكذا سوف تجد المطور يعمل ويركز على المهام التي لديه ويستخدم المكونات مباشرة كما هي والتي أتت من فرق أخرى.
- لا تصادم بين النسخ Software Conflicts: فمن الممكن ان يعمل السيرفر على نسخة معينة من الفريم وورك ويكون به أكثر من برنامج يعتمد عليه، ولن تستطيع تحديثه حتى لا تقع البرامج الأخرى التي تعمل في مشاكل، ولكن بتطبيق فكرة ال Containers فسوف تجد أن كل برنامج يحتوي على ال Framework التي يحتاجها بغض النظر عما يتواجد في الجهاز الأساسي، وهذا يعني انه لن تكون هناك تصادم بين البرمجيات مجدداً.
- عدم توافق ال Environment: مثلاً لو كان لديك بيئة تطوير Development Environment وبيئة للاختبار والتأكد من المشروع قبل رفعه على السيرفر النهائي Staging Servers ومن ثم السيرفر النهائي Production Server، فسوف تجد بدون دوكر فمن الصعوبة وضع كل البرمجيات والمتطلبات على هذه السيرفرات، وقد تحدث مشاكل بسبب اختلاف نوع النظام او البرامج الموجودة عليه، لكن مع دوكر ستجد من السهولة توحيد تلك الأجهزة Consistency وتستطيع نقل ال Images وتشغيلها على هذه الأجهزة وسيعمل ال containers كما هو عليها جميعاً.
- نشر المشاريع بشكل أسرع Ship Software Faster: يمكن الاستفادة من أدوات الأتمتة وبناء Pipeline كامل بمجرد عمل push للسورس كود، فسيتم مباشرة بناء الكود كاملاً، ومن ثم في حال النجاح يتم تشغيل كافة الاختبارات وبعدها في حال النجاح يتم رفع ال images على ال Docker hub (أو على أحد ال Registries) واخيراً تحميلها من السيرفر وعمل Update حتى يعمل التحديث في السيرفر، وكل هذا بمجرد ضغطة زر واحدة فقط Automated Workflow. وهذا الأتمتة مهمة جداً للعديد من المشاريع، خصوصاً في الشركات الناشئة والتي تعمل بمفهوم ال Continues Update والتي تضيف وتحسن الخصائص بشكل مستمر، فوجود أتمته كاملة لنشر البرمجيات ورفعها امر مهم وسوف يحفظ الكثير من الوقت الضائع في عملية رفع التحديثات يدوياً الى السيرفر (أو السيرفرات في حالة كان البرنامج يعمل على أكثر من سيرفر).
ما الفرق بين ال Containers وال Virtual Machines؟
وهذا يعد من أكثر من التساؤلات في دوكر وال Containers عموماً، حيث كما ذكرنا سابقاً فأن ال Containers توفر عزل من ناحية نظام الملفات، الشبكات، قائمة العمليات وبداخل كل Container سوف تجد كأنك تعمل على جهاز منفصل، وهي نفس فكرة ال Virtual Machine والتي أيضاً توفر عزل كامل بين ال VM المختلفة وكأنها تعمل على ذلك الجهاز فقط.
لكن هناك فرق بينهم، حيث ال VM يجب أن يكون هناك نظام تشغيل لكل VM وبعدها يتم تنصيب البرمجيات على ذلك النظام، بينما في ال Containers فسوف نجد أنه بالإمكان ان يعمل مباشرة على ال Host، وهذا اوفر للموارد وأسرع في العمل بكل تأكيد بالإضافة الى أنه يحفظ وقت مدير النظام بدلاً من إدارة 5 برامج تعمل على خمسة أنظمة تشغيل في ال 5 VMs ويقوم بتحديث الأنظمة باستمرار، فالان سوف يعمل على نظام تشغيل واحد يحدثه باستمرار وكافة البرمجيات تعمل في ال containers ومعزولة عن الأخرى.
لكن بأي حال ال Containers هو ليس بديلاً عن ال VMs وقد تجد في كثيراً من الأحيان ان تستأجر VMs وتقوم بتشغيل عليه مجموعة من ال Containers بدلاً من شراء سيرفر مخصص Physical Servers وتحفظ الموارد وتقلل التكلفة. ومن ثم تستخدم ال Docker فيها لكي تستفيد من ال Containers.
ما هو دوكر Docker؟
شركة دوكر Docker Inc. من سان فرانسيسكو بدئت في السابق بتطوير Platform as Service PaaS اسمها dotCloud لتقديم خدمات للمطورين على ال Amazon web services، وكانت تستخدم داخلياً مفهوم ال Containers للتشغيل بالإضافة الى نشر Deployment المشروع، وبالرغم من أنه المشروع الأساسي كان dotCloud فتم تطوير المشروع الداخلي واعطي الاسم Docker ونشر كمشروع مستقل في 2013.
وبهذا القرار الصائب، أصبحت شركة دوكر الأولى في تقديم ال Containers وحصلت على استثمارات عالية للمضي للأمام، وبيع مشروع ال dotCloud وركزت الشركة على ال Containers وخلال مسيرتها استحوذت على عدة مشاريع containers لشركات ناشئة أخرى، وهذا ما جعلها تتفرد في الساحة.
وشركة دوكر Docker Inc. هي ليست المالكة لمشروع دوكر Docker Project الان، فهو مشروع مفتوح المصدر برخصة Apache وهذا يعني أي شخص بإمكانه تحميل الكود المصدر وتعديله واستخدامه طالما لم يخرق شروط هذه الرخصة. وهناك الكثير من الاسهامات بواسطة كبرى الشركات مثل IBM, RedHat وغيرها.
ويهدف مشروع الدوكر Docker Project لتقديم كافة الأدوات اللازمة لبناء Develop ونشر Ship/Deploy البرمجيات بشكل أفضل عما كان عليه في السابق. وهذا يعني انه هناك العديد من الأدوات والبرامج بداخل مشروع الدوكر وكل منها يختص بجزئية معينة، وأهمها هو ال Docker Engine وهو الذي يقوم بتشغيل ال Containers وبقية الأدوات تكون مساعدة لل Engine في عمله.
وسوف نجد أن مشروع الدوكر يتكون من العديد من الأدوات مثل ال Docker Engine, Docker Compose, Docker Swarm وغيرها والتي سوف يتم تناولها في مواضيع لاحقة بإذن الله.
اخيراً لأن مفهوم ال Images يعتبر أحد العوامل من نجاح ال Containers Technology فقد اجتمعت العديد من الشركات المهتمة لكي تضع معيار ومقياس standards لبنية هذه ال Image وال Runtime Environment وتم نشر ال Specification لهم. وظهرت حركة Open Container Initiative لوضع المعايير لل Containers بشكل عام، سواءً في شكل هذه ال containers وتشغيلها.
وبهذا المقياس فيمكن أن تقوم بتشغيل أي Image متوافقة مع ال OCI في أي Runtime Engine متوافق مع ال OCI وهذا ما يجعل مثلاً Docker Image تشتغل على Rkt Engine على سبيل المثال..
المقالة التالية سوف تتحدث عن تنصيب دوكر، سواءً في ويندوز ولينوكس.
جزاكم الله تعالى كل خير مقالة جميلة جعلها الله فى ميزان حسناتكم فى نشر العلم
شرح وافي جزاك الله خير
بصراحه شرح رائع
جزاكم الله كل خير
شكرا على الشرح الوافي و السهل
شرح ممتاز وموضوع غاية في الأهمية،
أشكركم جزيلا على هذا المحتوى الجيد.
بارك الله في مجهوداتكم، طريقة جد مفصلة لفهم تقنية docker Container
شكرا
شرح شامل ومتكامل، وأسلوب الطرح منطقي.
نفع الباري بكم
الف شكر على الشرح
سؤال من فضلك؟ كيف اضع جهازي بكل تطبيقاته كامل في حاويه بحيث يستطيع اي مستخدم جديد في الفريق كانه يستخدم جهازي