1.3المجلدات : تخليد البيانات بعد الحاويات
الأساسي في 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 + إعادة التشغيل.
🔎 مثال ملموس — 🔎 مثال ملموس — 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.
في التطبيق — عمليا — أثبتوا الدوام
- شغّلوا postgres مع مجلد مسمّى وأنشئوا جدولا.
- احذفوا الحاوية (rm -f) دون لمس المجلد.
- أعيدوا تشغيل حاوية على المجلد نفسه وتحققوا من الجدول.
- أعيدوا التجربة دون مجلد : لاحظوا الفقدان.
نص جاهز — أمّنوا قاعدة (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 أبدا.
✓ ممارسات جيدة
- البيانات = مجلد مسمّى، وشيفرة التطوير = ربط.
- اختبروا rm + إعادة التشغيل قبل التصديق.
- سمّوا المجلدات كالخدمات (pgdata).
✗ أخطاء شائعة
- اعتقاد أن stop يمحو (لا) وأن rm يحفظ (لا).
- الربط في مسار داخلي خطأ (بيانات بجانب).
- تطهير المجلدات (prune) دون تحقق.
النقاط الأساسية
- دون مجلد، rm = فقدان كامل.
- المجلد المسمّى للبيانات، والربط للشيفرة.
- اختبار rm + إعادة التشغيل يثبت الدوام.
- prune بحذر : حذف نهائي.
تحدي 48 ساعة — طبّق غدا
شغّلوا postgres مع مجلد مسمّى، وأنشئوا جدولا، ونفّذوا rm -f + إعادة تشغيل وتحققوا. ثم أعيدوا دون مجلد : لاحظوا الفقدان — ولا تنسوه أبدا.
- أربط مجلدا مسمّى لكل بيانات تهم.
- أميّز المجلد المسمّى (بيانات) والربط (شيفرة تطوير).
- أثبت الدوام بـ rm + إعادة تشغيل قبل الاستعمال الجدي.
أسئلة شائعة
أين المجلدات على قرصي؟
في فضاء Docker (يعطي docker volume inspect pgdata المسار). لا نعالجها يدويا : نمر عبر حاويات أو نسخ احتياطية.
ربط أم مجلد لقاعدة في الإنتاج؟
مجلد مسمّى : محمول، وقابل للنسخ، ومستقل عن شجرة الجهاز. والربط محفوظ للتطوير وملفات الضبط.
حُذفت حاوية postgres دون مجلد (rm). ماذا يصير لبياناتها؟