كمديري انظمة, مطورين , مبرمجين أو حتى مستخدم عادي دائماً مانصل لنقطة معينة في عملنا لنستوعب اننا نكرر هذه الخطوات كثيرا بين فترة و اخرى!, احيانا اقول هذا الشغل سويته الظهر/العصر/امس/ الاسبوع الي راح (المقصد انه عملته اكثر من مره) ليش اكرره الحين؟ او احيان يحصل خطأ بسيط واعيد كل هذا!
او احياناً ابغى اسوي شيء (غالباً شغلي اخذ نسخ من مطورين قت هب واعدل) لكنه يخبص النظام عندي او ينزل ملفات وبكجات تخرب شغلي وسلبيات كثيرة, احتاج عزل او بيئة ثانية اعمل فيها الشغل, لكل المشكلتين السابقة كنت غالباً استخدم نظام افتراضي او في اخر سنتين استخدم سيرفر الـ nas الي عندي.
حاويات لينكس بشكل عام و دوكر بشكل خاص حلت مشاكل كثيرة و فتحت افكار وحلول ومجالات كثير قاعد استفيد منها كل يوم وبنيت مشروع تخرجي بالكامل عليها -ان شاء الله هالصيف نتخرج – , حل مشكلة التكرار او ايجاد عزل مناسب شيئين او مشكلتين تقدر تحلها بإستخدام دوكر لكن دوكر يقدم حلول لكثير من الحالات – These are not the best use-cases, docker is bigger than that.
Linux containers
بإختصار وللتسهيل الحاوية هي مثل النظام الافتراضي Virtual machine ولكن خفيف جداً (يحتوي على الملفات الاساسية لتشغيل النظام و يتشارك الكرنال مع النظام الاساسي) لا يستهلك ذاكرة ومعالجة عالية, الحاوية عند تشغيلها لا تستغرق اكثر من ثانية واحدة! نعم ثانية واحدة لذلك لن ازيد في التحدث عن حاويات لينُكس.
docker
منصة تعمل على انشاء الحاويات ( مبنية على حاويات لينُكس LXC) وإدراتها ولها مستودعات فيها الكثير من التطبيقات والبرامج الجاهزة للاستخدام.
عند بناء حاوية نحتاج نحدد النسخة image او البرنامج الي نحتاجه من المستودع او نبني حاوية بدون برامج في نظام كامل معزول تماماً عن جهازك وتسوي الي تحتاجه فيها, وتقدر كمستخدم ترفع تطبيقك او حاويتك للمستودع وتعطيها لأي شخص.< وهذي ميزة وهدلاين كبير لدوكر shipping apps
نظام التشغيل داخل الحاوية هو لينُكس اي انك ما تقدر تشغل الا تطبيقات وبرامج لينُكس, لكن تقدر تنشيء الحاوية على اي نظام تشغيل سواء لينكس نفسه, ماك او ويندوز.
تثبيت docker
على الويندوز والماك هذي الاداة تتكفل بكل شي اما مستخدمي لينكس من هنا
كيف استخدم docker
قبل اي شي هنا التوثيق الرسمي وشرح جميع الاوامر وطريقة الاستخدام, كل الشغل بيكون من خلال سطر الاوامر CMD في الوندوز , Terminal في الماك و لينُكس.
طريقة كتابة اوامر دوكر تبدأ ب docker ثم command طبعاً الـ option و arguments يعتمد على الامر الي تستخدمه.
docker [option] [command] [arguments]
أهم الاوامر الي نحتاجها
في اوامر كثير ولكن ماراح نستعرضها لانها خارج نطاق شرحنا ونكتفي بالمهم منها والي يخلينا نبدأ مع الحاويات
لعرض الحاويات التي في وضع التشغيل
docker ps
لعرض جميع الحاويات التي تعمل او التي في وضع ايقاف التشغيل
docker ps -a
لعمل حاوية جديدة
docker run
لإيقاف حاوية
docker stop
لتشغيل حاوية
docker start
لحذف حاوية
docker rm
لعرض النسخ
docker images
لحذف نسخة
docker rmi
لجلب نسخة من المستودع
docker pull
لرفع نسخة للمستودع
docker push
انشاء حاوية
راح نسوي اول حاوية لنا بتكون عبارة عن نظام ابونتو بدون اي برامج وتقدر تتصفح المستودع من هنا وتسحب الي تحتاجه
نسحب نسخة ubuntu من مستودع دوكر
docker pull unutnu
وبتنفيذ الاتي سنجد جميع النسخ المحفوظة محليا على الجهاز
docker images
الان ننشيء الحاوية
docker run -it --name mycontainer ubutnu
الخيار -it يمثل interactive tty بمعنى انه ستكون داخل الحاوية بمجرد انشائها, ويمكن الانشاء في الخلفية باستخدام الخيار -d والخيار -name يمثل اسم الحاوية , هناك الكثير من الخيارات والمتغيرات التي يمكن استخدامها للتحكم اكثر في الحاوية وهنا بعضاً منها
لاضافة اسم للحاوية
--name container-name
لاستخدام وفتح بورت مع الحاوية
-p local-port:container-port
لانشاء mount مع الحاوية (باختصار مجلد مشترك بين الحاوية والنظام الاساسي حيث ان اي شي يكون في المجلد ستجده في الحاوية والنظام الحلي)
-v local-volume:conatiner-volume
الان يمكن عرض الحاوية وتفاصيلها
docker ps
ويهمنا في المخرجات ID, في كل مرة تتعامل مع الحاوية تحتاج الاي دي للتشغيل والايقاف او عملية اخرى
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7294683b9274 ubuntu/latest "/run.sh" 5 days ago Exited (255) - mycontainer
ماذا بعد انشاء الحاوية
في امر مهم بعرض استخدامه في هذا الجزء وراح يوضح حل المشكلة التكرار ويكون عندنا high re-usability ونستفيد في المستقبل.
الان مرة اخرى كمطور اعمل كل شغلي في الحاوية وتثبيت البرامج وبرمجتها وعمل الاعدادات وتخصيص النظام حسب احتياج البرامج وكل هذا راح يكون معزول تماماً في حاوية بدون التاثير على النظام الاساسي.
الان اقدر استخرج هذي الحاوية بكل مافيها من اعدادات وتخصيصات بنسخة image بحجم صغير جدا والاحتفاظ بها في الجهاز او رفعها على المستودع الخاص بدوكر او مستودع خاص, مستقبلا انا او اي شخص يقدر يحمل النسخة و تشغيل عدة حاويات منها وبتكون بنفس الاعدادات والتخصيصات كما عملتها اول مرة
طريقة حفظ/استخراج الحاوية كنسخة
docker commit [containerName] [imageName]
ويمكن استخراج حاوية ubuntu الي طبقناها الى image باسم my-new-image مسبقا كالتالي
docker commit myconatiner my-new-image
ولرفع النسخة للمستودع العام ننفذ الاتي
docker push my-new-image
خاتمة
استخدامات الحاويات مفيد جدا في حالة نشر التطبيقات لاكثر من منصة او عمل الاختبارات واكثر ولا يقتصر على ماذكرته في بداية المقال وحتى انه يتم الان استخدامها ك production لبعض التطبيقات والشركات التقنية, هذا الشرح مبسط جداً ومدخل لمنصة دوكر تعمدت عدم الدخول في التفاصيل لتوضيح الفكرة.
ان شاء الله في تطبيق لعمل برنامج rutorrent و راح يكون بديل للشرح اليدوي الي سويته على سيرفر synology وبيختصر كثيييير من الوقت وماراح يكون في command line وتعديل ملفات و بيعطينا ميزة استرجاع البرانامج في اي وقت لو اخترب و و و و و …