Docker Compose هي أداة قوية تبسط عملية تعريف وتشغيل تطبيقات Docker متعددة الحاويات للتطوير المحلي. إنها تتيح لك تكوين خدمات وتكوين شبكات وأحجام تطبيقك في ملف docker-compose.yml واحد، مما يتيح لك تشغيل بيئة التطوير بأكملها بأمر واحد.
لماذا استخدام Docker Compose للتطوير المحلي؟
- إعداد مبسط: يبسط عملية إعداد بيئات التطوير المعقدة ذات التبعيات المتعددة (على سبيل المثال، تطبيق ويب وقاعدة بيانات وخدمة تخزين مؤقت).
- بيئات قابلة للتكرار: يضمن أن بيئتك المحلية تعكس بيئة الإنتاج عن كثب، مما يقلل من مشكلات "إنها تعمل على جهازي".
- إدارة التبعيات: قم بإدارة إصدارات مختلفة من الخدمات بسهولة (على سبيل المثال، قواعد البيانات، قوائم انتظار الرسائل) دون تعارضات على جهازك المضيف.
- التأهيل: يمكن للمطورين الجدد تشغيل مشروع بسرعة بأمر واحد.
المفاهيم الأساسية
docker-compose.yml(أوcompose.yaml): هذا الملف YAML هو قلب Docker Compose. يحدد الخدمات والشبكات والأحجام التي تشكل تطبيقك.- الخدمات (Services): تمثل كل خدمة في
docker-compose.ymlحاوية. على سبيل المثال، قد يكون لديك خدمةwebلتطبيقك، وخدمةdbلقاعدة البيانات الخاصة بك، وخدمةredisللتخزين المؤقت. - الشبكات (Networks): يقوم Docker Compose بإعداد شبكة واحدة لتطبيقك افتراضيًا، مما يسمح للخدمات بالتواصل مع بعضها البعض باستخدام أسماء خدماتها كأسماء مضيفين.
- الأحجام (Volumes): تُستخدم لتخزين البيانات بشكل دائم (على سبيل المثال، بيانات قاعدة البيانات) ولتركيب الكود المحلي في الحاويات الخاصة بك، مما يتيح إعادة التحميل المباشر أثناء التطوير.
سير العمل الأساسي والأوامر
-
تحديد الخدمات في
docker-compose.yml: قم بإنشاء ملفdocker-compose.ymlفي الدليل الجذر لمشروعك.إليك مثال بسيط لتطبيق ويب Python Flask متصل بذاكرة تخزين مؤقت Redis:
```yaml
docker-compose.yml
version: '3.8' # يحدد إصدار تنسيق ملف Compose services: web: build: . # البناء من Dockerfile في الدليل الحالي ports: - "8000:5000" # ربط منفذ المضيف 8000 بمنفذ الحاوية 5000 volumes: - .:/code # تركيب الدليل الحالي في دليل /code الخاص بالحاوية environment: FLASK_ENV: development # تعيين متغيرات البيئة REDIS_HOST: redis # استخدام اسم الخدمة 'redis' كاسم مضيف redis: image: "redis:alpine" # استخدام صورة Redis الرسمية ports: - "6379:6379" # ربط منفذ Redis volumes: - redis_data:/data # الاحتفاظ ببيانات Redis volumes: redis_data: # تحديد الحجم المسمى ```
-
بناء وتشغيل تطبيقك: انتقل إلى دليل مشروعك في الطرفية وقم بتشغيل:
bash docker compose upسيقوم هذا الأمر ببناء الصور (إذا لزم الأمر) وتشغيل جميع الخدمات المحددة في ملفdocker-compose.ymlالخاص بك.لتشغيل الخدمات في الخلفية (وضع منفصل)، استخدم:
bash docker compose up -d -
إيقاف وإزالة الخدمات: عند الانتهاء من التطوير، قم بإيقاف وإزالة جميع الحاويات والشبكات والأحجام التي أنشأها Compose باستخدام:
bash docker compose downاستخدمdocker compose down -vلإزالة الأحجام المسماة أيضًا (سيؤدي ذلك إلى حذف البيانات الدائمة). -
عرض السجلات: لعرض سجلات الخدمات قيد التشغيل الخاصة بك:
bash docker compose logs [service_name] # مثال: docker compose logs web # استخدم -f لمتابعة السجلات في الوقت الفعلي: # docker compose logs -f web -
تنفيذ الأوامر في خدمة: يمكنك تشغيل الأوامر داخل حاوية قيد التشغيل باستخدام
exec:bash docker compose exec web bash # هذا يفتح shell bash داخل حاوية خدمة 'web'.
أفضل الممارسات للتطوير المحلي
- تركيب الحجم لإعادة التحميل المباشر: قم بتركيب دليل الكود المحلي الخاص بك في الحاوية (
volumes: - .:/code) حتى تنعكس تغييرات الكود على الفور دون الحاجة إلى إعادة بناء الصورة. - متغيرات البيئة: استخدم ملفات
.envلإدارة المتغيرات الخاصة بالبيئة (مثل مفاتيح API أو بيانات اعتماد قاعدة البيانات) وإبقائها خارج ملفdocker-compose.ymlوالتحكم في الإصدار. - فحوصات الصحة: قم بتطبيق فحوصات الصحة في
docker-compose.ymlللتأكد من أن الخدمات جاهزة قبل بدء الخدمات التابعة. - صور خفيفة الوزن: استخدم صورًا أساسية بسيطة (مثل متغيرات Alpine) وبناءات متعددة المراحل للحفاظ على حجم الصور صغيرًا.
باتباع هذه الخطوات، يمكنك الاستفادة بفعالية من Docker Compose لإنشاء بيئات تطوير محلية متسقة ومعزولة وسهلة الإدارة لتطبيقاتك متعددة الحاويات.