إصدار يقفز من 2.x إلى 5.0.0 مباشرة
لاحظت أن docker compose version صار يعرض رقمًا يبدأ بـ 5 بدل 2 عندك أو عند فريقك؟ هذا ليس خطأ ولا نسخة قديمة — Compose قفز فعليًا من سلسلة 2.x إلى 5.0.0 دفعة واحدة، متجاوزًا 3.0.0 و4.0.0 عمدًا.
docker compose version
# Docker Compose version v5.x.x
السبب رسمي: فريق Docker تعمّد تخطّي هذين الرقمين لتفادي الخلط مع مفتاح version: القديم في ملفّات docker-compose.yml (صيغة Compose v1 القديمة، التي كانت تحمل قيمًا مثل "2" و"3" كـ schema للملف — لا علاقة لها بإصدار الأداة). الفصل الآن واضح: رقم 5.x هو إصدار الأداة نفسها فقط.
💡 القفزة في رقم الإصدار لا تعني تغييرًا كاسرًا في بنية
compose.yaml— ملفّاتك الحالية (services,build,ports...) تعمل كما هي دون تعديل.
⚠️ إن كان لديك سكربت CI/CD يفحص إصدار Compose بمطابقة نصية على بادئة
"2."فسيفشل هذا الفحص الآن رغم أن Compose يعمل بشكل طبيعي — حدِّث الفحص ليقبل5.أيضًا، أو استخدم مقارنة رقمية بدل مطابقة نصية.
البناء لم يعد بمحرّك Compose الداخلي
التغيير الجوهري الفعلي وراء القفزة: المحرّك الداخلي القديم الذي كان docker compose build يعتمده لبناء الصور أُزيل بالكامل من v5.0.0. أي بناء عبر Compose — سواء docker compose build أو docker compose up --build — يُفوَّض الآن كاملًا لـ Docker Bake (نفس الأداة خلف docker buildx bake، ونفس محرّك BuildKit الذي يستخدمه docker build العادي، والذي تعرّفنا عليه في درس BuildKit وBuildx).
services:
app:
build:
context: .
dockerfile: Dockerfile
# هذا القسم يُبنى الآن فعليًا عبر Bake خلف الكواليس
عمليًا لا يتغيّر شيء في كتابة compose.yaml نفسه — البناء يعمل كما اعتدت. الفرق أن Compose صار يتّبع تطوّرات Bake وBuildKit مباشرة، بدل صيانة نسخة داخلية منفصلة قد تتأخّر عن الأداة الرئيسية.
Compose كـ SDK
فتح الإصدار 5.0.0 أيضًا إمكانية استخدام Compose كمكتبة (SDK) تُدمَج داخل أدوات أخرى برمجيًا، لا فقط كأداة CLI تُستدعى من الطرفية. هذا التغيير يستهدف بالدرجة الأولى مطوّري الأدوات المبنية فوق Compose (منصّات PaaS، لوحات تحكّم داخلية تُشغّل حاويات نيابة عن المستخدم) — ولا يؤثر على استخدامك اليومي المعتاد لـ docker compose up.
هل تحتاج تغيير أي شيء؟
| الوضع | هل يتأثر؟ |
|---|---|
ملف compose.yaml عادي (services, build, ports...) | لا — يعمل كما هو دون أي تعديل |
سكربت يفحص الإصدار بمطابقة نصية على "2." | نعم — حدّث الفحص ليقبل 5. |
| اعتماد مباشر على تفاصيل داخلية للمحرّك القديم في بناء مخصّص جدًا (نادر) | راجع درس BuildKit وBuildx لفهم المحرّك الجديد المسؤول عن البناء الآن |
🎯 التالي: خلاصة مسار Docker