أنظمة التشغيلالبرمجة

شرح Docker للمبتدئين: لماذا يحتاجه كل مطور؟

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

شرح Docker للمبتدئين: لماذا يحتاجه كل مطور؟

من هذا الواقع، ظهرت تقنية دوكر (Docker) كحل ثوري غيّر طريقة بناء وتشغيل ونشر التطبيقات. دوكر لم يكن مجرد أداة جديدة، بل كان تحولاً فكرياً وتقنياً، قدّم مفهوم الحاويات (Containers) التي تجمع التطبيق مع جميع تبعياته داخل بيئة معزولة وخفيفة الوزن، قابلة للتشغيل في أي مكان وبنفس السلوك.

ما هو Docker؟ (التعريف التقني)

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

الفرق الجوهري بين الحاويات (Containers) والأنظمة الوهمية (VMs)

الأنظمة الوهمية: تتطلب نظام تشغيل كامل (Guest OS) فوق كل نسخة، مما يستهلك موارد هائلة من الرام والمعالج.
دوكر: يتشارك جميع الحاويات في “نواة” نظام التشغيل المضيف (Host OS Kernel)، مما يجعلها أخف بنسبة 90% وأسرع في التشغيل بمئات المرات.

الهندسة المعمارية لمنظومة دوكر (Docker Architecture)

يعتمد دوكر على نموذج (Client-Server Architecture)، ويتكون من ثلاثة أعمدة رئيسية:

1- (Docker Client)

هو الأداة التي يتفاعل معها المستخدم عبر سطر الأوامر (CLI). عندما تكتب docker run أمراً، يرسله العميل إلى المحرك لمعالجته.

2-المضيف (Docker Host / Daemon)

هو “قلب” المنظومة. يعمل خلف الكواليس ويقوم بـ:

  • إدارة الصور (Images)
  • تشغيل ومراقبة الحاويات (Containers).
  • إدارة الشبكات والتخزين.
3- السجل (Docker Registry)

هو المستودع الذي تُخزن فيه الصور. Docker Hub هو السجل العام الأكبر عالمياً، حيث يمكنك تحميل صور جاهزة لـ (Linux, MySQL, Python) أو رفع صورك الخاصة.

شرح Docker : لماذا يحتاجه كل مطور؟
الهندسة المعمارية لمنظومة دوكر (Docker Architecture)

المكونات الأساسية في Docker

1. ملف الدوكر (Dockerfile)
Dockerfile هو ملف نصي يحتوي على تعليمات بناء الصورة. يمثل وصفاً دقيقاً لبيئة التشغيل، مثل :

  • البدء من Ubuntu
  • تثبيت Python
  • نسخ كود التطبيق
  • تشغيل السيرفر

2. الصورة (Docker Image)

هي الملف “الساكن” الناتج عن تنفيذ ملف الدوكر. هي عبارة عن طبقات (Layers) فوق بعضها البعض. الصور للقراءة فقط (Read-Only)، وهي التي يتم نقلها وتوزيعها.

3. الحاوية ( Container)

هي النسخة “الحية” والفعالة. عند تشغيل الصورة، تصبح حاوية. يمكنك تشغيل 10 حاويات من صورة واحدة فقط، وكل واحدة تعمل بشكل معزول.

تثبيت Docker على Linux (Ubuntu كمثال)

1- نبدأ دائمًا بتحديث الحزم لضمان تثبيت نسخ مستقرة:

sudo apt update
sudo apt upgrade -y

2- هذه الحزم تسمح لـ Ubuntu باستخدام مستودعات HTTPS:

sudo apt install -y ca-certificates curl gnupg lsb-release

3- إضافة مفتاح GPG الرسمي لـ Docker:

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

4- نضيف مستودع Docker الرسمي إلى النظام:

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5- ثم نحدّث النظام:

sudo apt update

6- الآن نقوم بتثبيت  Docker Engine:

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

7- نتأكد أن Docker اشتغل بنجاح:

docker --version

8- ولتشغيل حاوية اختبار:

sudo docker run hello-world

أوامر Docker الأساسية والاحترافية

لإدارة دوكر، يجب إتقان الأوامر التالية :

إدارة الصور (image) :

  • <docker image pull <image_name: لتحميل صورة من Docker Hub.
  • docker image ls: عرض الصور.
  • <docker image rmi <image_name: حذف صورة.

إدارة الحاويات (Container)

  • <docker container create <image_name: إنشاء Container
  • <docker container start <image_name: تشغيل Container.
  • <docker container stop <image_name: لإيقاف Container.
  • docker run -it <image_name> /bin/bash: يعد هذا الأمر الأكثر أهمية، لأنه يجمع بين تحميل الصورة و إنشاء الحاوية و تشغيلها -iوضع تفاعلي (Interactive) -t يسمح لك بالتعامل مع الحاوية مباشرة عبر سطر الأوامر.
  • <docker run -it -d <image_name: ييشغّل الحاوية في الخلفية (Background) و d-  تعني (detached).
  •  docker exec -it <image_name> bash : يُستخدم للدخول إلى حاوية Docker تعمل حالياً وفتح سطر أوامر Bash بداخلها.
  • docker ps :  يُستخدم لعرض قائمة الحاويات (Containers) التي تعمل حالياً على النظام مع معلومات مثل المعرّف، الاسم، الصورة، وحالة التشغيل.
  • docker ps -a : يُستخدم لعرض جميع حاويات Docker سواء كانت قيد التشغيل أو متوقفة مع تفاصيلها الأساسية.
  • <docker rm <image_name : يُستخدم لحذف حاوية Docker (متوقفة) من النظام بشكل نهائي.
  • <docker rm -f <image_name :يُستخدم لإيقاف الحاوية قسرًا ثم حذفها مباشرة حتى لو كانت قيد التشغيل.

وهناك بعض الأوامر الأخرة التي سأشرحها باختصار :

  • docker build : يُتحويل ملف Dockerfile إلى صورة (Image).
  • docker push :رفع صورة من جهازك إلى الإنترنت (Docker Hub).
  • docker tag :إعادة تسمية الصورة أو إعطاؤها رقم إصدار (Tag).
  • docker commit :حفظ التغييرات التي تمت داخل حاوية شغالة وتحويلها إلى صورة (Image).
  • docker login :تسجيل الدخول إلى Docker Hub لتمكين رفع وتنزيل الصور.

الشبكات في Docker

تُعد الشبكات في Docker من العناصر الأساسية التي لا يمكن الاستغناء عنها، لأنها المسؤولة عن ربط الحاويات (Containers) ببعضها البعض وربطها بالعالم الخارجي. أي تطبيق يعمل داخل Docker يحتاج إلى شبكة حتى يتمكن من استقبال أو إرسال البيانات.
في Docker، كل حاوية يتم تشغيلها تكون مرتبطة تلقائيًا بشبكة معينة وتحصل على عنوان IP خاص بها، مما يسمح لها بالتواصل سواء مع حاويات أخرى أو مع النظام المضيف (Host).
أبسط شبكة في Docker هي شبكة Bridge، وهي الشبكة الافتراضية التي يستعملها Docker عند تشغيل أي حاوية بدون تحديد شبكة معينة. هذه الشبكة تُستعمل غالبًا للتطبيقات التي تعمل على نفس الجهاز، حيث يمكن للحاويات الموجودة داخل نفس شبكة Bridge التواصل فيما بينها بسهولة.
هناك نوع آخر شبكة Host، وفي هذا النوع تستعمل الحاوية شبكة الجهاز مباشرة بدون عزل. هذا يجعل الأداء أسرع، لكنه يقلل من مستوى الأمان لأن الحاوية تصبح مرتبطة مباشرة بالنظام. لذلك يُستعمل هذا النوع في حالات خاصة فقط.
كما يوفر Docker شبكة None، وهي شبكة بدون أي اتصال. في هذا الوضع تكون الحاوية معزولة تمامًا، لا يمكنها التواصل مع الإنترنت ولا مع أي حاوية أخرى. يُستعمل هذا الخيار غالبًا لأسباب أمنية أو لأغراض الاختبار.
إضافة إلى ذلك، يسمح Docker بإنشاء شبكات مخصصة، وهي من أفضل الممارسات في العمل الاحترافي. الشبكات المخصصة تُسهّل تنظيم الخدمات، مثل ربط حاوية قاعدة البيانات بحاوية التطبيق فقط دون غيرها. الميزة المهمة هنا هي أن الحاويات يمكنها التواصل مع بعضها باستعمال اسم الحاوية بدل عنوان IP، مما يجعل الإعداد أسهل وأكثر وضوحًا.
بل أن تتواصل الحاويات في Docker، يمكنك الاطلاع على جميع الشبكات الموجودة على جهازك بالأمر:

docker network ls

عندما تريد معرفة تفاصيل دقيقة عن شبكة معينة في Docker، مثل الحاويات المتصلة بها وعناوين الـ IP الخاصة بها، يمكنك استعمال الأمر:

docker network inspect <اسم_الشبكة>

بهذا تعرف كل المعلومات المهمة عن الشبكة وكيفية تواصل الحاويات داخلها.
بعد الشبكات، يأتي دور Volumes لتخزين البيانات بشكل دائم خارج الحاويات وحمايتها من الحذف.

Docker Volumes

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

  • docker volume create <volume_name: إنشاء Volume جديد.
  • docker volume ls: عرض جميع الـ Volumes .
  • <docker volume rm <volume_name: حذف Volume
  • <v <volume-name>:<container-directory-: يُستخدم مع الأمر docker run لربط الـ Volume بمجلد داخل الحاوية

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

RABAH JAWAD

كاتب ومحرر ومالك صفحة موقع INFOOIT مهتم بالشبكات وآمن المعلومات

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى