Перенос Docker-проекта на другой VPS
Переезд контейнеров пугает только на словах. С Docker вся суть проекта — это образы, тома и compose-файл. Переносим их аккуратно, чтобы не потерять данные.
Содержание
Что именно переносим
Docker-проект состоит из трёх частей, и путать их нельзя:
- Образы — код и зависимости. Их проще пересобрать или подтянуть из реестра, чем тащить целиком.
- Тома (volumes) — данные: база, загруженные файлы, конфиги. Вот их потерять нельзя.
- docker-compose.yml и .env — описание стека и секреты.
Главное правило: образ воспроизводим, а том с данными — уникален. Основные силы — на бэкап томов.
Какой VPS выбрать для небольшого Docker-проекта
Для небольшого Docker-проекта начните со Старт: 2 vCPU, 4 ГБ памяти и 80 ГБ NVMe. Если на сервере будет несколько приложений, сайтов или контейнеров, рассмотрите Стандарт: 4 vCPU и 8 ГБ памяти. Это ориентиры для небольшого проекта, а не обещание конкретного числа посетителей или запросов.
Для небольшого проекта
Старт · 2 vCPU · 4 ГБ RAM
80 ГБ NVMe
Начальная конфигурация для приложения и сопутствующих сервисов.
Для нескольких приложений
Стандарт · 4 vCPU · 8 ГБ RAM
160 ГБ NVMe
Больше памяти и процессорных ресурсов на одном VPS.
После заказа переходите к настройке по статье. Если ресурсы заканчиваются, увеличьте конфигурацию; для базы данных дополнительно учитывайте объём и характер запросов.
В кнопках заказа выбрана локация в Великобритании. Другую страну можно выбрать при оформлении.
Оплата VPS картой РФ или по СБП доступна в личном кабинете. Для безналичной оплаты от юридического лица или ИП запросите счёт у support@maatrix.io, указав тариф и реквизиты.
Подготовка нового VPS
На целевом сервере ставим Docker официальным скриптом и включаем автозапуск:
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
Проверяем, что всё на месте:
docker --version && docker compose version
Если переезжаете на MAATRIX, root-доступ есть сразу, а быстрый NVMe заметно ускорит и распаковку образов, и восстановление больших дампов базы. Локация UK, US или RU — на выбор.
Перенос образов
Если образы лежат в реестре (Docker Hub или свой) — просто docker pull на новом сервере. Если реестра нет, выгрузите образ в архив и перекиньте по SSH:
docker save myapp:1.0 | gzip > myapp.tar.gz
scp myapp.tar.gz user@new-vps:/root/
На новом сервере загружаем обратно:
gunzip -c myapp.tar.gz | docker load
Но чаще правильнее хранить образы в реестре — тогда переезд сводится к pull. Про это есть отдельный гайд по своему Registry.
Перенос томов с данными
Самый ответственный шаг. Останавливаем контейнеры, чтобы данные не менялись во время бэкапа, и упаковываем том во временный контейнер:
docker compose down
docker run --rm \
-v myproject_dbdata:/data \
-v $(pwd):/backup alpine \
tar czf /backup/dbdata.tar.gz -C /data .
Копируем архив на новый VPS и распаковываем в одноимённый том:
scp dbdata.tar.gz user@new-vps:/root/
# на новом сервере:
docker volume create myproject_dbdata
docker run --rm \
-v myproject_dbdata:/data \
-v $(pwd):/backup alpine \
tar xzf /backup/dbdata.tar.gz -C /data
Имя тома должно совпадать с тем, что ждёт compose, иначе контейнер создаст пустой том и данные «пропадут».
Запуск и проверка
Переносим docker-compose.yml и .env, поднимаем стек на новом сервере:
scp docker-compose.yml .env user@new-vps:/root/app/
# на новом сервере, в каталоге app:
docker compose up -d
docker compose ps
Проверяем логи и что данные на месте:
docker compose logs -f --tail 100
Только убедившись, что всё работает, переключаем DNS. Старый сервер держите ещё сутки как страховку.
Переключение DNS без простоя
Чтобы переезд был плавным, заранее снизьте TTL A-записи (например до 300 секунд) за сутки до миграции — тогда после смены IP кэш обновится за минуты, а не за часы.
- Частая ошибка: перенесли образы, забыли тома — сайт открылся, но база пустая.
- Частая ошибка: имя тома не совпало — данные не подхватились.
- Частая ошибка: высокий TTL DNS — часть пользователей сутки идёт на старый IP.
После успешного переезда на MAATRIX старый сервер можно гасить. Ежедневные бэкапы на новом месте уже подстрахуют вас с первого дня.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Нужно ли останавливать контейнеры при переносе томов?
Да, особенно для баз данных. Иначе бэкап тома снимется в несогласованном состоянии. Сделайте docker compose down, снимите архив, затем переносите.
Почему на новом сервере база пустая?
Скорее всего, имя тома не совпало с тем, что ждёт compose, и создался новый пустой том. Проверьте имена через docker volume ls и восстановите данные в правильный том.
Как избежать простоя при смене сервера?
Заранее снизьте TTL DNS-записи, поднимите и проверьте проект на новом VPS, и только потом меняйте IP. Старый сервер держите включённым сутки как резерв.
Готовы перейти к настройке?
Закажите Старт с конфигурацией, предложенной для старта, или сравните все тарифы. Оплата картой РФ и через СБП — в личном кабинете.
Заказать Старт Все тарифы и цены