3.2قيادة الستاك (stack) : up و down و logs و ps
الأساسي في 30 ثانية
- up -d ينشئ كل شيء : الشبكات والمجلدات، وبناء/سحب الصور، وبدء التشغيل بالترتيب — و--build يفرض إعادة البناء بعد تغيير الكود.
- المراقبة حسب الخدمة، مسبوقة بكومبوز : compose ps يسرد الستاك، وlogs -f bdd يتبع خدمة، وexec web sh يدخل إليها — ولا docker ps الشامل أبدا الذي يخلط كل شيء.
- down يحتفظ، و -v يدمر : down يوقف ويحذف الحاويات + الشبكة مع الاحتفاظ بالمجلدات ؛ وdown -v يمحو أيضا المجلدات — إعادة ضبط إرادية فقط.
حالة مصغرة مسلسلة — إدير والـ down الزائد
إدير، ديفوبس مبتدئ في الجزائر، « ينظف » جهازه مع docker compose down -v قبل عرض — فيمحو قاعدة الاختبار التي ملأها زميله أمس. يعتمد الدورة الآمنة : up -d، ثم compose ps، ثم logs -f bdd، ثم exec web sh، ثم down دون -v افتراضيا. وعند الـ up الثاني، القاعدة سليمة : فقد فهم أن down وحده إيقاف آمن، وأن -v إعادة ضبط تُقرَّر، وليست تنظيفا أبدا.
هذه الحالة نفسها تعود في الدرس والمخطط والنص الجاهز وتحدي 48 ساعة.
1. up : البناء والبدء، والرؤية : ps و logs و exec
ينشئ docker compose up -d الشبكات والمجلدات، ويحمّل أو يبني الصور، ثم يطلق الخدمات بالترتيب — في الخلفية (-d). ودون -d، تلتصق السجلات بالطرفية : عملي في التطوير لرؤية ولادة الستاك، ومعرقل في الخدمة. وبعد تغيير الكود، يفرض --build إعادة البناء : فدونه، يعيد كومبوز استعمال الصورة الموجودة ولا يؤخَذ كودكم الجديد.
وللرؤية : يسرد docker compose ps حاويات المشروع، ويتبع logs -f bdd سجلات خدمة مباشرة (ودون اسم، كل الستاك، وكل سطر مسبوق باسمه)، وexec web sh يدخل حاوية. القاعدة الذهبية : التسبيق بكومبوز دائما — فـ docker ps يخلط كل مشاريع الآلة ويجعل التشخيص على الحاوية الخطأ.
2. down : إيقاف آمن افتراضيا، وإعادة ضبط بقرار
يوقف docker compose down الحاويات + الشبكة ويحذفها، لكنه يحتفظ بالمجلدات : فبياناتكم تنجو، والـ up الثاني يجدها. إنه الإيقاف الآمن، إيقاف اليومي. وdown -v يمحو زيادة على ذلك المجلدات : إعادة ضبط إرادية للانطلاق من صفر (قاعدة اختبار تُصفَّر)، وتُحفَظ لستاك مهمل أو مُقَر.
وعند الشك : دون -v. فالدراما الكلاسيكية — down -v « للتنظيف » قبل عرض — تُتجنَّب بهذا الافتراضي. وقد اتخذ إدير قاعدة موشومة : down وحده للإيقاف، و -v فقط عندما يستطيع تسمية ما يقبل فقدانه. فالدورة up ← المراقبة ← down (دون -v) آمنة بالبناء.
التنظيف الزائد
التنظيف هو down وحده ؛ و -v هو الانتقال.
🔎 مثال ملموس — دورة كاملة : القاعدة تنجو من إعادة التشغيل
يتسلسل إدير في الدورة الآمنة على ستاك الوب + القاعدة.
docker compose up -d
docker compose ps
docker compose logs -f bdd
docker compose exec web sh
docker compose down
docker compose up -d # البيانات موجودة
# إعادة ضبط إرادية على ستاك مهمل فقط :
# docker compose down -v
القراءة : يجد الـ up الثاني القاعدة سليمة — فـ down وحده يحفظ.
الدرس : down دون -v = إيقاف آمن ؛ ومع -v = إعادة ضبط مُقَرَرة، وليست تنظيفا أبدا.
مفردات القسم
- up
- إنشاء كل الستاك وبدؤه : الشبكات والمجلدات والصور (بناء/سحب) والحاويات بالترتيب — و -d للخلفية.
مثال بسيط: الـ up -d الخاص بإدير كل صباح على النموذج.
ما ليس كذلك: بدء كل حاوية يدويا بالترتيب الصحيح.
رد فعل: --build بعد كل تغيير كود.
- down
- إيقاف الحاويات + الشبكة وحذفها مع الاحتفاظ بالمجلدات : الإيقاف الآمن اليومي.
مثال بسيط: الـ down المسائي الخاص بإدير، والقاعدة سليمة صباحا.
ما ليس كذلك: إيقاف يمحو القاعدة.
رد فعل: down وحده افتراضيا، دائما.
- down -v
- down + حذف المجلدات (VOLUMES) : إعادة ضبط إرادية للانطلاق من صفر، وليست تنظيفا أبدا.
مثال بسيط: إعادة الضبط المُقَرة لقاعدة اختبار مهملة.
ما ليس كذلك: « تنظيف » قبل عرض مع بيانات حقيقية.
رد فعل: سمِّ ما تقبل فقدانه قبل كل -v.
- ps (كومبوز)
- سرد حاويات المشروع فقط — المحيط الصحيح للتشخيص.
مثال بسيط: يُظهر compose ps ستاك إدير، ولا شيء آخر.
ما ليس كذلك: الـ docker ps الشامل الذي يخلط كل المشاريع.
رد فعل: سبّق بكومبوز دائما.
- logs -f / exec
- تتبع سجلات خدمة مباشرة (logs -f bdd) والدخول إلى حاوية (exec web sh).
مثال بسيط: يتبع إدير القاعدة عند بدء التشغيل ثم يفحص الوب.
ما ليس كذلك: تخمين العطل دون قراءة السجلات.
رد فعل: فـ ps يرصد، و logs يتهم، و exec يتحقق.
في التطبيق — إتقان الدورة دون المخاطرة بالبيانات
- اطلقوا ستاككم مع -d واسردوه مع compose ps (وقارنوا مع docker ps الشامل).
- تتبعوا سجلات القاعدة (logs -f bdd) وادخلوا إلى الوب (exec web sh).
- أوقفوا مع down، وأعيدوا الإطلاق : تحققوا من نجاة البيانات.
- جربوا down -v على ستاك مهمل فقط، ولاحظوا الفقدان — مرة واحدة تكفي.
نص جاهز للقول — شرح الدورة لوافد جديد (30 ثانية)
« up -d للبدء، و compose ps و logs لمراقبة ستاكك — ولا ps الشامل أبدا. وللإيقاف : down وحده، والبيانات تنجو. والـ -v إعادة ضبط تمحو المجلدات : فقط على المهمل، وليست للتنظيف أبدا. »
يُقال عند تأهيل الوافدين ؛ ونفذوا الدورة مرة معا.
نموذج نسخ-لصق — ستاك مهمل للتدريب
# ستاك مهمل : لتتدربوا عليه (down -v) دون خطر.
services:
web:
image: nginx:1.27
ports:
- "8080:80"
networks:
- bacnet
bdd:
image: postgres:16.4
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- bacdata:/var/lib/postgresql/data
networks:
- bacnet
volumes:
bacdata:
networks:
bacnet:
مستقل
الدورة up ← compose ps/logs ← down وحده وعروضكم تنجو من إعادة التشغيل.
مقاولة صغيرة في الجزائر
يكوّن إدير زميله : down وحده مساء، والقاعدة سليمة صباحا.
فريق منتج
قاعدة الفريق : ممنوع -v خارج الستاك المهمل المسمى (bac، و test).
مبتدئ
هذا الأسبوع : دورة كاملة + إعادة ضبط -v على مهمل، لتحسوا الفرق.
✓ ممارسات جيدة
- دائما compose + فعل (ps و logs و exec) للبقاء في محيط المشروع.
- down دون -v افتراضيا ؛ و -d في الخدمة، وملتصق فقط في التنقيح.
- أضيفوا --build بعد كل تغيير كود، أو اركبوا الكود ربطا في التطوير.
✗ أخطاء شائعة
- down -v « للتنظيف » : تُمحَى بيانات المشروع.
- docker ps بدل compose ps : نشخص الحاوية الخطأ.
- نسيان --build بعد تغيير الكود : فالصورة القديمة ما زالت تدور.
النقاط الأساسية
- UP ينشئ كل شيء (-d في الخلفية) ؛ و --build يفرض إعادة البناء بعد تغيير الكود.
- PS / LOGS / EXEC حسب الخدمة، ومسبوقة دائما بكومبوز (محيط المشروع).
- DOWN يحتفظ بالمجلدات (إيقاف آمن) ؛ و -v يدمرها (إعادة ضبط إرادية فقط).
- الدورة up ← المراقبة ← down (دون -v) آمنة بالبناء.
تحدي 48 ساعة — طبّق غدا
نفذوا دورة كاملة واحدة على ستاككم (up -d، و ps، و logs، و exec، و down، وإعادة up) وأثبتوا نجاة البيانات.
- أطلق في الخلفية وأعيد البناء مع --build عندما يتغير الكود.
- أراقب حسب الخدمة في محيط كومبوز.
- أوقف مع down وحده ؛ و -v فقط على مهمل مُقَر.
أسئلة شائعة
لا يأخذ up كودي الجديد، لماذا ؟
لأن الصورة لم تُعَد بناؤها : يعيد كومبوز استعمال الصورة الموجودة افتراضيا. أضيفوا --build (up -d --build) بعد كل تغيير كود، أو اركبوا الكود ربطا (bind mount) في التطوير لإعادة تحميل مباشرة. وتحققوا مع compose ps من أن الحاوية أُعيد إنشاؤها للتو.
كيف أتابع خدمات عدة معا ؟
اطلقوا docker compose logs -f دون اسم خدمة : يتدفق كل الستاك، وكل سطر مسبوق باسم الخدمة. مثالي عند بدء التشغيل لرؤية الترتيب الحقيقي ورصد من يفشل. ثم زوموا مع logs -f bdd على المشتبه، ثم exec للدخول إليه.
تريدون إيقاف الستاك مع الاحتفاظ بالقاعدة. أي أمر ؟