Симуляция миграции тома на новый хост
В реальном сценарии вы бы перенесли файл резервной копии на новый хост, используя такие инструменты, как scp, rsync или службу обмена файлами. Для этой лабораторной работы мы смоделируем миграцию, удалив наш исходный том и создав новый для восстановления наших данных.
Симуляция среды нового хоста
Во-первых, давайте очистим наши старые контейнеры, чтобы смоделировать переход в новую среду:
docker rm -f my-container data-generator
Теперь давайте удалим наш исходный том, чтобы смоделировать начало работы с чистого листа на новом хосте:
docker volume rm my-data-volume
Создайте новый том, который будет представлять наш том на «новом хосте»:
docker volume create my-new-host-volume
Восстановление тома из резервной копии
Теперь мы восстановим нашу резервную копию в новый том:
docker run --rm -v my-new-host-volume:/destination -v $(pwd):/backup ubuntu bash -c "cd /destination && tar xvf /backup/my-data-volume-backup.tar"
Эта команда:
- Создает временный контейнер
- Монтирует наш новый том в
/destination
- Монтирует текущий каталог (где находится наша резервная копия) в
/backup
- Извлекает tar-архив в каталог
/destination
Проверка восстановленных данных
Давайте проверим, что все наши данные были правильно восстановлены в новый том:
docker run --rm -v my-new-host-volume:/data ubuntu ls -la /data
Вы должны увидеть ту же структуру файлов, что и раньше:
total 12
drwxr-xr-x 3 root root 4096 Oct 1 12:34 .
drwxr-xr-x 1 root root 4096 Oct 1 12:34 ..
drwxr-xr-x 2 root root 4096 Oct 1 12:34 config
-rw-r--r-- 1 root root 21 Oct 1 12:34 important.txt
-rw-r--r-- 1 root root 24 Oct 1 12:34 test.txt
Проверьте содержимое одного из наших файлов, чтобы убедиться, что данные не повреждены:
docker run --rm -v my-new-host-volume:/data ubuntu cat /data/important.txt
Вывод:
This is important data
Также проверьте файл конфигурации:
docker run --rm -v my-new-host-volume:/data ubuntu cat /data/config/settings.conf
Вывод:
database_url=postgres://user:password@db:5432/mydb
Использование восстановленного тома с новым контейнером
Теперь, когда мы успешно «мигрировали» наш том, давайте использовать его с новым контейнером:
docker run --name my-new-container -v my-new-host-volume:/app/data -d nginx
Это создает новый контейнер Nginx, который монтирует наш восстановленный том в /app/data.
Давайте проверим, что контейнер может получить доступ к данным тома:
docker exec my-new-container ls -la /app/data
Вы должны увидеть те же файлы, что и раньше, подтверждая, что миграция прошла успешно.
Обновление приложений для использования нового тома
В реальном сценарии, после миграции томов на новый хост, вам потребуется обновить файлы Docker Compose или команды запуска контейнера, чтобы использовать новые имена или пути томов. Например, если вы используете Docker Compose, вы можете обновить свой файл docker-compose.yml следующим образом:
version: "3"
services:
webapp:
image: nginx
volumes:
- my-new-host-volume:/app/data
volumes:
my-new-host-volume:
external: true
Это указывает Docker использовать внешне созданный том с именем my-new-host-volume.
Процесс миграции завершен! Вы успешно:
- Создали том Docker и добавили в него данные
- Создали резервную копию данных тома
- Создали новый том на смоделированном «новом хосте»
- Восстановили данные резервной копии в новый том
- Проверили целостность данных
- Подключили новый контейнер к мигрированному тому