Подтвердить что ты не робот

Как переносить объемы данных только с одного хоста на другой?

Как описано в документации Docker на Работа с томами, существует концепция так называемых контейнеров только для данных, которые предоставляют том, который может быть установлен в несколько в других контейнерах, независимо от того, действительно ли работает контейнер только для данных.

В принципе, это звучит потрясающе. Но есть одна вещь, которую я не понимаю.

Эти тома (которые явно не отображают папку на хосте по причинам мобильности, как указано в документации) создаются и управляются Docker в некоторой внутренней папке на хосте (/var/docker/volumes/…).

Предположим, что я использую такой том, а затем мне нужно перенести его с одного хоста на другой - как мне порт тома? AFAICS имеет уникальный идентификатор - могу ли я просто пойти и скопировать том и его контейнер с данными только на новый хост? Как узнать, какие файлы нужно копировать? Или есть некоторая поддержка, встроенная в Docker, которую я еще не обнаружил?

4b9b3361

Ответ 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