Как я перенёс свой Docker-сервер на новый компьютер и не потерял ни одного контейнера — пошаговая инструкция для каждого!

 Docker logo placed over a laptop computer keyboard.

Задумывались ли вы, как безопасно переехать с Docker-контейнерами на новый сервер и ничего не сломать? Я вот недавно решился обновить домашний сервер: убрал старый «гроб» и поставил куда более мощную машину. Честно — миграция меня пугала, но всё оказалось удивительно просто.

На деле сам процесс оказался проще, чем ожидал — занял, конечно, какое-то время, но без всяких катастроф. Всё, что нужно — несколько команд и чуточку терпения (особенно если у вас контейнеров не пара штук, а больше). Расскажу, как я переехал на новый сервер шаг за шагом — и всё прекрасно заработало без клонирования старой виртуалки.

Переезд Docker-хоста — проще, чем вы думаете!

В первый раз я переносил свои Docker-контейнеры в январе, когда решил заменить Unraid на полноценный Docker на Ubuntu в виртуалке. Тоже всё прошло просто: часть приложений смог сохранить средствами самих программ, а что-то пересобрал заново.

Недавно задачка оказалась чуть сложнее: я переносил Docker уже с одного железа на другое. Решил не заморачиваться с целиком виртуалкой и всё поставить на новом сервере «с нуля», а затем вручную перенести всё нужное.

Сначала думал, что придётся останавливать контейнеры на часы, и впереди куча головоломок. Но в реальности всё прошло логично и понятно: были нюансы, но глобальных проблем не случилось — просто уделил несколько часов времени!

Всё должно быть готово — как я настраивал новый сервер

A macOS terminal window SSH'd into an Ubuntu 24.04 server session.

В первую очередь я убедился, что на новом сервере будет ровно та же Ubuntu: выбрал Ubuntu Server 24.04 LTS — этот дистрибутив знаю как свои пять пальцев, работаю с ним больше десяти лет.

После установки системы поставил Docker и всё нужное — если у вас есть GPU, не забудьте про драйверы NVIDIA или Intel. Также создал необходимые папки для будущих Docker-контейнеров и проверил, совпадают ли пути.

Затем остановил сервисы Docker и его сокет такими командами:

Возможно, кто-то ограничится одной, но я решил перестраховаться и отключил всё. Это важно: после этого можно спокойно работать с файловой системой Docker и не бояться потерять данные.

Дальше повторил эти команды и на старом сервере — чтобы точно быть уверенным, что за время переноса ничего не поменяется.

На этом этапе контейнеры были уже выключены. Откроюсь: это был самый неприятный момент — мой домашний сервер управляет всей умной техникой: Home Assistant, Audiobookshelf, Plex и кучей других сервисов. Чтобы не оставить родных без автоматизации, пришлось подобрать время, когда сервер можно остановить.

Дождавшись подходящего момента, полностью отключил Docker и перешёл на следующий шаг — подготовку к копированию данных.

Архивируем Docker-данные: мой рабочий способ

A macOS terminal SSH'd into Ubuntu Linux showing a tar command to back up Docker.

Именно на этом этапе ушло больше всего времени — пришлось подчистить ненужные файлы и каталоги, чтобы ускорить процесс. Но даже так всё вместе заняло несколько часов.

Суть проста: сначала архивируем главный каталог Docker, а затем отдельно архивируем папку для volume-монтажа (если вы её выделяли). Если ваши тома внутри /var/lib/docker, всё делается одной командой.

На старом сервере использовал такую команду:

Она создаёт сжатый архив из /var/lib/docker. В зависимости от количества контейнеров и их «весов» это может занять 30–45 минут, а то и дольше.

Потом аналогично архивируем отдельную папку — у меня, например, все контейнеры лежат в /portainer (Portainer у меня как главный менеджер), а там — отдельные подпапки для каждого. Архивирование /portainer отняло около часа, но у меня там реально десятки гигабайт данных.

Когда оба архива были готовы, перешёл к следующему шагу: копированию на новый сервер.

Копирование файлов между серверами — быстрота поражает!

Using rsync to move files from one server to another while showing the progress and speed.

У меня дома сеть 2,5 Гбит/с — сам Бог велел использовать такую мощь! Для передачи воспользовался командой, которая наглядно показывает прогресс и скорость прямо в терминале:

Так можно наглядно видеть, что перенос идёт как надо. Всё завершилось за считанные минуты — если бы копировал через USB, это затянулось бы намного дольше (старый сервер ещё и с USB 2.0, тут вообще без вариантов).

Когда архивы оказались на новом сервере, просто разархивировал их теми же командами — по нужным каталогам. Начал с Docker-папки:

Дождался завершения процесса и повторил для volume-папки:

Вся эта часть — архивация, копирование, распаковка — самая долгая во всей миграции: у меня ушло почти 4 часа из-за большого объёма данных. Но самое сложное уже позади, дальше — только запуск Docker.

Первый запуск Docker на новом сервере — контейнеры поднимаются сами!

Когда все файлы были на местах, я впервые запустил Docker на новой машине. Всё делается парой простых команд:

Я ждал кучу ошибок, но — чудо! — почти все контейнеры стартовали без каких-либо проблем. Если новая система похожа на старую, то всё вообще должно заработать «из коробки». Но если вы, как и я, что-то радикально поменяли — нюансы всё равно будут. Сейчас расскажу, какие.

Важные детали и неожиданные нюансы: что может пойти не так

A container floating in the sea with the Docker logo inside it.

Первым делом пришлось переподключить контейнеры с NVIDIA runtime на Intel — раньше был GTX 1650 (для ИИ и транскодинга), сейчас просто процессор i9-13900K с интегрированным видео. Переход вышел немного замороченным (Scrypted так и не «подружился» с новой конфой — оставил на CPU), зато остальные контейнеры поднялись почти сразу.

Главной «граблей» стал Home Assistant — почему-то контейнер после переезда не подтянул старые настройки. Часть конфигов лежала в /portainer/homeassistant, но при запуске сервис стартовал «с нуля». Решилось просто: запустил старую виртуалку, сделал бэкап через интерфейс Home Assistant, залил на новый сервер — всё заработало!

Параллельно пришлось проверить Docker-сети: Scrypted перенёс обратно с дефолтной сети в режим host. Ещё настроил статичный IP на новом сервере и поправил несколько мелких вещей для работы с встроенной графикой.

В общем итоге весь переезд прошёл легко, а новый сервер теперь мощнее, быстрее и экономичнее. Рад, что теперь знаю, как переносить Docker-контейнеры — уверен, что этот навык пригодится ещё не раз!

Если вы только начинаете знакомиться с Docker — обязательно попробуйте: он управляет почти всей бытовой автоматикой на моём сервере.

А ещё у меня есть подборка классных Docker-контейнеров, которые советую всем домашним продвинутым пользователям. Устанавливаются легко — а пользы масса! Мой homelab уже давно стал самым важным гаджетом в доме.

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка — это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!

Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в:

Алекс Бежбакин
Оцените автора
Добавить комментарий