1.3 · المجلدات : تخليد البيانات بعد الحاويات

المستوى 1 · الحاويات : الصور، المجلدات، الشبكات

1.3المجلدات : تخليد البيانات بعد الحاويات

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

الأساسي في 30 ثانية

  • الحاوية (Conteneur) زائلة : كل ما تكتبه في ذاتها يموت معها (rm = كل شيء ضائع) — فقاعدة دون مجلد غير مقبولة : نخزّن خارج الحاوية.
  • مسمّى للبيانات، وربط للشيفرة : -v pgdata:/var/lib/postgresql/data (مجلد (Volume) تديره Docker، محمول) للبيانات ؛ و-v ./site:/usr/share/nginx/html (مجلد الجهاز) للشيفرة في التطوير.
  • الاختبار المنقذ : احذفوا الحاوية، وأعيدوا التشغيل على المجلد نفسه — فيجب أن تكون البيانات هناك ؛ وdocker volume ls يجرد، وrm يحذف (نهائي).

حالة مستمرة — إدير يفقد (تقريبا) قاعدة

شغّل إدير قاعدة العرض دون مجلد « للسرعة ». وفي المساء، حذف الحاوية ليبدأ نظيفا — وأدرك أن بيانات التجربة المدخلة بعد الظهر ضاعت معها. وفي الغد، أعاد التشغيل مع -v pgdata:/var/lib/postgresql/data، وأعاد إنشاء البيانات، وحذف الحاوية، وأعاد التشغيل على المجلد نفسه : فكل شيء هناك. وحوّل فزعة إلى منعكس : البيانات = مجلد مسمّى، متحقق منه باختبار rm + إعادة تشغيل قبل كل إقلاع جدي.

تتمة حالة 1.1-1.2 — ينتقل إدير من الحاويات المرمية إلى البيانات الناجية.

1. مأساة الحاوية الزائلة

افتراضيا، كل ما تكتبه حاوية في ذاتها يموت معها (rm = كل شيء ضائع). فقاعدة بيانات، هذا غير مقبول. والحل : التخزين خارج الحاوية، في مجلد تديره Docker أو مجلد مربوط من الجهاز.

واحذروا الصديق الكاذب : stop لا يمحو شيئا، وrm يمحو كل غير مربوط. واعتقاد العكس هو أشهر فقدان بيانات في المستوى 1.

2. المجلد المسمّى مقابل الربط

فـ المجلد المسمّى (-v pgdata:/var/lib/postgresql/data) تخزّنه Docker، محمول وقابل للنسخ : الاختيار للبيانات. والربط (-v ./site:/usr/share/nginx/html) يربط مجلدا من جهازكم : الاختيار للشيفرة في التطوير (عدّلوا ملفا، فتراه الحاوية فورا).

والفخ هو المسار الداخلي الخطأ : فالربط بجانب المجلد الذي يكتب فيه التطبيق حقا هو تخليد للفراغ. نتحقق من المسار في توثيق الصورة.

3. المنعكس المنقذ : اختبار الحذف

اختبار الحقيقة : احذفوا الحاوية، وأعيدوا تشغيل واحدة على المجلد نفسه — فيجب أن تكون البيانات هناك. وdocker volume ls يجرد، وdocker volume rm يحذف (احذروا، نهائي). والمجلدات اليتيمة تُطهّر بـ prune، بحذر.

وجعلها إدير طقسا : فلا خدمة بيانات تنطلق للعرض دون اجتياز اختبار rm + إعادة التشغيل.

خطأ شائع في الفهم: « stop يمحو بياناتي، ومجلد مربوط عشوائيا يكفي لإنقاذها ». لا في الاتجاهين : فـ stop يحفظ كل شيء (وrm وحده يدمّر)، وربط في مسار داخلي خطأ يخلّد الفراغ بينما يكتب التطبيق في مكان آخر. مجلد مسمّى في المسار الصحيح، ثم اختبار rm + إعادة تشغيل للإثبات.
بيانات دائمة الحاوية تموت، والمجلد ينجو حاوية زائلة كلالداخلي يموت مع rmمجلد مسمّى تديرهDocker، محمولإعادة تشغيل متماثلة البياناتنفسها على المجلد نفسه
الحاوية تموت، والمجلد ينجو
نص المخطط (SEO / قارئات الشاشة / الترجمة): 1) المعاينة : يحذف إدير حاويته دون مجلد فيفقد بياناته — فالزائل يعاقب. 2) الربط : يعيد التشغيل مع -v pgdata:/var/lib/postgresql/data، في المسار الموثّق للصورة. 3) الإثبات : rm للحاوية ثم إعادة التشغيل على pgdata — والبيانات ما زالت هناك. الدرس : دون -v، التسلسل نفسه يمحو كل شيء ؛ واختبار rm + إعادة التشغيل هو الإثبات الوحيد.

🔎 مثال ملموس — 🔎 مثال ملموس — Postgres تنجو من rm

قاعدة إدير، قبل وبعد : مع مجلد، لا شيء يضيع.

docker run -d --name bdd -e POSTGRES_PASSWORD=secret -v pgdata:/var/lib/postgresql/data postgres:16.4
# ... أنشئوا بيانات ...
docker rm -f bdd
docker run -d --name bdd2 -e POSTGRES_PASSWORD=secret -v pgdata:/var/lib/postgresql/data postgres:16.4
# البيانات ما زالت هناك

القراءة : نجا المجلد pgdata من حذف الحاوية.

الدرس : دون -v، التسلسل نفسه كان محا كل شيء.

مفردات القسم

المجلد المسمّى
مساحة تخزين تديرها Docker، دائمة خارج الحاويات، محمولة وقابلة للنسخ.

مثال بسيط: يحفظ pgdata قاعدة إدير بين bdd وbdd2.

ما ليس كذلك: ملف مكتوب في الحاوية دون ربط.

رد فعل: البيانات = مجلد مسمّى.

الربط
مجلد من الجهاز مربوط كما هو في الحاوية ؛ مثالي للشيفرة في التطوير.

مثال بسيط: -v ./site:/usr/share/nginx/html : يعدّل إدير، فترى الحاوية فورا.

ما ليس كذلك: تخزين محمول لقاعدة إنتاج.

رد فعل: شيفرة التطوير = ربط، وبيانات الإنتاج = مجلد مسمّى.

نقطة الربط
المسار الداخلي الذي يظهر فيه المجلد في الحاوية ؛ ويجب أن يكون حيث يكتب التطبيق.

مثال بسيط: /var/lib/postgresql/data لـ postgres:16.4.

ما ليس كذلك: مجلد ما مختار عشوائيا.

رد فعل: تحققوا من المسار في توثيق الصورة.

prune
تنظيف الموارد غير المستعملة، والمجلدات اليتيمة ضمنها — حذف نهائي.

مثال بسيط: يطهّر إدير مجلدات تجاربه المرمية، وليس pgdata أبدا.

ما ليس كذلك: سلة يمكن استعادة محتواها.

رد فعل: تحققوا من القائمة قبل كل prune.

في التطبيق — عمليا — أثبتوا الدوام

  1. شغّلوا postgres مع مجلد مسمّى وأنشئوا جدولا.
  2. احذفوا الحاوية (rm -f) دون لمس المجلد.
  3. أعيدوا تشغيل حاوية على المجلد نفسه وتحققوا من الجدول.
  4. أعيدوا التجربة دون مجلد : لاحظوا الفقدان.
لن تفقدوا قاعدة أبدا : فالمجلد منعكس.

نص جاهز — أمّنوا قاعدة (30 ثانية)

« بياناتي في مجلد مسمّى : -v pgdata:/var/lib/postgresql/data، في المسار الموثّق للصورة. أُثبت : أحذف الحاوية، وأعيد التشغيل على المجلد نفسه، والبيانات هناك. ودون مجلد، التسلسل نفسه يمحو كل شيء. »

يُقال مع تنفيذ rm + إعادة التشغيل مباشرة ؛ مع عرض الجدول ما زال حاضرا.

قالب جاهز للنسخ — قاعدة دائمة

docker run -d --name bdd \
  -e POSTGRES_PASSWORD=secret \
  -v pgdata:/var/lib/postgresql/data \
  postgres:16.4
# الإثبات : docker rm -f bdd، وإعادة التشغيل مثلها في --name bdd2، والتحقق.
# أبدا : docker volume rm pgdata (نهائي) ولا prune دون تحقق.

قاعدة إدير في العرض

كما أعلاه : pgdata مسمّى كالخدمة، واختبار rm + إعادة التشغيل مجتاز قبل عرض أي شيء على المسؤول.

موقع ويب في التطوير

-v ./site:/usr/share/nginx/html : يحرّر إدير صفحاته على جهازه، فتقدّمها حاوية Nginx فورا — ربط، لا مجلد مسمّى.

استدراك بعد فزعة

قاعدة شُغّلت دون مجلد خطأ : أنشئوا المجلد، وأعيدوا التشغيل مع -v، وأعيدوا الإدخال — واحفظوا المنعكس « البيانات = مجلد مسمّى ».

ترتيب التجارب

docker volume ls للجرد، وrm مستهدَف لمجلدات التجربة، وprune بعد التحقق فقط — وليس على pgdata أبدا.

حذر: المجلد المحذوف (docker volume rm، أو prune متسرّع) ضائع نهائيا : لا سلة. وقبل كل تنظيف، اسردوا (docker volume ls)، وحدّدوا مجلد كل خدمة عاملة، ولا تطهّروا إلا اليتامى المتحقق منها — وليس عميانا على جهاز مشترك أبدا.

✓ ممارسات جيدة

  • البيانات = مجلد مسمّى، وشيفرة التطوير = ربط.
  • اختبروا rm + إعادة التشغيل قبل التصديق.
  • سمّوا المجلدات كالخدمات (pgdata).

✗ أخطاء شائعة

  • اعتقاد أن stop يمحو (لا) وأن rm يحفظ (لا).
  • الربط في مسار داخلي خطأ (بيانات بجانب).
  • تطهير المجلدات (prune) دون تحقق.

النقاط الأساسية

  • دون مجلد، rm = فقدان كامل.
  • المجلد المسمّى للبيانات، والربط للشيفرة.
  • اختبار rm + إعادة التشغيل يثبت الدوام.
  • prune بحذر : حذف نهائي.

تحدي 48 ساعة — طبّق غدا

شغّلوا postgres مع مجلد مسمّى، وأنشئوا جدولا، ونفّذوا rm -f + إعادة تشغيل وتحققوا. ثم أعيدوا دون مجلد : لاحظوا الفقدان — ولا تنسوه أبدا.

قائمة الخروج من القسم
  • أربط مجلدا مسمّى لكل بيانات تهم.
  • أميّز المجلد المسمّى (بيانات) والربط (شيفرة تطوير).
  • أثبت الدوام بـ rm + إعادة تشغيل قبل الاستعمال الجدي.
تقييم ذاتي 1-5 : هل لكل حاوية بيانات مجلدها المسمّى في المسار الصحيح؟هل اجتزت اختبار rm + إعادة التشغيل؟

أسئلة شائعة

أين المجلدات على قرصي؟

في فضاء Docker (يعطي docker volume inspect pgdata المسار). لا نعالجها يدويا : نمر عبر حاويات أو نسخ احتياطية.

ربط أم مجلد لقاعدة في الإنتاج؟

مجلد مسمّى : محمول، وقابل للنسخ، ومستقل عن شجرة الجهاز. والربط محفوظ للتطوير وملفات الضبط.

تحقّق من فهمك

حُذفت حاوية postgres دون مجلد (rm). ماذا يصير لبياناتها؟

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

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