نسخ احتياطي ونقل البيانات بالكامل من حاوية Docker إلى خادم آخر
راهنمای گام‌به‌گام برای بکاپ و انتقال داده‌های داکر از یک سرور به سرور دیگر به همراه نکات امنیتی و بهینه‌سازی.

نسخ احتياطي ونقل البيانات بالكامل من حاوية Docker إلى خادم آخر

ستعلمك هذه المقالة طرقًا آمنة وموثوقة لعمل نسخ احتياطية من بيانات حاويات Docker ونقلها إلى خادم آخر. من خلال تقديم أمثلة عملية ونصائح أمنية، سيساعدك هذا الدليل على تقليل المخاطر المحتملة وتحسين العملية.
0 الأسهم
0
0
0
0

چطور می‌توان یک کانتینر داکر را کامل و امن به سرور دیگر منتقل کرد؟

بکاپ و انتقال کامل یک کانتینتر داکر شامل سه جزء اصلی است: صورة، data (volumes یا bind mounts) و پیکربندی/متادیتا. در این راهنما گام‌به‌گام روش‌های امن، کم‌خطا و قابل بازگشت برای مهاجرت سرویس‌های کانتینری (از جمله وب‌اپ‌ها و دیتابیس‌ها) توضیح داده شده‌اند.

کلیات و پیش‌نیازها

قبل از شروع مطمئن شوید که موارد زیر فراهم است:

  • الوصول عبر SSH به هر دو سرور با کاربر مناسب یا root.
  • نصب 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/*

استراتژی‌های بکاپ و مهاجرت — انتخاب روش مناسب

سه جزء اصلی برای انتقال کامل:

  • Image کانتینر (کد/باینری‌ها)
  • داده‌های پایدار (volumes یا bind mounts)
  • پیکربندی‌ها و متادیتا (docker-compose.yml, env files, شبکه‌ها، secrets)

روش‌های معمول:

  • docker export / docker import: شامل فایل‌سیستم کانتینر است اما متادیتا و volumes نام‌دار را منتقل نمی‌کند.
  • docker save / docker load: مناسب برای تصاویر ساخته‌شده (images).
  • پشتیبان‌گیری از volumes به صورت tar و انتقال با rsync/scp یا آپلود به S3.
  • استفاده از Registry خصوصی برای push/pull تصاویر.
  • استفاده از ابزارهای مدیریت مثل docker-compose یا Kubernetes برای بازسازی سرویس با تعریف‌ها.

سناریو 1 — image محلی و volume نام‌دار (مثال وب‌اپ + MySQL)

فرض: کانتینر وب و MySQL با volume نام‌دار mysql_data. گام‌ها به ترتیب:

۱) گرفتن image کانتینر

اگر image محلی دارید یا تغییرات در کانتینر صورت گرفته، ابتدا نام image و ID کانتینر را پیدا کنید و در صورت نیاز کانتینر را commit و save کنید.

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-14

۲) بکاپ volume نام‌دار

روش امن با یک helper container که محتویات volume را در میزبان tar می‌کند:

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 ."

۳) بکاپ دیتابیس (ترجیحی)

برای اطمینان از سازگاری و یکپارچگی دیتابیس بهتر است dump منطقی بگیرید:

docker exec CONTAINER_ID sh -c 'exec mysqldump --all-databases --single-transaction -u root -p"$MYSQL_ROOT_PASSWORD"' > /tmp/all_databases.sql

توضيح: این روش وابستگی به فایل‌سیستمی volume را حذف کرده و dump منطقی سالم تولید می‌کند.

۴) انتقال به سرور مقصد

استفاده از 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 استفاده کنید.

۵) بازیابی در سرور مقصد

بارگذاری image و ریستور volume سپس راه‌اندازی سرویس با 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"

اگر از dump SQL استفاده کرده‌اید، یک container موقتی mysql بسازید و import را انجام دهید:

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 -d

۶) تست و بررسی

بررسی لاگ‌ها، صحت داده‌ها و checksumها را فراموش نکنید:

docker logs -f CONTAINER
sha256sum /tmp/mysql_data.tar.gz
sha256sum /tmp/backup/mysql_data.tar.gz

سناریو 2 — کانتینر با bind mount (پوشه میزبان)

اگر کانتینر از bind mount استفاده می‌کند (مثلاً /srv/app/data روی میزبان)، کافی است مسیر میزبان را rsync یا tar کنید و روی مقصد همان مسیر را آماده و کانتینر را راه‌اندازی کنید.

rsync -avP -e "ssh" /srv/app/data/ user@target:/srv/app/data/

سپس کانتینر روی مقصد را با همان bind mount path راه‌اندازی کنید.

سناریو 3 — مهاجرت بدون downtime برای دیتابیس‌های حساس

برای کاهش قطعی سرویس:

  • Replication (MySQL replication یا PostgreSQL streaming) پیاده‌سازی کنید و پس از همگام‌سازی، cutover انجام دهید.
  • 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 save/load: سریع برای تصاویر، اما شامل volumes نیست.
  • docker export/import: شامل فایل‌سیستم کانتینری است ولی متادیتا و volumes را از دست می‌دهد.
  • rsync روی volumes: کنترل دقیق و resume، اما نیاز به مدیریت و تست دارد.
  • dump منطقی دیتابیس: قابل‌اعتماد و مناسب برای migration بین نسخه‌های مختلف DB.
  • رجیستری خصوصی: بهترین روش برای توزیع تصاویر بین چند سرور؛ داده‌های پایدار باید جداگانه منتقل شوند.

نکات امنیتی (بسیار مهم)

چند نکته امنیتی عملی:

  • از SSH با کلید خصوصی محافظت‌شده و محدودیت دسترسی استفاده کنید.
  • داده‌های حساس را قبل از انتقال با ابزارهایی مثل gpg أو age رمزنگاری کنید. نمونه:
gpg --encrypt --recipient [email protected] /tmp/mysql_data.tar.gz

پس از انتقال همیشه صحت فایل‌ها را با sha256sum يفحص.

در مقصد قبل از بالا آوردن سرویس، فایروال و محدودیت پورت را بررسی کنید و در صورت نیاز دسترسی‌ها را سخت‌گیرانه تنظیم نمایید.

نکات عملی و بهینه‌سازی برای داده‌های بزرگ

  • فشرده‌سازی با zstd یا gzip با سطح مناسب: tar -I ‘zstd -19’ -cf backup.tar.zst /data
  • استفاده از rsync با –partial برای resume در صورتی که اتصال ناپایدار است.
  • برای انتقال چندین ترابایت، بررسی گزینه ارسال دیسک فیزیکی یا استفاده از object storage نزدیک به مقصد.

سازگاری Docker و نسخه‌ها

قبل از مهاجرت نسخه Docker مبدا و مقصد را بررسی کنید. معمولاً images سازگارند اما برخی ویژگی‌های جدید در Compose یا driverها ممکن است نیاز به تطبیق داشته باشند.

انتخاب لوکیشن و نوع سرور برای مهاجرت

انتخاب لوکیشن دیتاسنتر و نوع سرور به کاربرد بستگی دارد:

  • ترید و فارکس: لوکیشن نزدیک به سرورهای صرافی برای کمترین پینگ.
  • لعبة: لوکیشن‌های مناسب در Europe/US یا نزدیک به پلیرها با Anti-DDoS.
  • الذكاء الاصطناعي والرسم: سرورهای GPU و NVMe برای IO بالا.
  • وب‌سایت‌ها: سرور ابری با CDN و لوکیشن نزدیک به کاربران اصلی.

شرکت ما بیش از 85 لوکیشن جهانی، سرورهای GPU و شبکه BGP ارائه می‌دهد که می‌تواند نیازهای مختلف مهاجرت را پوشش دهد.

مثال کامل: انتقال وب + MySQL با docker-compose

خلاصه گام‌ها:

  1. خروجی تنظیمات docker-compose و ساخت image محلی:
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
  1. بکاپ volumes:
docker run --rm -v project_mysql:/data -v /tmp/backup:/backup ubuntu bash -lc "cd /data && tar czf /backup/mysql_data.tar.gz ."
  1. انتقال فایل‌ها با rsync به مقصد و سپس بازیابی و راه‌اندازی docker-compose روی مقصد.

چک‌لیست نهایی قبل از cutover

  • بکاپ تصویر و volumes گرفته شده و checksum بررسی شده است.
  • env و secrets امن شده یا در vault قرار گرفته‌اند.
  • نسخه‌های Docker و Compose بررسی شده‌اند.
  • شبکه و فایروال مقصد پیکربندی شده‌اند.
  • سناریوی rollback تعریف شده است.
  • زمان‌بندی قطعی اطلاع‌رسانی شده و مانیتورینگ آماده است.

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

قد يعجبك أيضاً
كيفية نقل استضافة cPanel إلى cPanel ونقل DirectAdmin إلى cPanel - دليل كامل خطوة بخطوة

كيفية نقل استضافة cPanel إلى cPanel ونقل DirectAdmin إلى cPanel - دليل كامل خطوة بخطوة

يُقدّم هذا الدليل طرقًا عمليةً مُفصّلةً خطوةً بخطوةٍ لنقل بيانات الاستضافة من cPanel إلى cPanel ومن DirectAdmin إلى cPanel. بدءًا من أدوات WHM وصولًا إلى نصائح الأمان واختبار نظام أسماء النطاقات (DNS)، يُغطي الدليل كل ما تحتاج معرفته لإنجاح هذه العملية.
دليل شامل لتحسين أداء وحدة معالجة الرسومات (GPU) للتعلم العميق

دليل شامل لتحسين أداء وحدة معالجة الرسومات (GPU) للتعلم العميق

في هذه المقالة، نستكشف تحسين أداء وحدة معالجة الرسومات (GPU) للتعلم العميق. باستخدام أساليب عملية وتقنية، نعلمك كيفية تحقيق أقل وقت تدريب وأعلى إنتاجية من خلال استخدام الأجهزة المناسبة والإعدادات المثلى.
حل لتطبيق وتحسين نموذج الصوت Maya1 Ai مع تقنية تحويل النص إلى كلام

حل لتطبيق وتحسين نموذج الصوت Maya1 Ai مع تقنية تحويل النص إلى كلام

سنتناول في هذه المقالة كيفية تطبيق نموذج تحويل النص إلى كلام (TTS) الخاص ببرنامج Maya1 Ai وتحسينه، وسنقدم حلولاً فعّالة لإنتاج صوت طبيعي. سنرشدكم خلال الخطوات التقنية اللازمة، بدءًا من إعدادات الشبكة وصولاً إلى أفضل تكوينات الخادم.
دليل شامل لأتمتة تهيئة عناوين IP والنطاقات لخوادم البريد الإلكتروني

دليل شامل لأتمتة تهيئة عناوين IP والنطاقات لخوادم البريد الإلكتروني

سنتناول في هذه المقالة عملية تهيئة عنوان IP والنطاق لخادم البريد الإلكتروني الخاص بك بشكل شامل. باستخدام الطرق الآلية لهذه العملية، يمكنك تحسين عملية التحقق من صحة الرسائل ومنع وصولها إلى مجلد الرسائل غير المرغوب فيها. كما سنغطي نصائح فنية وإدارية وأفضل الممارسات في هذا الشأن.
فهم الاختلافات الرئيسية بين بروتوكولي TLS وSSL وأهميتها

TLS مقابل SSL - الاختلافات والتاريخ والأهمية لأمان الويب

عندما يتعلق الأمر بأمن الويب، غالبًا ما نسمع مصطلحي "SSL" و"TLS". ولكن ما الفرق بينهما تحديدًا؟ لماذا يُستخدم TLS كمعيار أمان للويب اليوم، بينما يُهمَل SSL تقريبًا؟ في هذه المقالة، سنتناول هذا الموضوع بنظرة احترافية لنمنحك فهمًا أفضل لبروتوكولات أمن الويب وأهمية اختيار البروتوكول المناسب.