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)
-
فعّل Virtualization من BIOS إن كانت غير مفعلة.
-
ثبّت/فعّل WSL 2 على Windows.
-
ثبّت Docker Desktop واختر WSL2 Backend (الخيار الموصى به).
-
بعد التشغيل افتح Terminal وجرب:
ثانيًا: macOS
-
حمّل وثبّت Docker Desktop (Apple Silicon أو Intel حسب جهازك).
-
شغّل Docker Desktop ثم اختبر:
ثالثًا: Linux (مثال Ubuntu)
المسار الشائع:
-
إزالة الحزم المتعارضة (إن وجدت)
-
إضافة مستودع Docker الرسمي (APT repository)
-
تثبيت Docker Engine (مثل docker-ce وcontainerd)
-
تثبيت Compose Plugin
ثم اختبر:
لتشغيل 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) تنزيل وتشغيل صورة جاهزة
2) بناء Image من Dockerfile
3) تشغيل مشروع متعدد الخدمات بـ Compose
مثال مختصر: تشغيل Laravel “كامل” عبر Docker
السيناريو المعتاد:
-
app (PHP-FPM + Composer)
-
web (Nginx)
-
db (MySQL)
-
redis (Redis)
-
npm (Node) لـ Vite
أوامر نموذجية:
أفضل الممارسات (لتجنب المشاكل لاحقًا)
-
استخدم 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 ليس “مجرد أداة”، بل طريقة عمل:
تبني → تشغّل → تسلّم تطبيقك مع نفس البيئة على كل الأجهزة.
وهذا يقلل المشاكل، يوحّد سير العمل، ويختصر الوقت بشكل كبير.