Как переносить объемы данных только с одного хоста на другой?
Как описано в документации Docker на Работа с томами, существует концепция так называемых контейнеров только для данных, которые предоставляют том, который может быть установлен в несколько в других контейнерах, независимо от того, действительно ли работает контейнер только для данных.
В принципе, это звучит потрясающе. Но есть одна вещь, которую я не понимаю.
Эти тома (которые явно не отображают папку на хосте по причинам мобильности, как указано в документации) создаются и управляются Docker в некоторой внутренней папке на хосте (/var/docker/volumes/…
).
Предположим, что я использую такой том, а затем мне нужно перенести его с одного хоста на другой - как мне порт тома? AFAICS имеет уникальный идентификатор - могу ли я просто пойти и скопировать том и его контейнер с данными только на новый хост? Как узнать, какие файлы нужно копировать? Или есть некоторая поддержка, встроенная в Docker, которую я еще не обнаружил?
Ответы
Ответ 1
Официальный ответ теперь доступен здесь:
Совместное использование каталогов с использованием томов
В разделе "Резервное копирование, восстановление или миграция томов" у вас есть:
BACKUP:
sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
-
--rm
: удалите контейнер, когда он выйдет
-
--volumes-from DATA
: присоединить к томам, общим для контейнера DATA
-
-v $(pwd):/backup
: привязать текущий каталог к контейнеру; для записи tar файла в
-
busybox
: небольшое упрощенное изображение - полезно для быстрого обслуживания
-
tar cvf /backup/backup.tar /data
: создает несжатый файл tar всех файлов в каталоге /data li >
RESTORE:
# create a new data container
$ sudo docker create -v /data --name DATA2 busybox true
# untar the backup files into the new container᾿s data volume
$ sudo docker run --rm --volumes-from DATA2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
data/
data/sven.txt
# compare to the original container
$ sudo docker run --rm --volumes-from DATA -v `pwd`:/backup busybox ls /data
sven.txt
Ответ 2
Вы можете экспортировать том в tar и перенести на другой компьютер. И импортируйте данные с tar на второй машине. Это не зависит от деталей реализации томов.
# you can list shared directories of the data container
docker inspect <data container> | grep "/vfs/dir/"
# you can export data container directory to tgz
docker run --cidfile=id.tmp --volumes-from <data container> ubuntu tar -cO <volume path> | gzip -c > volume.tgz
# clean up: remove exited container used for export and temporary file
docker rm `cat id.tmp` && rm -f id.tmp
Ответ 3
Расширение официального ответа от Docker docs и верхний ответ здесь, вы можете иметь следующие псевдонимы в своих .bashrc или .zshrc
# backup files from a docker volume into /tmp/backup.tar.gz
function docker-volume-backup-compressed() {
docker run --rm -v /tmp:/backup --volumes-from "$1" debian:jessie tar -czvf /backup/backup.tar.gz "${@:2}"
}
# restore files from /tmp/backup.tar.gz into a docker volume
function docker-volume-restore-compressed() {
docker run --rm -v /tmp:/backup --volumes-from "$1" debian:jessie tar -xzvf /backup/backup.tar.gz "${@:2}"
echo "Double checking files..."
docker run --rm -v /tmp:/backup --volumes-from "$1" debian:jessie ls -lh "${@:2}"
}
# backup files from a docker volume into /tmp/backup.tar
function docker-volume-backup() {
docker run --rm -v /tmp:/backup --volumes-from "$1" busybox tar -cvf /backup/backup.tar "${@:2}"
}
# restore files from /tmp/backup.tar into a docker volume
function docker-volume-restore() {
docker run --rm -v /tmp:/backup --volumes-from "$1" busybox tar -xvf /backup/backup.tar "${@:2}"
echo "Double checking files..."
docker run --rm -v /tmp:/backup --volumes-from "$1" busybox ls -lh "${@:2}"
}
Обратите внимание, что резервная копия сохраняется в /tmp
, поэтому вы можете переместить файл резервной копии, сохраненный там между хостами докеров.
Существует также две пары псевдонимов резервного копирования/восстановления. Один использует сжатие и debian: jessie и другие без сжатия, но с busybox. Благодарите за использование сжатия, если файлы для резервного копирования большие.
Ответ 4
Я добавлю еще один недавний инструмент из IBM, который фактически сделан для переноса тома с одного контейнера на другой. Это текущий проект. Таким образом, вы можете найти другую версию с дополнительными функциями в будущем.
Cargo был разработан для переноса контейнеров с одного хоста на другой хост вместе с их данными с минимальным временем простоя. Cargo использует возможности объединения данных объединенной файловой системы для создания единого представления данных (в основном корневой файловой системы) на исходном и целевом узлах. Это позволяет Cargo запускать контейнер почти сразу (в миллисекундах) на целевом хосте, поскольку данные из исходной корневой файловой системы копируются на целевые хосты по требованию (с использованием copy-on-write (COW)) или лениво в фоновом режиме (используя rsync).
Важными моментами являются:
- сервер centralized
обрабатывает процесс миграции
Ссылка на проект приведена здесь:
https://github.com/nadgowdas/cargo