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

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

ما هو Docker، مفاهيمه الأساسية، فوائده، على أي أنظمة يعمل، وكيف تثبّته خطوة بخطوة، وماذا تركّب معه، ثم أمثلة تشغيل مشاريع (مثل Spring Boot وLaravel) بدون تثبيت Java/PHP/Node على جهازك.

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

Docker منصة لتشغيل التطبيقات داخل “حاويات” خفيفة ومعزولة.
الحاوية (Container) تشغّل تطبيقك مع مكتبته واعتماداته (Dependencies) وإعداداته، لكن بدون الحاجة لنسخ نظام تشغيل كامل مثل الـ VM.

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

  • Image (صورة): قالب جاهز يحتوي النظام المصغّر + الاعتمادات + تطبيقك (إن أضفتَه).
  • Container (حاوية): نسخة تشغيلية من الـ Image (مثل “تشغيل برنامج” من ملف تنفيذي).
  • Dockerfile: ملف نصّي يصف كيف تُبنى الـ Image خطوة بخطوة.
  • Docker Compose: ملف docker-compose.yml لتشغيل عدة خدمات معًا (مثل: App + DB + Redis + Nginx).
  • Volumes: تخزين دائم للبيانات (قواعد بيانات، uploads…) بحيث لا تضيع عند حذف الحاوية.
  • Networks: شبكة افتراضية للتواصل بين الخدمات (app يتواصل مع db باسم الخدمة).

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

  1. تشغيل موحّد على كل الأجهزة: نفس البيئة على Windows/Mac/Linux والسيرفر.
  2. عزل الاعتمادات: تخلص من إصدارات Java/PHP/Node المختلفة.
  3. سهولة الإعداد والتسليم: ملفان أو ثلاثة (Dockerfile + compose) تكفي لتشغيل المشروع بالكامل.
  4. قابلية توسّع وDevOps/CI: ممتاز لخطوط البناء والنشر (CI/CD).
  5. تسريع التجارب: تشغيل قاعدة بيانات أو Redis في ثوانٍ بدل تثبيت يدوي طويل.

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

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

1) Windows

غالبًا ستستخدم Docker Desktop على Windows، ويفضل تشغيله عبر WSL 2 (Windows Subsystem for Linux). دليل Docker الرسمي يشرح متطلبات التثبيت والخطوات. Docker Documentation+1

2) macOS

على macOS عادةً أيضًا ستستخدم Docker Desktop، مع اختيار نسخة مناسبة لمعمارية جهازك (Apple Silicon أو Intel). Docker Documentation

3) Linux (سيرفرات/أجهزة تطوير)

على Linux غالبًا ستثبت Docker Engine (بدون Desktop)، ثم تضيف Docker Compose Plugin عند الحاجة. وثائق Docker الرسمية تقدم خطوات التثبيت على Ubuntu وغيرها. Docker Documentation+1

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

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

يشمل عادة:

  • Docker Engine + Docker CLI
  • Docker Compose v2 (كأمر docker compose)
    وهذا الخيار هو الأسهل للمبتدئين. Docker Documentation

Docker Engine (Linux غالبًا)

تثبت:

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

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

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

  1. فعّل Virtualization من BIOS إن كانت غير مفعلة (مهم جدًا).
  2. ثبّت/فعّل WSL 2 على Windows. Microsoft Learn
  3. ثبّت Docker Desktop for Windows واختر WSL2 Backend (الخيار الموصى به). Docker Documentation
  4. بعد التشغيل افتح التيرمنال وجرب:
docker version
docker compose version
docker run --rm hello-world

ثانيًا: macOS

  1. حمّل وثبّت Docker Desktop for Mac (اختر Apple Silicon أو Intel حسب جهازك). Docker Documentation
  2. شغّل Docker Desktop ثم اختبر:
docker version
docker compose version
docker run --rm hello-world

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

المسار الرسمي الأكثر شيوعًا على Ubuntu:

  1. إزالة الحزم المتعارضة (إن وجدت)
  2. إضافة مستودع Docker الرسمي (APT repository)
  3. تثبيت Docker Engine (مثل docker-ce وcontainerd…) Docker Documentation
  4. تثبيت Compose Plugin على Linux. Docker Documentation

وبعدها اختبر:

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 فقط، والباقي كله داخل الحاويات.

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

  • تنزيل/تشغيل صورة جاهزة:
docker run --rm -p 8080:80 nginx:alpine
  • بناء Image من Dockerfile:
docker build -t myapp .
  • تشغيل مشروع متعدد الخدمات بـ 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 للخدمات الحساسة (DB مثلًا).

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

  • إذا تطبيقك بسيط جدًا ولن يغادر جهازك أو بيئة واحدة.
  • إذا بيئتك تحتاج أداء تخزين ملفات محلي كثيف على Mac/Windows (قد تحتاج ضبط مشاركة الملفات).
  • إذا عندك قيود أمنية/سياسات تمنع تشغيل Docker Desktop—هنا غالبًا تلجأ لحلول Linux Server أو WSL-Engine حسب السياسة.

خاتمة

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

Avatar photo
ياسين جوخدار
المقالات: 10

اترك ردّاً

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