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