docker - images - ¿Cómo portar volúmenes solo de datos de un host a otro?
dockers images (4)
Añadiré aquí otra herramienta reciente de IBM, que en realidad está hecha para la migración de volúmenes de un host contenedor a otro. Este es un proyecto actualmente en curso. Por lo tanto, es posible que encuentre una versión diferente con funciones adicionales en el futuro.
Cargo se desarrolló para migrar contenedores de un host a otro host junto con sus datos con un tiempo de inactividad mínimo. Cargo utiliza las capacidades de federación de datos del sistema de archivos union para crear una vista unificada de datos (principalmente el sistema de archivos raíz) a través de los hosts fuente y destino. Esto permite que Cargo inicie un contenedor casi de inmediato (en milisegundos) en el host de destino, ya que los datos del sistema de archivos raíz de origen se copian a los hosts de destino a pedido (utilizando una partición de copia de escritura (COW) ) o de forma perezosa en el fondo (usando rsync) .
Los puntos importantes son: - un servidor centralized
maneja el proceso de migración
El enlace al proyecto se da aquí:
https://github.com/nadgowdas/cargo
Tal como se describe en la documentación de Docker sobre Trabajar con volúmenes, existe el concepto de los llamados contenedores solo de datos , que proporcionan un volumen que se puede montar en varios otros contenedores, sin importar si el contenedor de solo datos se está ejecutando realmente o no.
Básicamente, esto suena increíble. Pero hay una cosa que no entiendo.
Estos volúmenes (que no se asignan explícitamente a una carpeta en el host por motivos de portabilidad, como dice la documentación) son creados y gestionados por Docker en alguna carpeta interna en el host ( /var/docker/volumes/…
).
Supongamos que uso ese volumen y luego tengo que migrarlo de un host a otro. ¿Cómo transfiero el volumen? AFAICS tiene una ID única: ¿puedo ir y copiar el volumen y su contenedor de datos de acuerdo a un nuevo host? ¿Cómo averiguo qué archivos copiar? ¿O hay algún soporte incorporado a Docker que aún no descubrí?
Extendiendo la respuesta oficial de los documentos de Docker y la respuesta principal aquí , puede tener los alias siguientes en su .bashrc o .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}"
}
Tenga en cuenta que la copia de seguridad se guarda en /tmp
, por lo que puede mover el archivo de copia de seguridad guardado allí entre los hosts de Docker.
También hay dos pares de alias de copia de seguridad / restauración. Uno que usa compresión y debian: jessie y otro sin compresión, pero con busybox. Favorecer el uso de compresión si los archivos a respaldar son grandes.
La respuesta oficial ya está disponible aquí:
Compartir directorios usando volúmenes
En la sección "Copia de seguridad, restaurar o migrar volúmenes de datos", tiene:
APOYO:
sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
-
--rm
: elimina el contenedor cuando sale -
--volumes-from DATA
: adjuntar a los volúmenes compartidos por el contenedor DATA -
-v $(pwd):/backup
: bind monta el directorio actual en el contenedor; para escribir el archivo tar -
busybox
: una imagen pequeña y simple, buena para el mantenimiento rápido -
tar cvf /backup/backup.tar /data
: crea un archivo tar sin comprimir de todos los archivos en el directorio / data
RESTAURAR:
# 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
Puede exportar el volumen a tar y transferirlo a otra máquina. E importar los datos con tar en la segunda máquina. Esto no depende de los detalles de implementación de los volúmenes.
# 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