,

Docker Volumes: شرح مبسط لكيفية حفظ وتخزين بيانات الحاويات بشكل دائم

عندما تعمل مع Docker Containers، أحد أكبر التحديات التي تواجهك هي أن الحاويات مؤقتة بطبيعتها — فكلما حذفت Container، تختفي معه جميع البيانات التي بداخله. هذا يمثل مشكلة كبيرة في التطبيقات الحقيقية مثل قواعد البيانات أو المواقع التي تحتاج إلى الاحتفاظ بالملفات والمعلومات حتى بعد إعادة التشغيل أو التحديث.

هنا يأتي دور Docker Volumes، وهي الآلية التي يوفرها Docker لحفظ البيانات بشكل دائم ومستقل عن دورة حياة الحاوية. في هذا المقال، سنشرح Docker Volumes بطريقة مبسطة مع أمثلة عملية لتتمكن من فهمها وتطبيقها فورًا.

ما هي Docker Volumes؟

Docker Volume هو مساحة تخزين دائمة يتم إدارتها بالكامل بواسطة Docker، وتوجد خارج نظام الملفات الخاص بالحاوية ولكنها متصلة بها. الفكرة الأساسية هي فصل البيانات عن التطبيق — بحيث يمكن حذف الحاوية أو إعادة إنشائها دون فقدان أي شيء.

لفهم الصورة أكثر:

داخل الحاويةداخل Volume
مؤقت — يُحذف بحذف الحاويةدائم — يبقى حتى تحذفه أنت
مرتبط بدورة حياة الحاويةمستقل تمامًا
يصعب الوصول إليه من حاويات أخرىيمكن مشاركته بين أي عدد من الحاويات

ملاحظة: Volumes تُخزَّن في مسار مخصص يديره Docker (عادةً /var/lib/docker/volumes/ على لينكس)، ولا يُنصح بالتعديل عليها يدويًا.

لماذا نستخدم Docker Volumes؟

هناك أسباب رئيسية تجعل Docker Volumes الخيار الأمثل لحفظ البيانات:

  1. الحفاظ على البيانات — يمكنك حذف الحاوية وإعادة إنشائها وستجد بياناتك كما هي.
  2. مشاركة البيانات — يمكن ربط نفس الـ Volume مع عدة Containers في نفس الوقت.
  3. النسخ الاحتياطي والاستعادة — يمكنك عمل Backup لـ Volume بسهولة عبر أوامر بسيطة.
  4. إدارة التطبيقات — فصل البيانات عن الكود يسهل التحديثات وإدارة الإصدارات.
  5. أداء ممتاز — Volumes تُدار مباشرة بواسطة Docker، مما يوفر أداءً أفضل من طرق أخرى مثل Bind Mounts.

خلاصة: استخدم Volumes عندما تحتاج إلى بقاء البيانات بعد إعادة تشغيل أو حذف الحاوية — وهذا يشمل معظم التطبيقات الحقيقية.

أنواع التخزين في Docker

يقدم Docker ثلاث طرق رئيسية لتخزين البيانات:

Docker Volumes

  • الاستخدام: الحالات التي تحتاج فيها إلى تخزين دائم وآمن، مثل قواعد البيانات والملفات الهامة.
  • المميزات: سهل الإدارة، آمن، أداء عالٍ، تدار بالكامل بواسطة Docker.

Bind Mounts

  • متى تستخدم: عندما تريد ربط مجلد محدد من جهاز المضيف (Host) مباشرة مع الحاوية — مثل مشاركة كود التطوير.
  • المميزات والعيوب: سهولة الوصول المباشر للملفات، لكنها تعتمد على بنية المجلدات في نظام التشغيل المضيف وقد تسبب مشاكل في الأمان.

tmpfs Mounts

  • الاستخدام: البيانات المؤقتة التي لا تحتاج إلى بقائها بعد إيقاف الحاوية، مثل ملفات الجلسات المؤقتة.
  • متى تكون مناسبة: عندما تريد سرعة عالية ولا تهتم ببقاء البيانات.

خلاصة: Volumes هي الخيار الافتراضي الموصى به لمعظم الحالات، بينما Bind Mounts مناسبة للتطوير المحلي، وtmpfs للبيانات المؤقتة فقط.

إنشاء Docker Volume

لإنشاء Volume جديد، استخدم الأمر:

docker volume create my_volume

بعد الإنشاء، يمكنك عرض جميع Volumes الموجودة:

docker volume ls

سترى قائمة بجميع Volumes، بما في ذلك my_volume الذي أنشأته للتو.

لعرض تفاصيل الـ Volume:

docker volume inspect my_volume

هذا الأمر يعرض معلومات مثل مسار التخزين الفعلي واسم الـ Volume وإعداداته.

ملاحظة: إذا استخدمت Volume في أمر docker run دون إنشائه مسبقًا، سيقوم Docker بإنشائه تلقائيًا.

استخدام Docker Volume مع Container

المثال التالي يشغل MySQL مع Volume لحفظ البيانات:

docker run -d 
  --name mysql 
  -v mysql_data:/var/lib/mysql 
  -e MYSQL_ROOT_PASSWORD=root 
  mysql:8

شرح الأمر:

  • -v mysql_data:/var/lib/mysql — يربط Volume باسم mysql_data مع المسار /var/lib/mysql داخل الحاوية (وهو مسار تخزين MySQL الافتراضي).
  • --name mysql — يعطي الحاوية اسمًا سهل الاستخدام.
  • -e MYSQL_ROOT_PASSWORD=root — يحدد كلمة سر لقاعدة البيانات.

إذا أعدت تشغيل الحاوية أو حذفتها وأعدت إنشاءها بنفس الأمر، ستجد أن جميع قواعد البيانات والجداول ما زالت موجودة — لأنها محفوظة في الـ Volume وليس داخل الحاوية.

مثال عملي لحفظ بيانات قاعدة بيانات MySQL

هذا المثال يوضح بالخطوات كيف تبقى البيانات آمنة:

الخطوة 1: أنشئ Volume:

docker volume create mysql_data

الخطوة 2: شغّل حاوية MySQL:

docker run -d 
  --name mysql 
  -v mysql_data:/var/lib/mysql 
  -e MYSQL_ROOT_PASSWORD=root 
  mysql:8

الخطوة 3: ادخل إلى الحاوية وأنشئ قاعدة بيانات:

docker exec -it mysql mysql -uroot -proot -e "CREATE DATABASE test_db;"

الخطوة 4: احذف الحاوية (نعم، احذفها!):

docker rm -f mysql

الخطوة 5: شغّل حاوية جديدة بنفس الـ Volume:

docker run -d 
  --name mysql_new 
  -v mysql_data:/var/lib/mysql 
  -e MYSQL_ROOT_PASSWORD=root 
  mysql:8

الخطوة 6: تأكد من بقاء قاعدة البيانات:

docker exec -it mysql_new mysql -uroot -proot -e "SHOW DATABASES;"

ستجد أن test_db ما زالت موجودة! هذا هو جوهر Docker Volumes.

إدارة Docker Volumes

إليك الأوامر الأساسية لإدارة الـ Volumes:

الأمرالوصف
docker volume create [name]إنشاء Volume جديد
docker volume lsعرض جميع Volumes
docker volume inspect [name]عرض تفاصيل Volume
docker volume rm [name]حذف Volume معين
docker volume pruneحذف جميع Volumes غير المستخدمة

تحذير: أمر docker volume prune يحذف جميع Volumes غير المرتبطة بأي حاوية نشطة. تأكد قبل استخدامه أنك لا تحتاج إلى هذه البيانات.

استخدام Docker Compose مع Volumes

في المشاريع الحقيقية، نادرًا ما تستخدم أوامر docker run مباشرة. بدلًا من ذلك، يستخدم الجميع Docker Compose لإدارة الخدمات.

مثال كامل لموقع WordPress مع MySQL:

version: "3"

services:
  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
    volumes:
      - db_data:/var/lib/mysql

  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: root
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress_data:/var/www/html

volumes:
  db_data:
  wordpress_data:

شرح المثال:

  • db_data — Volume لحفظ قاعدة بيانات MySQL.
  • wordpress_data — Volume لحفظ ملفات WordPress (مثل الصور والإضافات).
  • كل خدمة تستخدم Volume الخاص بها لمنع تعارض البيانات.
  • حتى بعد تنفيذ docker compose down، تبقى البيانات محفوظة. لإعادة التشغيل استخدم docker compose up -d.

أفضل الممارسات (Best Practices)

  1. لا تخزن البيانات المهمة داخل Container — استخدم Volumes دائمًا.
  2. استخدم أسماء واضحة للـ Volumes — مثل mysql_data أو wordpress_uploads بدلًا من vol1.
  3. قم بعمل Backup دوري — انسخ البيانات من الـ Volume إلى مكان آمن خارجيًا.
  4. لا تحذف Volumes بدون التأكد — استخدم docker volume ls أولاً لترى ما هو مرتبط بها.
  5. استخدم Docker Compose — لإدارة المشاريع المتعددة الخدمات بطريقة منظمة.

الأخطاء الشائعة

  • حذف Container بدون Volume — خاصة مع docker run دون استخدام -v، فتضيع جميع البيانات.
  • حذف Volume بالخطأ — استخدم docker volume prune بحذر شديد.
  • استخدام Bind Mount بدلاً من Volume — Bind Mounts مناسبة للتطوير فقط، وليس للإنتاج.
  • نسيان عمل Backup — Volumes تحمي من حذف الحاوية، لكنها لا تحمي من عطل القرص الصلب أو الكوارث الأخرى.

مقارنة بين Docker Volume و Bind Mount

المعيارDocker VolumeBind Mount
سهولة الإدارةممتازجيد
الأداءممتازجيد
النسخ الاحتياطيسهلمتوسط
مشاركة البياناتنعمنعم
الاعتماد على نظام التشغيلمنخفضمرتفع
الأمانمرتفع (يديره Docker)أقل (وصول مباشر لنظام الملفات)

نصائح لتحسين الأداء

  • نظّف Volumes غير المستخدمة — استخدم docker volume prune بشكل دوري (بعد التأكد).
  • استخدم Volume منفصل لكل خدمة — لكل قاعدة بيانات أو تطبيق Volume خاص به.
  • راقب حجم البيانات — استخدم docker system df لمراقبة استهلاك المساحة.
  • استخدم SSD عند الحاجة — خاصة مع قواعد البيانات الثقيلة.

الأسئلة الشائعة (FAQ)

هل يتم حذف البيانات عند حذف Container؟

لا، إذا كنت تستخدم Volume. البيانات تبقى محفوظة حتى بعد حذف الحاوية. يمكنك ربط Volume بحاوية جديدة واستعادة بياناتك فورًا.

أين يتم تخزين Docker Volumes؟

في نظام لينكس، التخزين الافتراضي هو /var/lib/docker/volumes/. على ويندوز وماك، يتم إدارتها داخل جهاز Docker الافتراضي (Virtual Machine).

ما الفرق بين Volume و Bind Mount؟

Volume يُدار بالكامل بواسطة Docker، بينما Bind Mount يربط مجلدًا موجودًا في جهاز المضيف مباشرة مع الحاوية. Volumes أكثر أمانًا وأسهل في الإدارة والنسخ الاحتياطي.

هل يمكن مشاركة Volume بين أكثر من Container؟

نعم، يمكن ربط نفس الـ Volume مع أي عدد من الحاويات في نفس الوقت، مما يسمح بمشاركة البيانات بينها.

كيف أعمل Backup للـ Docker Volume؟

أسهل طريقة هي تشغيل حاوية مؤقتة ونسخ محتويات الـ Volume:

docker run --rm 
  -v mysql_data:/source 
  -v $(pwd):/backup 
  alpine tar czf /backup/mysql_backup.tar.gz -C /source .

خاتمة

Docker Volumes هي الطريقة الصحيحة والموصى بها لحفظ البيانات في عالم Docker. سواء كنت تدير قاعدة بيانات MySQL، أو موقع WordPress، أو أي تطبيق يحتاج إلى تخزين دائم — الـ Volumes توفر لك الأمان والمرونة والأداء الذي تحتاجه.

ابدأ بتجربة الأمثلة العملية في هذا المقال، وسترى بنفسك كيف تبقى البيانات محفوظة حتى بعد حذف الحاوية بالكامل. بمجرد أن تتعود على استخدام Volumes، لن تفكر أبدًا في العودة إلى تخزين البيانات داخل الحاويات مرة أخرى.

تذكر: في Docker، الحاويات مؤقتة — ولكن بياناتك لا يجب أن تكون كذلك.

اترك تعليقاً