Sicherung und Übertragung vollständiger Daten von einem Docker-Container auf einen anderen Server
راهنمای گام‌به‌گام برای بکاپ و انتقال داده‌های داکر از یک سرور به سرور دیگر به همراه نکات امنیتی و بهینه‌سازی.

Sicherung und Übertragung vollständiger Daten von einem Docker-Container auf einen anderen Server

Dieser Artikel zeigt Ihnen sichere Methoden zum Sichern und Migrieren von Docker-Containerdaten auf einen anderen Server. Anhand praktischer Beispiele und Sicherheitstipps hilft Ihnen dieser Leitfaden, potenzielle Risiken zu minimieren und den Prozess zu optimieren.
0 Aktien
0
0
0
0

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

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

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

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

  • SSH-Zugriff به هر دو سرور با کاربر مناسب یا root.
  • نصب Docker (و در صورت نیاز docker-compose) روی مبدا و مقصد. مثال نصب سریع:
curl -fsSL https://get.docker.com | sh
# or follow your distribution guide
  • بررسی فضای دیسک کافی برای آرشیوها.
  • کلید SSH برای انتقال امن و ابزارهایی مثل rsync Oder 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

Erläuterung: این روش وابستگی به فایل‌سیستمی 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/

Notiz: برای انتقال‌های بزرگ از 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 Oder age رمزنگاری کنید. نمونه:
gpg --encrypt --recipient [email protected] /tmp/mysql_data.tar.gz

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

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

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

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

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

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

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

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

  • ترید و فارکس: لوکیشن نزدیک به سرورهای صرافی برای کمترین پینگ.
  • Spiel: لوکیشن‌های مناسب در Europe/US یا نزدیک به پلیرها با Anti-DDoS.
  • Künstliche Intelligenz und Rendering: سرورهای 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 تعریف شده است.
  • زمان‌بندی قطعی اطلاع‌رسانی شده و مانیتورینگ آماده است.

Häufig gestellte Fragen

Das könnte Ihnen auch gefallen