مدونة عمار الخوالده

مقدمة عن أداة Docker وفوائدها وحالات استخدامها


مقدمة عن أداة Docker وفوائدها وحالات استخدامها
سلسلة أساسيات Docker

مقدمة تعريفية ومفاهيم أساسية

Docker أداة تستخدم في عملية تشغيل البرامج ضمن بيئة محددة. هذه البيئة تُعْرَفُ بالحاوية (Container)، حيث يمكن باستخدام هذه الحاويات تشغيل الأدوات والبرامج على البيئة المناسبة بغض النظر عن توفر المتطلبات الخاصة لهذه البرامج على الجهاز أو السيرفر.

نبذة مبسطة عن مفهوم الحاوية (Container)

الحاوية هي بيئة تشغيل تحتوي على مجموعة من الحزم أو البرامج (Packages) المعزولة عن جهازك أو السيرفر الذي تعمل عليه، فالحاوية لها ملفاتها الخاصة وتعمل على شبكة خاصة بها بشكل منفصل عن الجهاز الذي يقوم بتشغيلها.

فبمجرد تواجد Docker على الجهاز أو السيرفر، يمكن تجهيز بيئة من الحاويات لتشغيل أي برنامج أو نظام حتى لو لم تكن متطلبات هذا النظام موجودة على الجهاز.

يتم عادة إنشاء عدة حاويات لتشغيل المشروع، حيث تشغل كل حاوية أحد البرامج التي يحتاجها المشروع للعمل، بحيث تشكل هذه الحاويات معا بيئة متكاملة تمكنك من تشغيل المشروع عن طريقها، حيث يمكن بسهولة إضافة حاوية أو حذف حاوية بحسب تغير متطلبات مشروعك.

إذا كان مشروعك يحتاج إلى Nginx و MySQL و PHP ليعمل، فيتم عمل حاوية لكل واحد منها، في حال احتجت تغيير MySQL واستخدام MariaDB بدلا منها، يمكنك بكل بساطة تغيير الحاوية فقط.

إذا لم تفهم الكلام السابق أو فهمته بشكل مبهم فلا تقلق :) سيتضح المقصود أكثر خلال المقال التالي.

متى أحتاج أن أستخدم Docker؟

قبل شرح أعمق لمفاهيم Docker أو إعطاء أمثلة عنه، يجب معرفة المشاكل التي يحلها Docker حتى تحدد ما إذا كان Docker مناسبا لاحتياجاتك أم لا، واخترت تلخيص الحلول التي يقدمها Docker بنقطتين:

إدارة البرامج والخدمات المختلفة ونُسَخِها (Versions)

خلال عملك كمبرمج أو كمدير سيرفرات، ستحتاج بالتأكيد لإدارة وتثبيت عدد من البرامج المختلفة، سواء على جهازك الشخصي المستخدم في التطوير، أو على السيرفر، في حال كنت تعمل على جهازك الشخصي، سيكون من الصعب إدارة البرامج والخدمات المطلوبة في المشاريع عند التنقل بين أكثر من مشروع، فمثلا بعض المشاريع قد تستخدم MySQL كقاعدة بيانات، بينما البعض الآخر يستخدم PosgreSQL أو MongoDB، وربما تستخدم Memcached لعملية الـ Caching في أحد المشاريع، بينما تستخدم Redis في مشروع آخر.

تثبيت كل هذه البرامج على جهازك وإدارتها سيكون أمرا صعبا ويستهلك الكثير من موارد الجهاز، كما أنك قد تواجه صعوبة في إدارة هذه البرامج في حال احتجت نُسخا مختلفة من تلك البرامج لكل مشروع، فبعض البرامج بحاجة لـ MySQL 8 والبعض الآخر لا يعمل إلا على MySQL 5.7.

دوكر يقوم بحل هذه المشكلة بحيث يتم تحميل الخدمات والبرامج داخل حاويات مستقلة، فتعمل MySQL 5.7 على حاوية، بينما تعمل MySQL 8 على حاوية أخرى، ويمكن تشغيل أو إغلاق أي حاوية بسهولة، مع احتفاظ كل حاوية ببياناتها الخاصة دون التعارض مع النسخ الأخرى من نفس البرامج أو من البرامج الأخرى.

ضمان عمل المشروع ببيئة مستقرة وثابتة

من أبرز الأسباب التي تؤدي إلى عمل المشروع على جهازك وعدم عمله على السيرفر عند الرفع هو اختلاف البيئة، فمتغيرات البيئة Environment Variables قد تكون مختلفة بين جهازك وبين السيرفر، وإعدادات كل خدمة قد تكون مختلفة أيضا.

أما Docker فيحل هذه المشكلة عن طريق تشغيل نفس الحاوية الموجودة على جهازك على السيرفر بنفس الإعدادات، بالتالي تضمن لك الحاوية أن يعمل المشروع على نفس البيئة بالضبط مما يؤدي إلى تقليل الأخطاء خاصة في المشاريع الكبيرة.

متطلبات سابقة لتعلم Docker

  • تحتاج إلى قدرة جيدة على التعامل مع سطر أوامر لينكس.
  • تحتاج معرفة بسيطة في الشبكات (مفهوم الـ Hosts والـ Ports).

تثبيت Docker

تختلف طريقة تثبيت دوكر بحسب نظام التشغيل المستخدم، في هذه المقالة سيتم استخدام نظام Ubuntu كمثال.

أولا نقوم بتثبيت الحزم التي نحتاجها:

1sudo apt-get install docker

ثم نقوم بإضافة group باسم Docker مع إضافة المستخدم الحالي عليه لنتمكن من استخدام Docker دون الحاجة لصلاحيات root:

1sudo groupadd docker

الأمر السابق يُضيف مجموعة جديدة باسم docker، إذا أعطى رسالة خطأ بسبب وجود المجموعة مسبقا قم بتجاهلها، ثم نقوم بتنفيذ الأمر التالي لإضافة المستخدم إلى المجموعة التي يسمح لها باستخدام Docker:

1sudo usermod -aG docker $USER

لتطبيق التغييرات السابقة قم بتسجيل الخروج من النظام ثم تسجيل الدخول ثانية، أو قم باعادة تشغيل الجهاز.

للتأكد من صحة تثبيت Docker قم بتنفيذ الامر التالي:

1docker run hello-world

انتظر قليلا ثم ستظهر رسالة كالآتي تؤكد عمل Docker بشكل سليم:

صورة توضح ناتج تشغيل docker run hello-world

في الدرس التالي سيتم شرح مفهوم الـ Image والـ Container بشكل مفصل مع إعطاء بعض الأمثلة العملية.

2 أساسيات الصور والحاويات - Images and Containers

اقرأ أيضا