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

بکاپ و انتقال کامل داده های یک کانتینتر داکر به سرور دیگر

این مقاله به شما روش‌های امن و مطمئن برای بکاپ و انتقال داده‌های کانتینر داکر به سرور دیگر را آموزش می‌دهد. با ارائه‌ی مثال‌های عملی و نکات امنیتی، این راهنما به کاهش خطرات احتمالی و بهینه‌سازی فرآیند کمک می‌کند.
0 اشتراک گذاری
0
0
0
0

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

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

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

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

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

دستورات اولیه جهت بررسی:

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 تعریف شده است.
  • زمان‌بندی قطعی اطلاع‌رسانی شده و مانیتورینگ آماده است.

سؤالات متداول

شاید دوست داشته باشید
نحوه عملکرد DNSSEC و موارد کاربرد آن

نحوه عملکرد DNSSEC و موارد کاربرد آن

DNSSEC یک پروتکل امنیتی برای احراز هویت و یکپارچگی داده‌های DNS است. این مقاله به بررسی نحوه کار DNSSEC و موارد لازم برای پیاده‌سازی آن می‌پردازد. خوانندگان می‌توانند با استفاده از این فناوری، امنیت سرویس‌های خود را به میزان قابل توجهی افزایش دهند.
نصب SourceGuardian در دایرکت ادمین: راهنمای قدم‌به‌قدم

آموزش نصب SourceGuardian در دایرکت ادمین

در این مقاله، به شما آموزش می‌دهیم که چگونه SourceGuardian را روی کنترل پنل دایرکت‌ادمین نصب کنید. با این راهنما می‌توانید از رمزگذاری‌های PHP به‌صورت امن و کارآمد استفاده کنید. به‌طور خاص، به نکات مربوط به نسخه‌های مختلف PHP و محیط‌های سرور پرداخته شده است.
راهنمای جامع راه‌اندازی BIND DNS Resolver روی RHEL 9/Rocky 9/Alma 9

راهنمای جامع راه‌اندازی BIND DNS Resolver روی RHEL 9/Rocky 9/Alma 9

این راهنما به شما کمک می‌کند تا یک resolver DNS امن و بهینه با BIND روی RHEL 9، Rocky Linux 9 یا Alma Linux 9 راه‌اندازی کنید. با نکات کاربردی، امنیت و بهینه‌سازی کش آشنا می‌شوید و می‌توانید latency را کاهش دهید.
Technical-and-advanced-topics-in-cPanel

مباحث فنی و ابزار های پیشرفته cPanel

اگر از cPanel برای مدیریت هاست خود استفاده می‌کنید، احتمالاً تا الان با بخش‌های عمومی آن مثل File Manager یا Email آشنا شده‌اید. اما cPanel قابلیت‌های بسیار پیشرفته‌تر و فنی‌تری نیز دارد که دانستن آن‌ها می‌تواند سرعت، امنیت و پایداری وب‌سایت شما را چندین برابر کند.
آموزش کامل RAID سرور سخت‌افزاری و نرم‌افزاری

آموزش کامل RAID سرور سخت‌افزاری و نرم‌افزاری

این مقاله به آموزش کامل RAID در سرورهای سخت‌افزاری و نرم‌افزاری می‌پردازد و شامل مفاهیم، مزایا، نحوه پیاده‌سازی و نکات کلیدی است. با مطالعه این راهنما می‌توانید بهترین گزینه RAID را با توجه به نیازهای خود انتخاب کنید.
ساخت اپلیکیشن وب سرورلس با قابلیت‌های هوش مصنوعی با AWS Amplify

ساخت اپلیکیشن وب سرورلس با قابلیت‌های هوش مصنوعی با AWS Amplify

این مقاله به شما آموزش می‌دهد که چگونه یک اپلیکیشن وب سرورلس بسازید که از قابلیت‌های مولد (Generative AI) استفاده می‌کند، با استفاده از AWS Amplify و دیگر خدمات AWS. به بررسی امنیت، بهینه‌سازی هزینه و انتخاب لوکیشن دیتاسنتر می‌پردازد.