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

تعتبر الحاويات وDocker تقنيات أحدثت ثورة في كيفية بناء البرمجيات واختبارها وتوزيعها.

سواء كنت جديدًا في عالم التكنولوجيا أو تبحث فقط لفهم أساسيات Docker، ستوجهك هذه المقالة عبر الأساسيات.

جدول المحتويات

ما هي الحاويات؟

قبل الانغماس في دوكر، دعنا نفهم أولا مفهوم الحاويات. تخيل أنك تعمل على مشروع، وأن تطبيقك يعمل بشكل مثالي على جهاز الكمبيوتر المحمول الخاص بك. ولكن عندما تحاول تشغيل نفس التطبيق على جهاز آخر، يفشل. ويرجع ذلك غالبًا إلى الاختلافات في البيئات: أنظمة تشغيل مختلفة، إصدارات البرامج المثبتة، أو التكوينات.

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

الميزات الرئيسية للحاويات:

  • خفيفة الوزن: تشترك الحاويات في نواة نظام المضيف، على عكس الآلات الافتراضية (VMs) التي تتطلب حالات نظام تشغيل منفصلة، مما يجعلها أسرع وأكثر كفاءة.

  • محمول: بمجرد بنائه، يمكن للحاوية أن تعمل بشكل متسق عبر بيئات مختلفة.

  • معزول: تعمل الحاويات في عمليات معزولة، مما يعني أنها لا تتداخل مع التطبيقات الأخرى التي تعمل على نفس النظام.

ما هو دوكر؟

الآن بعد أن فهمنا الحاويات، دعونا نتحدث عن دوكر، المنصة التي جعلت الحاويات شائعة.

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

المفاهيم الرئيسية في دوكر

  1. صور دوكر: فكر في صورة دوكر كنموذج لحاويتك. تحتوي على كل ما يلزم لتشغيل التطبيق، بما في ذلك الشفرة والمكتبات والاعتماديات النظام. يتم بناء الصور من مجموعة من التعليمات المكتوبة في ملف دوكر.

  2. حاويات Docker: الحاوية هي نسخة تعمل من صورة Docker. عند إنشاء وتشغيل حاوية، يطلق Docker الصورة في بيئة معزولة حيث يمكن لتطبيقك العمل.

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

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

  5. دوكر كومبوز: بالنسبة للتطبيقات التي تتطلب عدة حاويات (على سبيل المثال، خادم ويب وقاعدة بيانات)، يسمح دوكر كومبوز لك بتعريف وإدارة بيئات متعددة الحاويات باستخدام ملف YAML بسيط.

لماذا دوكر؟

انتشار دوكر يعود إلى قدرته على حل مجموعة متنوعة من التحديات التي يواجهها المطورون اليوم:

  • الاتساق عبر البيئات: يمكن للمطورين “بناء مرة وتشغيل في أي مكان”، مما يضمن أن يعمل التطبيق بنفس الطريقة في بيئات مختلفة، من التطوير المحلي إلى الإنتاج.

  • السرعة: حاويات دوكر سريعة في بدء التشغيل والإيقاف، مما يجعلها مثالية لأنابيب الاختبار والنشر.

  • استخدام فعال للموارد: نظرًا لأن الحاويات تشترك في موارد نظام المضيف بشكل أكثر كفاءة من الآلات الافتراضية، فإنها تقلل من التكاليف الإضافية وتسمح بزيادة الكثافة في التنفيذات.

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

هندسة Docker

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

تم تصميم هندسة Docker لضمان الكفاءة والمرونة والقابلية للتوسيع. يتكون من عدة مكونات تعمل معًا لإنشاء وإدارة وتشغيل الحاويات. دعنا نلقي نظرة أقرب على كل هذه المكونات.

هندسة Docker: المكونات الرئيسية

تم بناء هندسة Docker حول نموذج العميل والخادم الذي يتضمن المكونات التالية

  • العميل Docker

  • الشيطان Docker (dockerd)

  • مُحرك دوكر

  • صور دوكر

  • حاويات دوكر

  • سجلات دوكر

1. عميل دوكر

العميل دوكر هو الطريقة الأساسية التي يتفاعل بها المستخدمون مع دوكر. إنه أداة سطر أوامر ترسل تعليمات إلى مُشغل دوكر (الذي سنغطيه لاحقًا) باستخدام واجهات برمجة التطبيقات عبر الويب. يتم تنفيذ أوامر مثل docker build و docker pull و docker run من عميل دوكر.

عندما تكتب أمرًا مثل docker run nginx، يترجم العميل دوكر ذلك إلى طلب يمكن لمُشغل دوكر فهمه والتصرف وفقًا له. ببساطة، يعمل العميل دوكر كواجهة أمامية للتفاعل مع مكونات دوكر الخلفية الأكثر تعقيدًا.

2. مُشغل دوكر (dockerd)

مُشغل دوكر، المعروف أيضًا باسم dockerd، هو عقل عملية دوكر بأكملها. إنه عملية خلفية تستمع إلى طلبات من عميل دوكر وتدير كائنات دوكر مثل الحاويات والصور والشبكات والأحجام.

إليك ما يتولاه مُشغل دوكر

  • بناء وتشغيل الحاويات: عندما يرسل العميل أمرًا لتشغيل حاوية، يقوم المُشغل بجلب الصورة، وإنشاء الحاوية، وبدء تشغيلها.

  • إدارة موارد دوكر: يتولى البرنامج الخادم مهام مثل تكوينات الشبكة وإدارة الأحجام.

  • يعمل برنامج خادم دوكر على جهاز الاستضافة ويتفاعل مع عميل دوكر باستخدام واجهة برمجة تطبيقات REST أو مقابس Unix أو واجهة شبكية. كما أنه مسؤول عن التفاعل مع بيئات تشغيل الحاويات التي تتولى التنفيذ الفعلي للحاويات.

3. محرك دوكر

محرك دوكر هو الجزء الأساسي من دوكر. إنه ما يجعل النظام بأكمله يعمل، حيث يجمع بين العميل والبرنامج الخادم وبيئة تشغيل الحاويات. يمكن لمحرك دوكر أن يعمل على أنظمة تشغيل مختلفة، بما في ذلك Linux وWindows وmacOS.

هناك نسختان من محرك دوكر

  • دوكر CE (Community Edition): هذه هي النسخة المجانية ومفتوحة المصدر من دوكر التي تستخدم على نطاق واسع للمشاريع الشخصية والمشاريع ذات المقياس الصغير.

  • دوكر EE (Enterprise Edition): النسخة المدفوعة ومستوى الشركات من دوكر تأتي مع ميزات إضافية مثل التحسين في الأمان والدعم والشهادة.

يبسط محرك دوكر تعقيدات تنظيم الحاويات عن طريق دمج المكونات المختلفة المطلوبة لبناء وتشغيل وإدارة الحاويات.

4. صور دوكر

صورة دوكر هي قالب للقراءة فقط يحتوي على كل ما يحتاجه تطبيقك للتشغيل – الشفرة، المكتبات، التبعيات والتكوينات. الصور هي كتل بناء الحاويات. عند تشغيل حاوية، أنت تقوم في الأساس بإنشاء طبقة قابلة للكتابة فوق صورة دوكر.

تُبنى صور دوكر عادةً من ملفات دوكرفايل، وهي ملفات نصية تحتوي على تعليمات حول كيفية بناء الصورة. على سبيل المثال، قد يبدأ ملف دوكرفايل الأساسي بصورة قاعدية مثل nginx أو ubuntu ويتضمن أوامر لنسخ الملفات، تثبيت التبعيات، أو تعيين متغيرات البيئة.

إليك مثال بسيط عن ملف دوكرفايل

dockerfileCopy codeFROM nginx:latest
COPY ./html /usr/share/nginx/html
EXPOSE 80

في هذا المثال، نستخدم صورة Nginx الرسمية كقاعدة وننسخ ملفات HTML المحلية إلى دليل الويب داخل الحاوية.

بمجرد بناء الصورة، يمكن تخزينها في سجل دوكر ومشاركتها مع الآخرين.

5. حاويات دوكر

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

يمكن إنشاء الحاويات وتشغيلها وإيقافها وتدميرها، ويمكن حتى الاحتفاظ بها بين إعادة التشغيل. نظرًا لأن الحاويات تعتمد على الصور، فإنها تضمن أن التطبيقات ستتصرف بنفس الطريقة بغض النظر عن مكان تشغيلها.

بعض السمات الرئيسية لحاويات Docker:

  • العزل: تعزل الحاويات عن بعضها البعض وعن المضيف، لكنها لا تزال تشترك في نفس نواة نظام التشغيل.

  • النقل: يمكن للحاويات التشغيل في أي مكان، سواء على الجهاز المحلي الخاص بك، أو جهاز افتراضي، أو موفر خدمة سحابية.

6. سجلات Docker

سجل Docker هو المكان المركزي حيث يتم تخزين صور Docker وتوزيعها. أشهر سجل هو Docker Hub، الذي يستضيف ملايين الصور المتاحة علنًا. يمكن للمؤسسات أيضًا إعداد سجلات خاصة لتخزين وتوزيع صورها بشكل آمن.

توفر سجلات Docker ميزات أساسية عدة:

  • ترقيم الصور: تتم ترقيم الصور باستخدام العلامات، مما يجعل إدارة الإصدارات المختلفة للتطبيق سهلة.

  • التحكم في الوصول: يمكن أن تكون السجلات عامة أو خاصة، مع التحكم في الوصول بناءً على الأدوار لإدارة من يمكنه سحب أو دفع الصور.

  • التوزيع: يمكن سحب الصور من سجل ونشرها في أي مكان، مما يسهل مشاركة وإعادة استخدام التطبيقات المعبأة.

وقت تشغيل حاويات Docker: containerd

أحد التطورات المهمة الأخيرة في بنية Docker هو استخدام containerd. كانت Docker تستخدم وقت تشغيل الحاويات الخاص بها، ولكنها الآن تستخدم containerd، وهو وقت تشغيل حاويات يتبع المعايير الصناعية ويستخدم أيضًا من قبل منصات أخرى مثل Kubernetes.

  1. containerd مسؤول عن

    • بدء وإيقاف الحاويات

    • إدارة التخزين والشبكات للحاويات

    • سحب صور الحاويات من السجلات

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

كيفية إنشاء حاوية بسيطة باستخدام Docker

سحب صورة Linux

ابدأ بسحب صورة alpine من Docker Hub. صورة alpine هي توزيع Linux مصغر، مصمم ليكون خفيف الوزن وسريعًا.

قم بتشغيل الأمر التالي:

docker pull alpine

سيتم تنزيل صورة alpine على نظامك المحلي.

تشغيل الحاوية

قم بإنشاء وتشغيل حاوية باستخدام صورة alpine. سنقوم أيضًا بفتح جلسة طرفية داخل الحاوية.

docker run -it alpine /bin/sh

إليك ما يعنيه كل خيار:

  • docker run: ينشئ ويبدأ حاوية جديدة.

  • -it: يتيح لك التفاعل مع الحاوية (وضع تفاعلي + طرفية).

  • alpine: يحدد الصورة المستخدمة.

  • /bin/sh: يحدد الأمر الذي سيتم تشغيله داخل الحاوية (جلسة شل في هذه الحالة).

استكشف الحاوية

بمجرد تشغيل الحاوية، سترى رمز القشرة الذي يبدو مثل هذا

/ #

هذا يشير إلى أنك داخل حاوية Alpine Linux. يمكنك الآن تشغيل أوامر Linux. على سبيل المثال:

تحقق من الدليل الحالي:

pwd

قائمة الملفات في الدليل:

ls

الناتج: هيكل دليل رمزي، حيث أن Alpine هي صورة خفيفة الوزن.

يمكنك أيضًا تثبيت حزمة (Alpine يستخدم apk كمدير حزم):

apk add curl

اخرج من الحاوية

عندما تنتهي من الاستكشاف، اكتب exit لإغلاق الجلسة وإيقاف الحاوية

bashCopy codeexit

الوصول إلى الحاوية بعد إيقافها

إذا كنت ترغب في الوصول إلى الحاوية مرة أخرى بعد إيقافها، يمكنك استخدام هذا الأمر لعرض جميع الحاويات (بما في ذلك تلك التي تم إيقافها):

docker ps -a

سترى قائمة بالحاويات مع هوياتها وحالاتها، ثم يمكنك بدء تشغيل الحاوية التي تم إيقافها:

docker start <container-id>

يمكنك الانضمام إلى قشرة الحاوية باستخدام هذا الأمر:

docker exec -it <container-id> /bin/sh

إذا لم تعد بحاجة إلى الحاوية، يمكنك إزالتها

  1. قفل الحاوية (إذا كانت لا تزال تعمل):

     docker stop <هوية-الحاوية>
    
  2. إزالة الحاوية:

     docker rm <هوية-الحاوية>
    

ملخص أوامر Docker الرئيسية

الأمر الوصف
docker pull alpine يُنزل صورة Alpine Linux.
docker run -it alpine /bin/sh ينشئ ويبدأ حاوية تفاعلية.
docker ps -a يعرض قائمة بجميع الحاويات (التي تعمل والمتوقفة).
docker start <هوية-الحاوية> يبدأ حاوية متوقفة.
docker exec -it <هوية-الحاوية> يعلق على حاوية تعمل.
docker stop <هوية-الحاوية> يتوقف عن تشغيل حاوية تعمل.
docker rm <هوية-الحاوية> يزيل حاوية متوقفة.

الختام

الآن بعد أن حصلت على فهم أساسي، حان وقت تطبيق معرفتك. ابدأ التجربة مع Docker، قم ببناء أول حاوية، واستكشف بيئتها الشاسعة.

سرعان ما سترى لماذا أصبح Docker ركيزة في عالم DevOps الحديث وهندسة البرمجيات.

يمكنك متابعتي على