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

النسخ الاحتياطي للحاويات: استراتيجيات حماية البيانات في Docker و Kubernetes

النسخ الاحتياطي لـ Docker volume، حالة الحاوية، Kubernetes persistent volume، النسخ الاحتياطي لـ K8s مع Velero، سكريبتات النسخ الاحتياطي التلقائي وتخطيط التعافي من الكوارث.

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

النسخ الاحتياطي للحاويات: استراتيجيات حماية البيانات

يتطلب النسخ الاحتياطي لبيئات الحاويات نهجاً مختلفاً عن النسخ الاحتياطي التقليدي للخوادم. نظراً لأن الحاويات مؤقتة، فإن ما يحتاج إلى نسخ احتياطي ليس الحاوية نفسها بل البيانات الموجودة فيها. يتناول هذا الدليل استراتيجيات نسخ احتياطي شاملة لبيئات Docker و Kubernetes.

اختيار استراتيجية النسخ الاحتياطي

الاستراتيجيةمناسبة لـالأداة
نسخ احتياطي للـ volumeقاعدة البيانات، تخزين الملفاتtar, rsync
نسخ احتياطي للصورةحالة التطبيقdocker save
لقطةاسترداد سريعLVM, ZFS
نسخ احتياطي K8sالكلاستر بأكملهVelero
نسخ احتياطي بعيدالتعافي من الكوارثRestic, Rclone

1. النسخ الاحتياطي لـ Docker Volume

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

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

# مثال: نسخ احتياطي لـ MySQL volume
docker run --rm \
  -v mysql-data:/data \
  -v /backups:/backup \
  alpine tar czf /backup/mysql-$(date +%Y%m%d-%H%M%S).tar.gz -C /data .

# استعادة الـ volume
docker run --rm \
  -v mysql-data:/data \
  -v /backups:/backup \
  alpine tar xzf /backup/mysql-20240101-120000.tar.gz -C /data

النسخ الاحتياطي مع الحاوية قيد التشغيل

hljs bash
# MySQL dump (أثناء تشغيل الحاوية)
docker exec mysql-db mysqldump \
  -u root -pStrongPass123! \
  --all-databases \
  --single-transaction \
  > /backups/mysql-dump-$(date +%Y%m%d).sql

# PostgreSQL dump
docker exec postgres-db pg_dumpall \
  -U postgres \
  > /backups/postgres-dump-$(date +%Y%m%d).sql

2. سكريبت النسخ الاحتياطي التلقائي

hljs bash
#!/bin/bash
# /usr/local/bin/docker-backup.sh

BACKUP_DIR="/backups/docker"
DATE=$(date +%Y%m%d-%H%M%S)
RETENTION_DAYS=7

mkdir -p "$BACKUP_DIR"

# نسخ احتياطي لجميع الـ volumes
for volume in $(docker volume ls -q); do
  echo "نسخ احتياطي: $volume"
  docker run --rm \
    -v "$volume":/data \
    -v "$BACKUP_DIR":/backup \
    alpine tar czf "/backup/${volume}-${DATE}.tar.gz" -C /data . 2>/dev/null
done

# نسخ احتياطي لـ MySQL
if docker ps --format '{{.Names}}' | grep -q mysql; then
  docker exec mysql-db mysqldump \
    -u root -pStrongPass123! \
    --all-databases \
    --single-transaction \
    > "$BACKUP_DIR/mysql-${DATE}.sql"
fi

# حذف النسخ الاحتياطية القديمة
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -name "*.sql" -mtime +$RETENTION_DAYS -delete

echo "اكتمل النسخ الاحتياطي: $DATE"
hljs bash
chmod +x /usr/local/bin/docker-backup.sh
# نسخ احتياطي يومي عبر cron
# 0 2 * * * /usr/local/bin/docker-backup.sh >> /var/log/docker-backup.log 2>&1

3. النسخ الاحتياطي البعيد مع Restic

hljs bash
# تثبيت Restic
apt install -y restic

# تهيئة المستودع
restic init --repo /backups/restic-repo

# نسخ احتياطي للـ volume
restic backup /tmp/mysql-backup \
  --repo /backups/restic-repo \
  --password-file /etc/restic/password \
  --tag mysql,docker

# عرض قائمة النسخ الاحتياطية
restic snapshots --repo /backups/restic-repo

# الاستعادة
restic restore SNAPSHOT_ID \
  --repo /backups/restic-repo \
  --target /tmp/restore

# تنظيف النسخ الاحتياطية القديمة
restic forget \
  --repo /backups/restic-repo \
  --keep-daily 7 \
  --keep-weekly 4 \
  --keep-monthly 3 \
  --prune

4. النسخ الاحتياطي لـ Kubernetes: Velero

hljs bash
# تثبيت Velero CLI
wget https://github.com/vmware-tanzu/velero/releases/download/v1.12.0/velero-v1.12.0-linux-amd64.tar.gz
tar xzf velero-v1.12.0-linux-amd64.tar.gz
mv velero-v1.12.0-linux-amd64/velero /usr/local/bin/

# نسخ احتياطي للكلاستر بأكمله
velero backup create full-backup --wait

# نسخ احتياطي لـ namespace محدد
velero backup create production-backup \
  --include-namespaces production \
  --wait

# عرض قائمة النسخ الاحتياطية
velero backup get

# الاستعادة من نسخة احتياطية
velero restore create --from-backup full-backup

النسخ الاحتياطي المجدول

hljs bash
# نسخ احتياطي يومي (الساعة 2 صباحاً)
velero schedule create daily-backup \
  --schedule="0 2 * * *" \
  --ttl 168h

# نسخ احتياطي أسبوعي كامل
velero schedule create weekly-backup \
  --schedule="0 1 * * 0" \
  --ttl 720h

5. سكريبت التحقق من النسخ الاحتياطية

hljs bash
#!/bin/bash
BACKUP_FILE="$1"

if tar tzf "$BACKUP_FILE" > /dev/null 2>&1; then
  echo "ملف النسخ الاحتياطي صالح: $BACKUP_FILE"
else
  echo "خطأ: ملف النسخ الاحتياطي تالف: $BACKUP_FILE"
  exit 1
fi

docker volume create test-restore
docker run --rm \
  -v test-restore:/data \
  -v $(dirname $BACKUP_FILE):/backup \
  alpine tar xzf "/backup/$(basename $BACKUP_FILE)" -C /data

echo "اختبار الاستعادة ناجح"
docker volume rm test-restore

الخلاصة

يجب تشكيل استراتيجية النسخ الاحتياطي للحاويات وفقاً لمتطلبات عملك. قد يكفي النسخ الاحتياطي للـ volume مع cron للبيئات الصغيرة، بينما تتطلب كلاسترات Kubernetes الإنتاجية أدوات متخصصة مثل Velero. مع اختبارات النسخ الاحتياطي والاستعادة المنتظمة على خوادم REXE يمكنك الحفاظ على أمان بياناتك.

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

كم مرة يجب أن أنسخ Docker volumes احتياطياً؟

تُحدَّد تكرارية النسخ الاحتياطي بهدف RPO (Recovery Point Objective). نسخ احتياطي كل ساعة أو أكثر تكراراً لقواعد البيانات الحرجة، يومياً لبيانات التطبيق، أسبوعياً للمحتوى الثابت. زيادة تكرارية النسخ الاحتياطي تزيد مساحة القرص وحمل I/O — ضع هذا التوازن في الاعتبار.

هل يجب إيقاف الحاوية عند النسخ الاحتياطي؟

لقواعد البيانات يُنصح بالنسخ الاحتياطي دون إيقاف: استخدم mysqldump --single-transaction لـ MySQL وpg_dump لـ PostgreSQL. لنسخ نظام الملفات احتياطياً قد يلزم إيقاف قصير لضمان الاتساق. للأنظمة الحرجة خذ النسخ الاحتياطية من read replica.

كيف أتحقق من نسخة احتياطية لـ Kubernetes مع Velero؟

تحقق من حالة النسخة الاحتياطية بـ velero backup describe BACKUP_NAME. اختبر الاستعادة بانتظام في بيئة اختبار بـ velero restore create --from-backup BACKUP_NAME. يتحقق Velero أيضاً تلقائياً من سلامة النسخ الاحتياطية.

أين يجب تخزين النسخ الاحتياطية؟

طبّق قاعدة 3-2-1: 3 نسخ، 2 وسائط مختلفة، موقع بعيد واحد. يُنصح بمزيج من القرص المحلي + تخزين S3 بعيد متوافق (MinIO, AWS S3, Backblaze B2). شفّر النسخ الاحتياطية (Restic يشفّر افتراضياً). تجنب تخزين النسخ الاحتياطية على نفس الخادم.

كيف أنسخ Docker Compose stack احتياطياً؟

تحتاج نسخ شيئين احتياطياً: 1) ملفات docker-compose.yml و.env (يجب تخزينها في Git)، 2) بيانات الـ volumes (نسخ احتياطي بـ tar). لنسخ الـ stack بأكمله انسخ كل volume بشكل منفصل. للاستعادة شغّل الـ stack أولاً بـ docker-compose up ثم استعد بيانات الـ volumes.

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

حركة الشبكةالداخل Gbpsالخارج Gbps