الحل: 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 لإدارة الحاويات على نطاق واسع وبمرونة أكبر.
