3.2 · قيادة الستاك (stack) : up و down و logs و ps

المستوى 3 · دوكر كومبوز (Docker Compose)

3.2قيادة الستاك (stack) : up و down و logs و ps

الهدف: بدء ستاك كومبوز ومتابعته وإيقافه دون خطأ.
الوقت المقدّر: 11 دقيقة · قراءة ذاتية · إذا كان لديك 5 دقائق فقط: اقرأ «الأساسي في 30 ثانية» + المخطط.

الأساسي في 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 ps لرؤية ستاكي ». لا، مرتين. فـ down -v يدمر مجلدات المشروع : فليس تنظيفا، بل إعادة ضبط — والتنظيف المعياري هو down وحده. و docker ps يعرض الآلة كلها : فلرؤية ستاكه، يلزم compose ps. فمحيط المشروع من جهة، والمجلدات المحفوظة من جهة أخرى.
الدورة الآمنة للستاك البدء والمراقبة والإيقاف دون فقدان up -d (--build إذا تغير الكود) ينشئكل شيء، ويطلق في الخلفيةps / logs -f / exec مراقبة حسبالخدمة، مسبوقة بكومبوزdown دون -v حاويات + شبكةمحذوفة، وبيانات محفوظةup ثان سليم -v فقطلإعادة ضبط مُقَرَرة
البدء والمراقبة والإيقاف دون فقدان
نص المخطط (SEO / قارئات الشاشة / الترجمة): 1) البدء : يطلق إدير up -d (--build بعد كل تغيير كود) بدل إلصاق السجلات في الإنتاج. 2) المراقبة : compose ps لمحيط المشروع، و logs -f bdd للقاعدة، و exec للدخول إلى الوب. 3) الإيقاف : down دون -v — حاويات وشبكة محذوفة، ومجلدات محفوظة، و up ثان سليم. الدرس : up ينشئ، وكومبوز يراقب، و down وحده يحفظ.

التنظيف الزائد

« نفذ إدير down -v “للتنظيف” قبل العرض — فاختفت قاعدة الاختبار التي ملأها زميله معها. »
ومنذئذ، -v فقط على الستاك المسمى bac

التنظيف هو 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 يتحقق.

في التطبيق — إتقان الدورة دون المخاطرة بالبيانات

  1. اطلقوا ستاككم مع -d واسردوه مع compose ps (وقارنوا مع docker ps الشامل).
  2. تتبعوا سجلات القاعدة (logs -f bdd) وادخلوا إلى الوب (exec web sh).
  3. أوقفوا مع down، وأعيدوا الإطلاق : تحققوا من نجاة البيانات.
  4. جربوا 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 فقط على مهمل مُقَر.
تقييم ذاتي 1-5 : هل أسمي ما سيدمره -v قبل كتابته ؟هل أسبّق منهجيا بكومبوز ؟

أسئلة شائعة

لا يأخذ up كودي الجديد، لماذا ؟

لأن الصورة لم تُعَد بناؤها : يعيد كومبوز استعمال الصورة الموجودة افتراضيا. أضيفوا --build ‏(up -d --build)‏ بعد كل تغيير كود، أو اركبوا الكود ربطا (bind mount) في التطوير لإعادة تحميل مباشرة. وتحققوا مع compose ps من أن الحاوية أُعيد إنشاؤها للتو.

كيف أتابع خدمات عدة معا ؟

اطلقوا docker compose logs -f دون اسم خدمة : يتدفق كل الستاك، وكل سطر مسبوق باسم الخدمة. مثالي عند بدء التشغيل لرؤية الترتيب الحقيقي ورصد من يفشل. ثم زوموا مع logs -f bdd على المشتبه، ثم exec للدخول إليه.

تحقّق من فهمك

تريدون إيقاف الستاك مع الاحتفاظ بالقاعدة. أي أمر ؟

موارد إضافية (اختياري، للتعمّق أكثر)

اختبار المستوى 3أسئلة جديدة وأصعب للتحقق من مكتسباتك