- كيف يمكن نقل حاوية Docker كاملة وآمنة إلى خادم آخر؟
- العموميات والشروط المسبقة
- استراتيجيات النسخ الاحتياطي والترحيل - اختيار الطريقة المناسبة
- السيناريو 1 - صورة محلية ووحدة تخزين مسماة (على سبيل المثال، تطبيق ويب + MySQL)
- السيناريو 2 - حاوية مع ربط المجلد (مجلد المضيف)
- السيناريو 3 - ترحيل قواعد البيانات الحساسة بدون توقف
- مقارنة خيارات الانتقال (المزايا/العيوب)
- نصائح أمنية (هامة جداً)
- نصائح عملية وتحسينات للبيانات الضخمة
- توافق Docker والإصدارات
- اختيار الموقع ونوع الخادم لعملية الترحيل
- مثال كامل: ترحيل الويب + MySQL باستخدام docker-compose
- قائمة التحقق النهائية قبل الانتقال
- الأسئلة الشائعة
كيف يمكن نقل حاوية Docker كاملة وآمنة إلى خادم آخر؟
تتضمن عملية النسخ الاحتياطي الكامل ونقل حاوية Docker ثلاثة مكونات رئيسية: صورة، البيانات (وحدات التخزين أو وحدات الربط) و التكوين/البيانات الوصفية. يصف هذا الدليل خطوة بخطوة طرقًا آمنة وخالية من الأخطاء وقابلة للعكس لترحيل الخدمات المعبأة في حاويات (بما في ذلك تطبيقات الويب وقواعد البيانات).
العموميات والشروط المسبقة
قبل أن تبدأ، تأكد من توفر ما يلي:
- الوصول عبر SSH إلى كلا الخادمين باستخدام المستخدم المناسب أو المستخدم الجذر.
- قم بتثبيت Docker (وdocker-compose إذا لزم الأمر) على المصدر والوجهة. مثال سريع للتثبيت:
curl -fsSL https://get.docker.com | sh
# or follow your distribution guide- تحقق من وجود مساحة كافية على القرص للملفات المضغوطة.
- مفتاح SSH لنقل البيانات بشكل آمن وأدوات مثل rsync أو SCP-1811.
- التخطيط لجدولة انقطاع الخدمة أو أساليب تقليل التأخير.
الأوامر الأولية للتحقق:
docker ps -a
docker volume ls
df -h
du -sh /var/lib/docker/volumes/*استراتيجيات النسخ الاحتياطي والترحيل - اختيار الطريقة المناسبة
ثلاثة مكونات أساسية لانتقال كامل:
- صورة حاوية (شفرة/ملفات ثنائية)
- بيانات مستقرة (مجلدات أو أغلفة)
- التكوينات والبيانات الوصفية (ملف docker-compose.yml، ملفات البيئة، الشبكات، الأسرار)
الطرق الشائعة:
- تصدير واستيراد Dockerيتضمن نظام ملفات الحاوية ولكنه لا ينقل البيانات الوصفية ووحدات التخزين المسماة.
- docker save / docker loadمناسب للصور المُنشأة.
- نسخ وحدات التخزين احتياطيًا قم بتحويل الملف إلى ملف tar وانقله باستخدام rsync/scp أو قم بتحميله إلى S3.
- استخدام سجل خاص بالنسبة للصور التي يتم دفعها أو سحبها.
- استخدام أدوات الإدارة مثل docker-compose أو Kubernetes لإعادة بناء الخدمة باستخدام التعريفات.
السيناريو 1 - صورة محلية ووحدة تخزين مسماة (على سبيل المثال، تطبيق ويب + MySQL)
الافتراض: حاوية ويب وقاعدة بيانات MySQL مع وحدة تخزين باسم mysql_data. الخطوات بالترتيب:
1) الحصول على صورة الحاوية
إذا كان لديك صورة محلية أو تم إجراء تغييرات على الحاوية، فابحث أولاً عن اسم الصورة ومعرف الحاوية وقم بتثبيت وحفظ الحاوية إذا لزم الأمر.
docker ps --no-trunc --format '{{.Image}} {{.ID}}'
docker commit CONTAINER_ID myapp:backup-2026-07-14
docker save -o /tmp/myapp_backup_image.tar myapp:backup-2026-07-142) النسخ الاحتياطي لوحدة تخزين مُسماة
طريقة آمنة باستخدام حاوية مساعدة تقوم بضغط محتويات وحدة التخزين على المضيف:
docker run --rm \
-v mysql_data:/data \
-v /tmp/backup:/backup \
ubuntu \
bash -lc "cd /data && tar czf /backup/mysql_data.tar.gz ."بالنسبة للبيانات الكبيرة، يمكنك استخدام ضاغط أسرع مثل zstd:
docker run --rm -v mysql_data:/data -v /tmp/backup:/backup ubuntu bash -lc "cd /data && tar -I 'zstd -19' -cf /backup/mysql_data.tar.zst ."3) النسخ الاحتياطي لقاعدة البيانات (مفضل)
لضمان اتساق قاعدة البيانات وسلامتها، من الأفضل أخذ نسخة احتياطية منطقية:
docker exec CONTAINER_ID sh -c 'exec mysqldump --all-databases --single-transaction -u root -p"$MYSQL_ROOT_PASSWORD"' > /tmp/all_databases.sqlتوضيح: تزيل هذه الطريقة الاعتماد على نظام ملفات وحدة التخزين وتنتج نسخة احتياطية منطقية سليمة.
4) النقل إلى الخادم الوجهة
يوصى باستخدام rsync لعمليات نقل آمنة ومستمرة، وخاصة للملفات الكبيرة.
rsync -avP -e "ssh -p 22" /tmp/myapp_backup_image.tar user@target:/tmp/
rsync -avP -e "ssh -p 22" /tmp/mysql_data.tar.gz user@target:/tmp/أو ببساطة باستخدام scp:
scp /tmp/myapp_backup_image.tar user@target:/tmp/ملحوظة: بالنسبة لعمليات النقل الكبيرة، استخدم rsync --partial --progress أو أدوات مثل rclone إلى S3/MinIO.
5) استعادة إلى الخادم الوجهة
قم بتحميل الصورة واستعادة وحدة التخزين، ثم ابدأ الخدمة باستخدام docker-compose:
docker load -i /tmp/myapp_backup_image.tar
docker volume create --name mysql_data
docker run --rm -v mysql_data:/data -v /tmp/backup:/backup ubuntu bash -lc "cd /data && tar xzf /backup/mysql_data.tar.gz"إذا كنت قد استخدمت أداة SQL dump، فأنشئ حاوية mysql مؤقتة وقم بعملية الاستيراد:
docker run --name mysql-temp -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql:8
cat /tmp/all_databases.sql | docker exec -i mysql-temp sh -c 'mysql -u root -p"$MYSQL_ROOT_PASSWORD"'ثم ضع ملفي docker-compose.yml و env وابدأ الخدمة:
docker-compose -f docker-compose.yml up -d6) الاختبار والمراجعة
لا تنسَ التحقق من السجلات وسلامة البيانات ومجموع التحقق:
docker logs -f CONTAINER
sha256sum /tmp/mysql_data.tar.gz
sha256sum /tmp/backup/mysql_data.tar.gzالسيناريو 2 - حاوية مع ربط المجلد (مجلد المضيف)
إذا كانت الحاوية تستخدم ربط التثبيت (على سبيل المثال /srv/app/data على المضيف)، فما عليك سوى استخدام rsync أو tar لنسخ مسار المضيف، وإعداد نفس المسار على الوجهة، وبدء تشغيل الحاوية.
rsync -avP -e "ssh" /srv/app/data/ user@target:/srv/app/data/ثم ابدأ تشغيل الحاوية على الوجهة باستخدام نفس مسار ربط التحميل.
السيناريو 3 - ترحيل قواعد البيانات الحساسة بدون توقف
لتقليل انقطاعات الخدمة:
- النسخ قم بتنفيذ (نسخ MySQL أو بث PostgreSQL) وقم بإجراء عملية الانتقال بعد المزامنة.
- rsync الأولي والنهائي: rsync الأولي للبيانات الضخمة، ثم rsync النهائي مع –inplace و –delete لمزامنة التغييرات الصغيرة.
rsync -azP --delete --inplace /var/lib/docker/volumes/mysql_data/_data/ user@target:/var/lib/docker/volumes/mysql_data/_data/بعد عملية rsync النهائية، أوقف الخدمة لبضع ثوانٍ ثم أعد تشغيلها على الوجهة.
مقارنة خيارات الانتقال (المزايا/العيوب)
- حفظ/تحميل Dockerسريع للصور، لكنه لا يشمل الأحجام.
- تصدير/استيراد Dockerيتضمن نظام ملفات الحاويات ولكنه يفقد البيانات الوصفية ووحدات التخزين.
- rsync على وحدات التخزين: تحكم دقيق واستئناف سريع، ولكنه يتطلب إدارة واختبار.
- تفريغ قاعدة البيانات المنطقيةموثوق به ومناسب للهجرة بين إصدارات قواعد البيانات المختلفة.
- سجل خاصأفضل الممارسات لتوزيع الصور عبر خوادم متعددة؛ يجب نقل البيانات الدائمة بشكل منفصل.
نصائح أمنية (هامة جداً)
بعض النصائح الأمنية العملية:
- استخدم بروتوكول SSH مع مفتاح خاص محمي وقيود على الوصول.
- قم بحماية البيانات الحساسة قبل إرسالها باستخدام أدوات مثل: gpg أو عمر التشفير. مثال:
gpg --encrypt --recipient [email protected] /tmp/mysql_data.tar.gzبعد النقل، تحقق دائمًا من سلامة الملفات باستخدام sha256sum يفحص.
في الوجهة، وقبل تشغيل الخدمة، تحقق من جدار الحماية وقيود المنافذ وقم بتعيين قيود وصول صارمة إذا لزم الأمر.
نصائح عملية وتحسينات للبيانات الضخمة
- ضغط باستخدام zstd أو gzip بالمستوى المناسب: tar -I 'zstd -19' -cf backup.tar.zst /data
- استخدم rsync مع --partial لاستئناف العملية إذا كان الاتصال غير مستقر.
- بالنسبة لعمليات نقل البيانات التي تبلغ عدة تيرابايت، ضع في اعتبارك شحن الأقراص المادية أو استخدام تخزين الكائنات بالقرب من الوجهة.
توافق Docker والإصدارات
تحقق من إصدارات Docker المصدر والوجهة قبل الترحيل. عادةً ما تكون الصور متوافقة، ولكن قد تتطلب بعض الميزات الجديدة في Compose أو برامج التشغيل تعديلات.
اختيار الموقع ونوع الخادم لعملية الترحيل
يعتمد اختيار موقع مركز البيانات ونوع الخادم على التطبيق:
- التداول والفوركس: موقع قريب من خوادم التبادل للحصول على أقل زمن استجابة (ping).
- لعبة: مواقع ملائمة في أوروبا/الولايات المتحدة أو بالقرب من اللاعبين الذين لديهم نظام مضاد لهجمات DDoS.
- الذكاء الاصطناعي والرسم: خوادم GPU و NVMe للإدخال والإخراج عالي السرعة.
- المواقع الإلكترونية: خادم سحابي مزود بشبكة توصيل محتوى (CDN) وموقعه قريب من المستخدمين الرئيسيين.
تقدم شركتنا أكثر من 85 موقعًا عالميًا، وخوادم GPU، وشبكات BGP التي يمكنها تغطية مجموعة متنوعة من احتياجات الترحيل.
مثال كامل: ترحيل الويب + MySQL باستخدام docker-compose
ملخص الخطوات:
- مخرجات عملية تهيئة docker-compose وإنشاء الصورة المحلية:
docker-compose -f docker-compose.yml config > /tmp/compose_config.yml
docker-compose build
docker save $(docker-compose images -q web) -o /tmp/web_image.tar- وحدات التخزين الاحتياطية:
docker run --rm -v project_mysql:/data -v /tmp/backup:/backup ubuntu bash -lc "cd /data && tar czf /backup/mysql_data.tar.gz ."- انقل الملفات إلى الوجهة باستخدام rsync ثم قم باستعادة وتشغيل docker-compose على الوجهة.
قائمة التحقق النهائية قبل الانتقال
- تم نسخ الصورة والأقراص احتياطياً وتم التحقق من المجموع الاختباري.
- يتم تأمين البيئة والأسرار أو حفظها في خزائن آمنة.
- تم التحقق من إصدارات Docker و Compose.
- تم تكوين شبكة الوجهة وجدار الحماية.
- تم تحديد سيناريو التراجع.
- تم الإعلان عن الجدول الزمني النهائي، والمراقبة جاهزة.









