Bir Docker konteynerinden diğerine tüm verilerin yedeklenmesi ve aktarılması.
راهنمای گام‌به‌گام برای بکاپ و انتقال داده‌های داکر از یک سرور به سرور دیگر به همراه نکات امنیتی و بهینه‌سازی.

Bir Docker konteynerinden diğerine tüm verilerin yedeklenmesi ve aktarılması.

Bu makale, Docker konteyner verilerini başka bir sunucuya yedeklemenin ve taşımanın güvenli yollarını öğretecektir. Pratik örnekler ve güvenlik ipuçları sunarak, bu kılavuz potansiyel riskleri azaltmanıza ve süreci optimize etmenize yardımcı olacaktır.
0 Hisse senetleri
0
0
0
0

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

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

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

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

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

Açıklama: این روش وابستگی به فایل‌سیستمی 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/

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

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

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

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

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

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

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

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

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

  • ترید و فارکس: لوکیشن نزدیک به سرورهای صرافی برای کمترین پینگ.
  • Oyun: لوکیشن‌های مناسب در Europe/US یا نزدیک به پلیرها با Anti-DDoS.
  • Yapay Zeka ve Görselleştirme: سرورهای 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 تعریف شده است.
  • زمان‌بندی قطعی اطلاع‌رسانی شده و مانیتورینگ آماده است.

Sıkça Sorulan Sorular

Ayrıca Şunları da Beğenebilirsiniz
site hızını artırın

cPanel araçlarını kullanarak site hızını artırmaya yönelik çözümler

Site yükleme hızı, kullanıcı deneyimini (UX) ve SEO'yu iyileştirmede en önemli faktörlerden biridir. Site yüklemesinde gecikme yaşayan kullanıcılar genellikle sayfayı terk eder ve hemen çıkma oranı artar. cPanel'de bulunan ayarlar ve araçlar aracılığıyla site hızını artırmak için uzman çözümlerini inceleyeceğiz.
cPanel'deki Teknik ve Gelişmiş Konular

Teknik konular ve gelişmiş cPanel araçları

Hostinginizi yönetmek için cPanel kullanıyorsanız, Dosya Yöneticisi veya E-posta gibi yaygın özelliklerine muhtemelen aşinasınızdır. Ancak cPanel, web sitenizin hızını, güvenliğini ve kararlılığını önemli ölçüde artırabilecek çok daha gelişmiş ve teknik özelliklere de sahiptir.