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

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

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

وقت القراءة: 16 dk الحاويات والتنسيق
dockervolumeشبكةحاويةتخزينbridgeoverlay

جدول المحتويات

إدارة 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 يمكنك بناء بيئات حاويات موثوقة وقابلة للتوسع.