جاري التحميل...

Docker: الدليل الشامل للمبتدئين — ما هو؟ ولماذا نستخدمه؟ وكيف نثبّته على كل الأنظمة؟

مقدمة

تخيّل أنك بنيت مشروعًا يعمل على جهازك 100%… ثم عند تشغيله على جهاز زميلك أو على السيرفر تظهر المشاكل المعتادة: إصدار Java مختلف، PHP ناقصه Extensions، Node غير متوافق، أو إعدادات النظام متغيّرة.

هنا يأتي Docker كحل عملي: “لفّ تطبيقك مع كل ما يحتاجه” داخل حاوية (Container) بحيث يعمل بنفس الطريقة على أي جهاز تقريبًا.

في هذا المقال ستتعلم:

  • ما هو Docker بالضبط؟

  • أهم المصطلحات الأساسية

  • لماذا نستخدمه وما فوائده؟

  • على أي أنظمة يعمل؟

  • كيف تثبّته خطوة بخطوة على Windows / macOS / Linux

  • ماذا تحتاج لتركيب إضافي (Compose / Plugins)

  • أمثلة تشغيل مشاريع مثل Spring Boot و Laravel بدون تثبيت Java/PHP/Node محليًا

ما هو Docker بالضبط؟

Docker منصة لتشغيل التطبيقات داخل حاويات خفيفة ومعزولة.

الحاوية (Container) تشغّل تطبيقك مع مكتبته واعتماداته (Dependencies) وإعداداته بدون الحاجة لنسخ نظام تشغيل كامل مثل الـ Virtual Machine (VM).
لهذا السبب Docker أسرع وأخف من الـ VM في أغلب سيناريوهات التطوير.

مصطلحات أساسية (مختصرة ومفيدة)

1) Image (صورة)

قالب جاهز يحتوي: نظام مصغّر + الاعتمادات + (اختياريًا) تطبيقك إذا أضفته.

2) Container (حاوية)

نسخة تشغيلية من الـ Image (مثل تشغيل برنامج من ملف تنفيذي).

3) Dockerfile

ملف نصّي يصف كيف تُبنى الـ Image خطوة بخطوة.

4) Docker Compose

ملف docker-compose.yml لتشغيل عدة خدمات معًا (مثل: App + DB + Redis + Nginx).

5) Volumes

تخزين دائم للبيانات (قواعد بيانات، ملفات uploads…) حتى لا تضيع عند حذف الحاوية.

6) Networks

شبكة افتراضية للتواصل بين الخدمات (app يتواصل مع db باسم الخدمة).

لماذا Docker مهم؟ (الفوائد العملية)

  • تشغيل موحّد على كل الأجهزة: نفس البيئة على Windows/Mac/Linux والسيرفر.

  • عزل الاعتمادات: وداعًا لمشاكل اختلاف إصدارات Java/PHP/Node.

  • سهولة الإعداد والتسليم: غالبًا ملفان أو ثلاثة تكفي لتشغيل المشروع بالكامل.

  • مناسب للـ DevOps و CI/CD: رائع للبناء والنشر الآلي.

  • تسريع التجارب: تشغيل MySQL أو Redis في ثوانٍ بدل تثبيت يدوي طويل.

أين يعمل Docker؟ (الأنظمة المدعومة)

Docker يعمل على معظم الأنظمة الحديثة، لكن طريقة التركيب تختلف:

1) Windows

عادةً عبر Docker Desktop ويفضل تشغيله باستخدام WSL 2.

2) macOS

أيضًا عبر Docker Desktop مع اختيار النسخة المناسبة لمعمارية جهازك:

  • Apple Silicon (M1/M2/M3)

  • Intel

3) Linux

غالبًا ستثبت Docker Engine مباشرة (بدون Desktop)، ثم تضيف Compose Plugin عند الحاجة.

ماذا نثبّت بالضبط؟ (Docker Desktop أم Docker Engine؟)

Docker Desktop (Windows / Mac / وأحيانًا Linux)

يشمل غالبًا:

  • Docker Engine + Docker CLI

  • Docker Compose v2 (كأمر: docker compose)

هذا الخيار هو الأسهل للمبتدئين.

Docker Engine (Linux غالبًا)

ستثبت:

  • Docker Engine + CLI

  • ثم تضيف Compose Plugin لتستخدم: docker compose

خطوات تثبيت Docker على الأنظمة المختلفة

ملاحظة: التفاصيل الدقيقة قد تختلف حسب نسخة النظام، لذلك اعتبر الوثائق الرسمية مرجعًا دائمًا.

أولًا: Windows (الأكثر شيوعًا مع WSL2)

  1. فعّل Virtualization من BIOS إن كانت غير مفعلة.

  2. ثبّت/فعّل WSL 2 على Windows.

  3. ثبّت Docker Desktop واختر WSL2 Backend (الخيار الموصى به).

  4. بعد التشغيل افتح Terminal وجرب:

 
docker version docker compose version docker run --rm hello-world

ثانيًا: macOS

  1. حمّل وثبّت Docker Desktop (Apple Silicon أو Intel حسب جهازك).

  2. شغّل Docker Desktop ثم اختبر:

 
docker version docker compose version docker run --rm hello-world

ثالثًا: Linux (مثال Ubuntu)

المسار الشائع:

  1. إزالة الحزم المتعارضة (إن وجدت)

  2. إضافة مستودع Docker الرسمي (APT repository)

  3. تثبيت Docker Engine (مثل docker-ce وcontainerd)

  4. تثبيت Compose Plugin

ثم اختبر:

 
docker --version docker compose version sudo docker run --rm hello-world

لتشغيل Docker بدون sudo على Linux غالبًا تضيف المستخدم إلى مجموعة docker (حسب توثيق نظامك).

“أنا لا أريد تثبيت Java/PHP/Node”… هل Docker يغنيني؟

نعم، وهذه من أقوى استخداماته للمطورين:

Spring Boot

تبني وتشغّل التطبيق داخل Docker حتى لو جهازك لا يحتوي Java أو Maven.

Laravel

تشغّل بيئة كاملة:
PHP + Composer + Nginx + MySQL + Redis + Node (لـ Vite)
وكلها داخل الحاويات.

الخلاصة: تثبّت Docker فقط، والباقي يعمل داخل Containers.

كيف نستخدم Docker عمليًا؟ (أهم 3 أوامر)

1) تنزيل وتشغيل صورة جاهزة

 
docker run --rm -p 8080:80 nginx:alpine

2) بناء Image من Dockerfile

 
docker build -t myapp .

3) تشغيل مشروع متعدد الخدمات بـ Compose

 
docker compose up -d --build

مثال مختصر: تشغيل Laravel “كامل” عبر Docker

السيناريو المعتاد:

  • app (PHP-FPM + Composer)

  • web (Nginx)

  • db (MySQL)

  • redis (Redis)

  • npm (Node) لـ Vite

أوامر نموذجية:

 
docker compose up -d --build docker compose exec app php artisan key:generate docker compose run --rm npm install docker compose run --rm npm run build

أفضل الممارسات (لتجنب المشاكل لاحقًا)

  • استخدم multi-stage builds (خصوصًا لـ Java/Node) لتقليل حجم الصورة.

  • ضع ملف .dockerignore لتسريع البناء (تجاهل: node_modules, vendor, target…).

  • خزّن البيانات في Volumes بدل داخل الحاوية.

  • لا تضع كلمات مرور داخل الصور؛ استخدم env vars أو secrets حسب بيئتك.

  • حدّد منافذ واضحة، وأضف healthcheck للخدمات الحساسة مثل قواعد البيانات.


متى قد لا يكون Docker الخيار الأفضل؟

  • إذا تطبيقك بسيط جدًا ولن يغادر جهازك أو بيئة واحدة.

  • إذا مشروعك يعتمد على I/O كثيف على macOS/Windows (قد تحتاج ضبط مشاركة الملفات).

  • إذا توجد سياسات أمنية تمنع Docker Desktop (حينها تُستخدم حلول Linux Server أو إعدادات بديلة حسب السياسة).


خاتمة

Docker ليس “مجرد أداة”، بل طريقة عمل:
تبني → تشغّل → تسلّم تطبيقك مع نفس البيئة على كل الأجهزة.

وهذا يقلل المشاكل، يوحّد سير العمل، ويختصر الوقت بشكل كبير.