انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

إدارة Docker Volume والشبكات: التخزين الدائم وتكوين الشبكة

أنواع Docker volume (named, bind mount, tmpfs)، إدارة الـ volumes، أوضاع شبكات Docker (bridge, host, overlay)، إنشاء شبكات مخصصة والتواصل بين الحاويات. دليل شامل.

وقت القراءة: 16 dk الحاويات والتنسيق
dockervolumeشبكةحاويةتخزينbridgeoverlay
الكاتب
REXE Teknoloji Network & Security Team
المحرر
REXE Teknoloji Technical Editorial
أول نشر
آخر تحديث

إدارة Docker Volume والشبكات

حاويات Docker مؤقتة بطبيعتها — عند حذف الحاوية تُفقد بياناتها أيضاً. تحل الـ volumes هذه المشكلة وتضمن بقاء البيانات بشكل مستقل عن دورة حياة الحاوية. تدير شبكات Docker التواصل بين الحاويات ومع العالم الخارجي.

أنواع Docker Volume

النوعالوصفحالة الاستخدام
Named Volumeتُدار بواسطة Dockerقاعدة البيانات، بيانات التطبيق
Bind Mountربط مجلد المضيفالتطوير، ملفات الإعداد
tmpfs Mountمؤقت في الذاكرةالبيانات المؤقتة الحساسة

إدارة Named Volume

hljs bash
# إنشاء volume
docker volume create myapp-data

# عرض قائمة الـ volumes
docker volume ls

# عرض تفاصيل الـ volume
docker volume inspect myapp-data

# حذف volume
docker volume rm myapp-data

# حذف الـ volumes غير المستخدمة
docker volume prune

تشغيل الحاويات مع Named Volumes

hljs bash
# تشغيل MySQL مع volume
docker run -d \
  --name mysql-db \
  -e MYSQL_ROOT_PASSWORD=StrongPass123! \
  -e MYSQL_DATABASE=myapp \
  -v mysql-data:/var/lib/mysql \
  -p 3306:3306 \
  mysql:8.0

# تشغيل PostgreSQL مع volume
docker run -d \
  --name postgres-db \
  -e POSTGRES_PASSWORD=StrongPass123! \
  -e POSTGRES_DB=myapp \
  -v postgres-data:/var/lib/postgresql/data \
  -p 5432:5432 \
  postgres:15

استخدام Bind Mounts

hljs bash
# ربط المجلد الحالي بالحاوية
docker run -d \
  --name nginx-web \
  -v /home/user/website:/usr/share/nginx/html:ro \
  -p 80:80 \
  nginx:latest

# Bind mount للتطوير
docker run -it \
  --name node-dev \
  -v $(pwd):/app \
  -w /app \
  -p 3000:3000 \
  node:20 \
  npm run dev

الـ Volumes مع Docker Compose

hljs yaml
# docker-compose.yml
version: '3.8'

services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: StrongPass123!
      MYSQL_DATABASE: myapp
    volumes:
      - mysql-data:/var/lib/mysql
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql:ro
    ports:
      - "3306:3306"

  app:
    image: myapp:latest
    volumes:
      - app-uploads:/app/uploads
      - ./config:/app/config:ro
    depends_on:
      - db

volumes:
  mysql-data:
    driver: local
  app-uploads:
    driver: local

النسخ الاحتياطي واستعادة الـ Volume

hljs bash
# نسخ احتياطي للـ volume (أرشيف tar)
docker run --rm \
  -v mysql-data:/data \
  -v $(pwd):/backup \
  alpine tar czf /backup/mysql-backup.tar.gz -C /data .

# استعادة الـ volume
docker run --rm \
  -v mysql-data:/data \
  -v $(pwd):/backup \
  alpine tar xzf /backup/mysql-backup.tar.gz -C /data

أوضاع شبكات Docker

شبكة Bridge (الافتراضية)

hljs bash
# إنشاء شبكة bridge مخصصة
docker network create myapp-network

# ربط الحاويات بالشبكة المخصصة
docker run -d \
  --name web \
  --network myapp-network \
  nginx

docker run -d \
  --name db \
  --network myapp-network \
  -e MYSQL_ROOT_PASSWORD=StrongPass123! \
  mysql:8.0

# الحاويات في الشبكة المخصصة تجد بعضها بالاسم
docker exec web ping db

شبكة Host

hljs bash
# التشغيل في وضع شبكة host (Linux فقط)
docker run -d \
  --name nginx-host \
  --network host \
  nginx

إدارة شبكات Docker

hljs bash
# عرض قائمة الشبكات
docker network ls

# عرض تفاصيل الشبكة
docker network inspect myapp-network

# إنشاء شبكة بشبكة فرعية مخصصة
docker network create \
  --driver bridge \
  --subnet 172.20.0.0/16 \
  --gateway 172.20.0.1 \
  myapp-network

# ربط حاوية بشبكة
docker network connect myapp-network existing-container

# فصل حاوية عن شبكة
docker network disconnect myapp-network existing-container

# حذف شبكة
docker network rm myapp-network

الشبكات مع Docker Compose

hljs yaml
version: '3.8'

services:
  frontend:
    image: nginx:latest
    networks:
      - frontend-net
    ports:
      - "80:80"

  backend:
    image: myapp:latest
    networks:
      - frontend-net
      - backend-net

  db:
    image: mysql:8.0
    networks:
      - backend-net
    environment:
      MYSQL_ROOT_PASSWORD: StrongPass123!

networks:
  frontend-net:
    driver: bridge
  backend-net:
    driver: bridge
    internal: true

الخلاصة

إدارة Docker volume والشبكات هي الأساس لبنية تحتية للحاويات على مستوى الإنتاج. احفظ بياناتك بأمان مع named volumes، وعزل حاوياتك بشبكات bridge مخصصة، وعرّف بنيتك التحتية بالكامل كرمز مع Docker Compose. بهذه الإعدادات على خوادم REXE يمكنك بناء بيئات حاويات موثوقة وقابلة للتوسع.

الأسئلة الشائعة

ما الفرق بين named volume وbind mount؟

Named volume تُدار بواسطة Docker (مخزنة في /var/lib/docker/volumes/)، قابلة للنقل وسهلة النسخ الاحتياطي. Bind mount يربط مباشرة مجلداً محدداً من المضيف، مثالي لرؤية تغييرات الكود فوراً أثناء التطوير. استخدم named volumes في الإنتاج وbind mounts في التطوير.

الحاويات لا تجد بعضها، ماذا أفعل؟

يجب أن تكون الحاويات على نفس الشبكة المخصصة. في شبكة bridge الافتراضية لا تستطيع الحاويات إيجاد بعضها بالاسم — فقط بعنوان IP. أنشئ شبكة مخصصة بـ docker network create وربط كلتا الحاويتين بها. عندها يمكن استخدام اسم الحاوية كـ hostname.

كيف أنسخ بيانات الـ volume احتياطياً؟

الطريقة الأكثر موثوقية: استخدم حاوية Alpine مؤقتة لضغط الـ volume في أرشيف tar. الأمر docker run --rm -v VOLUME_NAME:/data -v $(pwd):/backup alpine tar czf /backup/backup.tar.gz -C /data . ينسخ محتوى الـ volume إلى المجلد الحالي. استخدم tar xzf للاستعادة.

كيف تجد الخدمات بعضها في Docker Compose؟

يضع Docker Compose تلقائياً الخدمات من نفس ملف docker-compose.yml على نفس الشبكة. يمكن للخدمات إيجاد بعضها باسم الخدمة. خدمة باسم 'db' يمكن الوصول إليها من الخدمات الأخرى بـ hostname 'db'. إذا لم تعرّف شبكة مخصصة ينشئ Compose شبكة bridge افتراضية.

متى يجب استخدام وضع شبكة host؟

يُستخدم وضع شبكة host عندما تحتاج الحاوية لاستخدام واجهة شبكة المضيف مباشرة. الميزة: أعلى أداء للشبكة، لا حاجة لتعيين المنافذ. العيب: لا عزل، تعارضات المنافذ ممكنة. مناسب للتطبيقات عالية الأداء الشبكي. يعمل على Linux فقط.

مقالات ذات صلة

أمان Docker: تصليب بيئة الحاويات

أفضل ممارسات أمان Docker: مستخدم غير root، نظام ملفات للقراءة فقط، ملفات seccomp، فحص الصور، أمان Docker socket، عزل الشبكة وإدارة الأسرار.

17 dk
dockerأمانحاوية
حركة الشبكةالداخل Gbpsالخارج Gbps