- Как можно перенести полностью работоспособный и безопасный Docker-контейнер на другой сервер?
- Общие положения и предварительные условия
- Стратегии резервного копирования и миграции — выбор правильного метода
- Сценарий 1 — Локальный образ и именованный том (например, веб-приложение + MySQL)
- Сценарий 2 — Контейнер с привязкой к папке хоста.
- Сценарий 3 — Миграция конфиденциальных баз данных без простоев
- Сравнение вариантов перевода (преимущества/недостатки)
- Советы по безопасности (очень важные)
- Практические советы и оптимизация для работы с большими данными.
- Совместимость и версии Docker
- Выбор местоположения и типа сервера для миграции
- Полный пример: миграция веб-приложения и MySQL с помощью docker-compose.
- Заключительный контрольный список перед переходом на новую систему.
- Часто задаваемые вопросы
Как можно перенести полностью работоспособный и безопасный Docker-контейнер на другой сервер?
Полное резервное копирование и миграция контейнера Docker включают в себя три основных компонента: изображение, данные (тома или точки монтирования) и Конфигурация/Метаданные. В этом пошаговом руководстве описаны безопасные, безошибочные и обратимые методы миграции контейнеризированных сервисов (включая веб-приложения и базы данных).
Общие положения и предварительные условия
Прежде чем начать, убедитесь, что у вас есть следующее:
- доступ по 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/*Стратегии резервного копирования и миграции — выбор правильного метода
Три ключевых компонента для полного перехода:
- Изображение Контейнер (код/бинарные файлы)
- Стабильные данные (тома или переплеты)
- Конфигурации и метаданные (docker-compose.yml, файлы окружения, сети, секреты)
Распространенные методы:
- docker export / docker importВключает файловую систему контейнера, но не передает метаданные и именованные тома.
- docker save / docker loadПодходит для созданных изображений.
- Резервное копирование томов В формате tar и передать с помощью rsync/scp или загрузить в S3.
- Использование частного реестра Для изображений с функцией "push/pull".
- Используйте инструменты управления Подобно 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-запросов, создайте временный контейнер 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 save/loadБыстро обрабатывает изображения, но не включает объемы.
- экспорт/импорт 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 или драйверах может потребоваться адаптация.
Выбор местоположения и типа сервера для миграции
Выбор местоположения центра обработки данных и типа сервера зависит от приложения:
- Торговля и Форекс: Расположение вблизи серверов Exchange обеспечивает минимальный пинг.
- Игра: Подходящие локации в Европе/США или вблизи игроков, использующих защиту от DDoS-атак.
- Искусственный интеллект и рендеринг: Серверы с графическими процессорами и NVMe-накопителями для высокоскоростной обработки данных.
- Веб-сайты: Облачный сервер с CDN и расположением в непосредственной близости от основных пользователей.
Наша компания располагает более чем 85 представительствами по всему миру, серверами с графическими процессорами и сетевым оборудованием 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 проверены.
- Целевая сеть и межсетевой экран настроены.
- Сценарий отката определен.
- Окончательный график объявлен, и мониторинг готов.









