docker containers

كمديري انظمة, مطورين , مبرمجين أو حتى مستخدم عادي دائماً مانصل لنقطة معينة في عملنا لنستوعب اننا نكرر هذه الخطوات كثيرا بين فترة و اخرى!, احيانا اقول هذا الشغل سويته الظهر/العصر/امس/ الاسبوع الي راح (المقصد انه عملته اكثر من مره) ليش اكرره الحين؟ او احيان يحصل خطأ بسيط واعيد كل هذا!

او احياناً ابغى اسوي شيء (غالباً شغلي اخذ نسخ من مطورين قت هب واعدل) لكنه يخبص النظام عندي او ينزل ملفات وبكجات تخرب شغلي وسلبيات كثيرة, احتاج عزل او بيئة ثانية اعمل فيها الشغل, لكل المشكلتين السابقة كنت غالباً استخدم نظام افتراضي او في اخر سنتين استخدم سيرفر الـ nas الي عندي.

حاويات لينكس بشكل عام و دوكر بشكل خاص حلت مشاكل كثيرة و فتحت افكار وحلول ومجالات كثير قاعد استفيد منها كل يوم وبنيت مشروع تخرجي بالكامل عليها -ان شاء الله هالصيف نتخرج (_36 – , حل مشكلة التكرار او ايجاد عزل مناسب شيئين او مشكلتين تقدر تحلها بإستخدام دوكر لكن دوكر يقدم حلول لكثير من الحالات – 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 بحجم صغير جدا والاحتفاظ بها في الجهاز او رفعها على المستودع الخاص بدوكر او مستودع خاص, مستقبلا انا او اي شخص يقدر يحمل النسخة و تشغيل عدة حاويات منها وبتكون بنفس الاعدادات والتخصيصات كما عملتها اول مرة (_5

طريقة حفظ/استخراج الحاوية كنسخة

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 وتعديل ملفات و بيعطينا ميزة استرجاع البرانامج في اي وقت لو اخترب و و و و و …