تخطَّ إلى المحتوى

VOLUME

تعليمة VOLUME — نقطة تثبيت للتخزين الدائم VOLUME

VOLUME تعلّم Docker أن مسارًا معيّنًا يجب أن يبقى خارج طبقات الصورة القابلة للكتابة — أي حاوية تُشغَّل منها تحصل على volume مجهول تلقائيًا إن لم تربطه صراحة.

لو حاوية تكتب بيانات مهمة (قاعدة بيانات مثلًا) في مسار معلَّم بـ VOLUME، وحُذفت الحاوية دون ربط صريح لذلك المسار، Docker ينشئ volume مجهول (anonymous) تلقائيًا للحفاظ على البيانات بدل فقدانها فورًا — لكن هذا الـ volume المجهول يبقى معزولًا وصعب الوصول إليه لاحقًا ما لم تعرف اسمه بالضبط. الأفضل عمليًا: اربط اسم volume صريح أو مسارًا على المضيف وقت التشغيل بـ -v بدل الاعتماد على السلوك التلقائي.

لا يمكن تحديد مسار المضيف داخل الـ Dockerfile نفسه — الربط الفعلي (أي مجلّد على جهازك يقابل هذا المسار) يُحدَّد فقط وقت docker run أو في docker-compose.yml، لا في وقت البناء.

الصياغة

VOLUME ["/path/in/container"]
VOLUME /path/in/container

📄 مثال

FROM postgres:16
VOLUME ["/var/lib/postgresql/data"]

# الربط الفعلي وقت التشغيل فقط:
# docker run -v pgdata:/var/lib/postgresql/data postgres:16

أهم النقاط

الخيارالوظيفة
بلا ربط صريحDocker ينشئ volume مجهول تلقائيًا — يحفظ البيانات لكن يصعب العثور عليه لاحقًا
-v name:/pathيربط volume باسم واضح وقت التشغيل — الأسلوب الموصى به
لا يُحدَّد في Dockerfileمسار المضيف المقابل يُحدَّد فقط وقت التشغيل، لا وقت البناء

💡 نصائح عملية

  • علِّم أي مسار بيانات دائمة (قاعدة بيانات، ملفّات مرفوعة) بـ VOLUME حتى لو تعتمد عادة على -v صريحة — توثيق واضح لمن يشغّل الصورة
  • استخدم أسماء volumes واضحة (pgdata لا اسمًا عشوائيًا) في docker-compose.yml بدل ترك Docker ينشئ واحدًا مجهولًا

⚠️ أخطاء شائعة

  • الاعتماد على الـ volume المجهول التلقائي في الإنتاج ثم فقدان تتبّعه بعد docker compose down -v أو حذف الحاوية
  • توقّع أن VOLUME في Dockerfile تحدّد مسار المضيف — هذا يُحدَّد فقط وقت التشغيل بـ -v أو volumes: في compose

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DOCKER الكامل بالعربي.