ATM Logo
ATMATM Team

© 2026 ATM. جميع الحقوق محفوظة

عندما يحتاج تطبيقك لأكثر من خدمة واحدة (مقدمة إلى Docker Compose)

عندما يحتاج تطبيقك لأكثر من خدمة واحدة (مقدمة إلى Docker Compose)
Author's profile picture
algerian tech makers

4/30/2026

تذكر في المقال السابق كيف تعلمنا إنشاء Dockerfile لتطبيق واحد؟ حسناً، الآن تخيل أن تطبيقك أصبح أكثر تعقيداً. ربما تحتاج خادم ويب، وقاعدة بيانات، وربما Redis للتخزين المؤقت؟ المشكلة هي أنك ستحتاج لتشغيل كل حاوية بشكل منفصل، وتذكر جميع الأوامر، والتأكد من أنها تتواصل مع بعضها البعض. هذا سيصبح مرهقاً جداً!

الحل: Docker Compose - أداة تسمح لك بتعريف وإدارة عدة حاويات معاً من خلال ملف واحد.
يعتمد Docker Compose  على ملف يسمى docker-compose.yml يحتوي على تعريف جميع الخدمات التي يحتاجها تطبيقك، والطريقة التي يجب أن تتفاعل بها مع بعضها البعض.
 يبدو مثل هذا التركيب:

حيث يقوم كل قسم بشيء محدد:
  • version يحدد إصدار Docker Compose المستخدم
  • services يعرّف جميع الخدمات (الحاويات) التي نريدها
  • volumes يحفظ البيانات حتى لو تم حذف الحاوية
هكذا، بدلاً من تشغيل كل حاوية منفصلة، نكتب ملفاً واحداً وندع Docker Compose يقوم بالعمل.

كيف يعمل Docker Compose حقا؟

في حال احتاج تطبيقك إلى عدة خدمات مترابطة، خادم ويب، قاعدة بيانات، ربما Redis للـتخزين المؤقت هنا  يمكن للDocker Compose ان يدير كل هذه التبعيات تلقائيا من خلال ملف إعدادات واحد بحيث أن:
  • تشغيل جميع الخدمات يكون بأمر واحد docker-compose up
  • الخدمات تتواصل مع بعضها بسهولة (مثل اتصال التطبيق بقاعدة البيانات)
  • إعادة تشغيل كل شيء يكون بأمر واحد
  • استخدام نفس الإعدادات عبر الفريق
  • حفظ البيانات حتى لو تم حذف الحاويات
  • ممتاز للاختبار المحلي

لقد ذكرنا Volumes من قبل، ما هي بالضبط وكيف تعمل؟

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

Volumes تقوم بشيئين أساسيين:

1. حفظ البيانات (Data Persistence)

حتى لو قمت بحذف الحاوية، البيانات في الـ Volume تبقى آمنة على القرص الصلب. على سبيل المثال، إذا كنت تشغل قاعدة بيانات، سجلات المستخدمين والطلبات ستبقى هناك في المرة القادمة التي تشغل فيها الحاوية - "لا شيء يضيع".

2. مشاركة الملفات (للتطوير)

صور Docker غير قابلة للتغيير، مما يعني أنك لا تستطيع تغييرها بمجرد تشغيلها. لذلك، إذا قمت بتحديث الكود، هذه التغييرات لن تظهر داخل الحاوية. هذا محبط، خاصة أثناء التطوير، عندما تريد رؤية تغييراتك مباشرة، أليس كذلك؟
طريقة واحدة هي إعادة بناء الصورة في كل مرة، لكن Docker يجعل هذا أسهل مع bind mounts. يمكنك ربط مجلد من حاسوبك بالحاوية، بحيث أي تغييرات تقوم بها على الكود تظهر تلقائياً داخل الحاوية (يوفر الوقت ويجعل الاختبار أسهل بكثير).

الأوامر الشائعة التي سنستخدمها:


docker-compose up => تشغيل جميع الخدمات
docker-compose down => إيقاف وتنظيف كل شيء
docker-compose ps => عرض الخدمات قيد التشغيل
docker-compose restart => إعادة تشغيل جميع الخدمات
docker-compose down -v => إيقاف الخدمات وحذف الـ volumes

ملاحظة مهمة:

Docker Compose ليس مجرد أداة لتشغيل عدة حاويات - إنه طريقة للتفكير في تطبيقك كنظام متكامل من الخدمات التي تعمل معاً. بدلاً من التفكير في "كيف أشغل هذه الحاوية؟" تفكر في "كيف يعمل تطبيقي ككل؟"
وأخيرا، تذكر أن Docker Compose مثالي للتطوير والاختبار المحلي،لكن عندما تنمو تطبيقاتك وتصبح أكثر تعقيداً، قد تحتاج إلى أدوات مثل Kubernetes لإدارة الحاويات على نطاق واسع وبمرونة أكبر.

عندما يحتاج تطبيقك لأكثر من خدمة واحدة (مقدمة إلى Docker Compose)