¿Cómo puedo hacer una copia de seguridad de un contenedor Docker con sus volúmenes de datos?

152

He estado usando este tutum / wordpress de Docker-image para demostrar un sitio web de Wordpress. Recientemente descubrí que la imagen usa volúmenes para los datos MySQL.

Entonces, el problema es este: si deseo hacer una copia de seguridad y restaurar el contenedor, puedo intentar confirmar una imagen, y luego eliminar el contenedor y crear un nuevo contenedor a partir de la imagen confirmada. Pero si hago eso, el volumen se elimina y todos mis datos desaparecen.

Debe haber una forma simple de hacer una copia de seguridad de mi contenedor más sus datos de volumen, pero no puedo encontrarlo en ningún lado.

pguardiario
fuente
Eche un vistazo a este script que escribí que respalda absolutamente todo en un proyecto de docker, incluidos volúmenes con nombre y sin nombre, imágenes, configuración, registros, sistema de archivos raíz del contenedor, bases de datos y más: docker-compose-backup.sh .
Nick Sweeting

Respuestas:

142

si deseo revertir el contenedor, puedo intentar confirmar una imagen y luego eliminar el contenedor y crear un nuevo contenedor a partir de la imagen confirmada. Pero si hago eso, el volumen se elimina y todos mis datos se van

Como explica la guía del usuario de Docker, los volúmenes de datos están destinados a conservar los datos fuera de un sistema de archivos contenedor. Esto también facilita el intercambio de datos entre múltiples contenedores.

Si bien Docker nunca eliminará datos en volúmenes (a menos que elimine el contenedor asociado con ellos docker rm -v), los volúmenes a los que no hace referencia ningún contenedor de Docker se denominan volúmenes colgantes . Esos volúmenes colgantes son difíciles de eliminar y de difícil acceso.

Esto significa que tan pronto como se elimina el último contenedor que utiliza un volumen, el volumen de datos se cuelga y su contenido es difícil de acceder.

Para evitar esos volúmenes colgantes, el truco consiste en crear un contenedor acoplable adicional utilizando el volumen de datos que desea mantener; para que siempre haya al menos ese contenedor acoplable que haga referencia al volumen. De esta manera, puede eliminar el contenedor acoplable que ejecuta la aplicación WordPress sin perder la facilidad de acceso al contenido de ese volumen de datos.

Dichos contenedores se denominan contenedores de volumen de datos .

Debe haber una forma simple de hacer una copia de seguridad de mi contenedor más datos de volumen, pero no puedo encontrarlo en ningún lado.

imágenes de copia de seguridad de la ventana acoplable

Para hacer una copia de seguridad de las imágenes de Docker, use el comando docker save que producirá un archivo tar que se puede usar más adelante para crear una nueva imagen de Docker con el comando docker load .

contenedores de copia de seguridad

Puede hacer una copia de seguridad de un contenedor acoplable por diferentes medios

Tenga en cuenta que esos comandos solo harán una copia de seguridad del sistema de archivos en capas del contenedor Docker. Esto excluye los volúmenes de datos .

volúmenes de datos de copia de seguridad del acoplador

Para hacer una copia de seguridad de un volumen de datos, puede ejecutar un nuevo contenedor utilizando el volumen que desea hacer una copia de seguridad y ejecutando el comando tar para producir un archivo del contenido del volumen como se describe en la guía del usuario de la ventana acoplable .

En su caso particular, el volumen de datos se utiliza para almacenar los datos para un servidor MySQL. Entonces, si desea exportar un archivo tar para este volumen, primero deberá detener el servidor MySQL. Para hacerlo, deberá detener el contenedor de wordpress.

copia de seguridad de los datos de MySQL

Otra forma es conectarse de forma remota al servidor MySQL para generar un volcado de la base de datos con el comando mysqldump . Sin embargo, para que esto funcione, su servidor MySQL debe estar configurado para aceptar conexiones remotas y también tener un usuario que pueda conectarse de forma remota. Este podría no ser el caso con la imagen acoplable de WordPress que está utilizando.


Editar

Docker introdujo recientemente complementos de volumen de Docker que permiten delegar el manejo de volúmenes a complementos implementados por proveedores.

El docker runcomando tiene un nuevo comportamiento para la -vopción. Ahora es posible pasarle un nombre de volumen . Los volúmenes creados de esa manera se nombran y son fáciles de consultar más adelante, lo que facilita los problemas con los volúmenes colgantes .

Editar 2

Docker introdujo el docker volume prunecomando para eliminar todos los volúmenes colgantes fácilmente.

Thomasleveil
fuente
34
En realidad, estoy más interesado en hacer un contenedor que pueda mover fácilmente, no entiendo el punto de un contenedor que no se puede mover.
pguardiario
En ese caso, debe buscar herramientas que ayuden a administrar el volumen de datos de Docker por usted, como Flocker
Thomasleveil
9
Docker no está eliminando volúmenes de datos automáticamente. Data volumes are designed to persist data, independent of the container’s life cycle. Docker therefore never automatically delete volumes when you remove a container, nor will it “garbage collect” volumes that are no longer referenced by a container. así que los contenedores de solo datos son heredados
Andrii Zarubin
2
no necesita una conexión remota para el mysqldump. Simplemente envuelva en el contenedor, bótelo y luego cópielo docker cp.
jiggunjer
@AndriiZarubin re: data only container obsolete?Para nada. El contenedor de solo datos le proporciona un contenedor para docker exec data-container tar -czf snapshot.tgz /dataentonces docker cp data-container:snapshot.tgz ./snapshot.tgzy similares. Si desea que el contenedor sea de larga duración, haga que su comando sea como tail -f /dev/nullsi nunca saliera, utilizando recursos mínimos.
Jesse Chisholm
31

ACTUALIZACIÓN 2

Script de bash de copia de seguridad de un solo volumen sin procesar:

#!/bin/bash
# This script allows you to backup a single volume from a container
# Data in given volume is saved in the current directory in a tar archive.
CONTAINER_NAME=$1
VOLUME_NAME=$2

usage() {
  echo "Usage: $0 [container name] [volume name]"
  exit 1
}

if [ -z $CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

if [ -z $VOLUME_NAME ]
then
  echo "Error: missing volume name parameter."
  usage
fi

sudo docker run --rm --volumes-from $CONTAINER_NAME -v $(pwd):/backup busybox tar cvf /backup/backup.tar $VOLUME_NAME

Script de bash de restauración de volumen único sin procesar:

#!/bin/bash
# This script allows you to restore a single volume from a container
# Data in restored in volume with same backupped path
NEW_CONTAINER_NAME=$1

usage() {
  echo "Usage: $0 [container name]"
  exit 1
}

if [ -z $NEW_CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

sudo docker run --rm --volumes-from $NEW_CONTAINER_NAME -v $(pwd):/backup busybox tar xvf /backup/backup.tar

El uso puede ser así:

$ volume_backup.sh old_container /srv/www
$ sudo docker stop old_container && sudo docker rm old_container
$ sudo docker run -d --name new_container myrepo/new_container
$ volume_restore.sh new_container

Las suposiciones son: el archivo de respaldo se llama backup.tar, reside en el mismo directorio que el script de copia de respaldo y restauración, el nombre del volumen es el mismo entre los contenedores.

ACTUALIZAR

Me parece que la copia de seguridad de volúmenes desde contenedores no es diferente de la copia de seguridad de volúmenes desde contenedores de datos.

Los volúmenes no son más que rutas vinculadas a un contenedor, por lo que el proceso es el mismo.

No sé si docker-backup también funciona para los mismos volúmenes de contenedor, pero puede usar:

sudo docker run --rm --volumes-from yourcontainer -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data

y:

sudo docker run --rm --volumes-from yournewcontainer -v $(pwd):/backup busybox tar xvf /backup/backup.tar

ACTUALIZACIÓN FINAL

Hay una buena herramienta disponible que le permite hacer copias de seguridad y restaurar los contenedores de volúmenes de docker:

https://github.com/discordianfish/docker-backup

si tiene un contenedor vinculado a algunos volúmenes de contenedor como este:

$ docker run --volumes-from=my-data-container --name my-server ...

puedes hacer una copia de seguridad de todos los volúmenes de esta manera

$ docker-backup store my-server-backup.tar my-server

y restaurar así:

$ docker-backup restore my-server-backup.tar

O puedes seguir el camino oficial:

¿Cómo portar volúmenes solo de datos de un host a otro?

tommasop
fuente
No, no se trata de una situación "--volumes-from", sino que los volúmenes se definen en el dockerfile, que es lo que hace que los datos no persistan. Si miras el dockerfile para tutum / lamp verás lo que quiero decir.
pguardiario
La respuesta que ya dio es bueno para cualquier tipo de volumen porque los volúmenes son volúmenes y los recipientes son recipientes no hay diferencia si se utiliza un recipiente como un contenedor de datos desde una perspectiva de volúmenes
tommasop
El volumen que se define en el dockerfile se destruye cuando se destruye el contenedor. Por lo tanto, no hay forma de recuperar esos datos cuando mueve el contenedor.
pguardiario
debe extraer los datos antes de mover el contenedor, luego reiniciar el contenedor y volver a colocar los datos
tommasop
1
Me sale un error: unknown shorthand flag: 'r' in -rm.¿debería ser --rm? (Docker versión 18.09.5, compilación e8ff056)
kuga
22

Si solo necesita hacer una copia de seguridad de los volúmenes montados, puede copiar carpetas de su Dockerhost .

Nota: Si está en Ubuntu , Dockerhost es su máquina local. Si estás en Mac , Dockerhost es tu máquina virtual.

En Ubuntu

Puede encontrar todas las carpetas con volúmenes aquí: /var/lib/docker/volumes/para poder copiarlas y archivarlas donde desee.

En MAC

No es tan fácil como en Ubuntu. Necesita copiar archivos de VM.

Aquí hay una secuencia de comandos de cómo copiar todas las carpetas con volúmenes de la máquina virtual (donde se ejecuta el servidor Docker) a su máquina local. Suponemos que su máquina virtual docker-máquina se llama default .

docker-machine ssh default sudo cp -v -R /var/lib/docker/volumes/ /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine scp -R default:/home/docker/volumes ./backup_volumes

docker-machine ssh default sudo rm -r /home/docker/volumes

Creará una carpeta ./backup_volumes en su directorio actual y copiará todos los volúmenes a esta carpeta.

Aquí hay una secuencia de comandos de cómo copiar todos los volúmenes guardados desde su directorio local ( ./backup_volumes ) a la máquina Dockerhost

docker-machine scp -r ./backup_volumes default:/home/docker

docker-machine ssh default sudo mv -f /home/docker/backup_volumes /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine ssh default sudo cp -v -R /home/docker/volumes /var/lib/docker/

docker-machine ssh default sudo rm -r /home/docker/volumes

Ahora puede verificar si funciona:

docker volume ls
Andrii Dvoiak
fuente
¿Necesitamos apagar el contenedor para hacer una copia de seguridad de esa carpeta /var/lib/docker/volumesen Ubuntu?
onknows
2
No es necesario, puede copiar esa carpeta cuando lo desee.
Andrii Dvoiak
44
Técnicamente sí, puede, pero está expuesto a problemas de corrupción de datos ya que la copia no es atómica y puede haber escrituras concurrentes en el volumen, prefiero detener el contenedor primero.
Alessandro S.
13

Digamos que su nombre de volumen es data_volume. Puede usar los siguientes comandos para hacer una copia de seguridad y restaurar el volumen desde y hacia una imagen acoplable llamada data_image:

Hacer copias de seguridad:

docker run --rm --mount source=data_volume,destination=/data alpine tar -c -f- data | docker run -i --name data_container alpine tar -x -f-
docker container commit data_container data_image
docker rm data_container

Restaurar:

docker run --rm data_image tar -c -f- data | docker run -i --rm --mount source=data_volume,destination=/data alpine tar -x -f-
Sahil Ahuja
fuente
¿Es esto una copia de seguridad en tiempo real?
Kang Andrew
2
Como se puede montar el mismo volumen en varios acopladores, sí, esta es una copia de seguridad en tiempo real. P.ej. Se puede realizar una copia de seguridad del volumen montado en un contenedor Mysql (suponiendo que no haya corrupción de datos). Pero para los servicios que deben detenerse por temor a la corrupción de datos, no, esto no es en tiempo real.
Sahil Ahuja
9

Sé que esto es antiguo, pero me doy cuenta de que no existe una solución bien documentada para enviar un contenedor de datos (como copia de seguridad) a Docker Hub. Acabo de publicar un breve ejemplo sobre cómo hacerlo en https://dzone.com/articles/docker-backup-your-data-volumes-to-docker-hub

Lo siguiente es el resultado final

El tutorial de Docker sugiere que puede hacer una copia de seguridad y restaurar el volumen de datos localmente. Usaremos esta técnica, agregaremos algunas líneas más para que esta copia de seguridad se inserte en el Docker Hub para facilitar la restauración futura en cualquier ubicación que deseemos. Entonces empecemos. Estos son los pasos a seguir:

Haga una copia de seguridad del volumen de datos desde el contenedor de datos denominado data-container-to-backup

docker run --rm --volumes-from data-container-backup --name tmp-backup -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /folderToBackup

Expanda este archivo tar en un nuevo contenedor para que podamos confirmarlo como parte de su imagen

docker run -d -v $(pwd):/backup --name data-backup ubuntu /bin/sh -c "cd / && tar xvf /backup/backup.tar"

Compromete y empuja la imagen con la etiqueta deseada ($ VERSIÓN)

docker commit data-backup repo/data-backup:$VERSION
docker push repo/data-backup:$VERSION

Finalmente, vamos a limpiar

docker rm data-backup
docker rmi $(docker images -f "dangling=true" -q)

Ahora tenemos una imagen llamada respaldo de datos en nuestro repositorio que es simplemente un sistema de archivos con los archivos y carpetas de respaldo. Para utilizar esta imagen (también conocida como restaurar desde copia de seguridad), hacemos lo siguiente:

Ejecute el contenedor de datos con la imagen de copia de seguridad de datos

run -v /folderToBackup --entrypoint "bin/sh" --name data-container repo/data-backup:${VERSION}

Ejecute su imagen de whatEver con volúmenes de data-conainter

docker run --volumes-from=data-container repo/whatEver

Eso es.

Me sorprendió que no haya documentación para este trabajo. Espero que alguien encuentre esto útil. Sé que me tomó un tiempo pensar en esto.

z-star
fuente
8

Si su proyecto usa docker-compose, aquí hay un enfoque para realizar copias de seguridad y restaurar sus volúmenes.

docker-compose.yml

Básicamente agrega db-backupy db-restoreservicios a su archivo docker-compose.yml, y lo adapta para el nombre de su volumen. Mi volumen se nombra dbdataen este ejemplo.

version: "3"

services:
  db:
    image: percona:5.7
    volumes:
      - dbdata:/var/lib/mysql

  db-backup:
    image: alpine    
    tty: false
    environment:
      - TARGET=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "tar -cjf /backup/$${TARGET}.tar.bz2 -C /volume ./"

  db-restore:
    image: alpine    
    environment:
      - SOURCE=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "rm -rf /volume/* /volume/..?* /volume/.[!.]* ; tar -C /volume/ -xjf /backup/$${SOURCE}.tar.bz2"

Evitar la corrupción

Para mantener la coherencia de los datos, detenga su contenedor db antes de realizar una copia de seguridad o restaurar

docker-compose stop db

Copia de seguridad

Para realizar una copia de seguridad en el destino predeterminado ( backup/dbdata.tar.bz2):

docker-compose run --rm db-backup

O, si desea especificar un nombre de destino alternativo, haga lo siguiente:

docker-compose run --rm -e TARGET=mybackup db-backup

Restaurando

Para restaurar desde backup/dbdata.tar.bz2, hacer:

docker-compose run --rm db-restore

O restaurar desde un archivo específico usando:

docker-compose run --rm -e SOURCE=mybackup db-restore

Adapte los comandos de https://loomchild.net/2017/03/26/backup-restore-docker-named-volumes/ para crear este enfoque.

jdhildeb
fuente
5

El siguiente comando ejecutará tar en un contenedor con todos los volúmenes de datos nombrados montados y redirigirá la salida a un archivo:

docker run --rm `docker volume list -q | egrep -v '^.{64}$' | awk '{print "-v " $1 ":/mnt/" $1}'` alpine tar -C /mnt -cj . > data-volumes.tar.bz2

Asegúrese de probar el archivo resultante en caso de que algo salga mal:

tar -tjf data-volumes.tar.bz2
Konrad
fuente
4

Si solo necesita una copia de seguridad simple en un archivo, puede probar mi pequeña utilidad: https://github.com/loomchild/volume-backup

Ejemplo

Apoyo:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup backup archive1

archivará el volumen nombrado some_volumeal /tmp/archive1.tar.bz2archivo de archivado

Restaurar:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup restore archive1

se limpie y restaurar el volumen llamado some_volumede /tmp/archive1.tar.bz2archivo de almacenamiento.

Más información: https://medium.com/@loomchild/backup-restore-docker-named-volumes-350397b8e362

telar
fuente
Creé una herramienta similar github.com/01e9/docker-backup Crea archivos de respaldo y los agrega a un directorio de sincronización de Resilio
Oleg
2

He creado una herramienta para orquestar y lanzar copias de seguridad de datos y contenedores mysql, simplemente llamada copia de seguridad docker . Incluso hay una imagen lista para usar en el Docker Hub .

Está escrito principalmente en Bash, ya que es principalmente orquestación. Se utiliza duplicitypara el motor de respaldo real. Actualmente puede realizar copias de seguridad en FTP (S) y Amazon S3.

La configuración es bastante simple: escriba un archivo de configuración en YAML que describa qué hacer una copia de seguridad y dónde, ¡y aquí está!

Para los contenedores de datos, monta automáticamente los volúmenes compartidos por su contenedor para hacer una copia de seguridad y procesarlo. Para los contenedores mysql, los vincula y ejecuta un mysqldump incluido con su contenedor y procesa el resultado.

Lo escribí porque uso Docker-Cloud, que no está actualizado con los últimos lanzamientos de docker-engine y porque quería adoptar el estilo Docker al no incluir ningún proceso de copia de seguridad dentro de los contenedores de mis aplicaciones.

Arnaud de Mouhy
fuente
2

Si desea una copia de seguridad completa, deberá realizar algunos pasos:

  1. Comprometer el contenedor a una imagen
  2. Guardar la imagen
  3. Haga una copia de seguridad del volumen del contenedor creando un archivo tar del punto de montaje del volumen en el contenedor.
  4. Repita los pasos 1-3 para el contenedor de la base de datos también.

Tenga en cuenta que hacer solo una confirmación Docker del contenedor a una imagen NO incluye volúmenes adjuntos al contenedor (ref: documentación de confirmación Docker ).

" La operación de confirmación no incluirá ningún dato contenido en volúmenes montados dentro del contenedor " .

aguilucho3d
fuente
1

Si le gusta ingresar operadores arcanos desde la línea de comando, le encantarán estas técnicas manuales de respaldo de contenedores. Tenga en cuenta que existe una forma más rápida y eficiente de hacer copias de seguridad de contenedores que es igual de efectiva. He escrito instrucciones aquí: https://www.morpheusdata.com/blog/2017-03-02-how-to-create-a-docker-backup-with-morpheus

Paso 1: Agregue un host Docker a cualquier nube Como se explica en un tutorial en el sitio de soporte de Morpheus, puede agregar un host Docker a la nube que elija en cuestión de segundos. Comience eligiendo Infraestructura en la barra de navegación principal de Morpheus. Seleccione Hosts en la parte superior de la ventana Infraestructura y haga clic en el botón "+ Hosts de contenedor" en la parte superior derecha.

Para realizar una copia de seguridad de un host Docker en una nube a través de Morpheus, navegue hasta la pantalla Infraestructura y abra el menú "+ Hosts de contenedor".

Elija un tipo de host de contenedor en el menú, seleccione un grupo y luego ingrese datos en los cinco campos: Nombre, Descripción, Visibilidad, Seleccione una nube e Ingrese etiquetas (opcional). Haga clic en Siguiente y luego configure las opciones de host eligiendo un plan de servicio. Tenga en cuenta que los campos Volumen, Memoria y recuento de CPU estarán visibles solo si el plan que selecciona tiene opciones personalizadas habilitadas.

Aquí es donde agrega y dimensiona volúmenes, establece el tamaño de la memoria y el conteo de CPU, y elige una red. También puede configurar el nombre de usuario y la contraseña del sistema operativo, el nombre de dominio y el nombre de host, que de forma predeterminada es el nombre del contenedor que ingresó anteriormente. Haga clic en Siguiente y luego agregue cualquier Flujo de trabajo de automatización (opcional). Finalmente, revise su configuración y haga clic en Completar para guardarla.

Paso 2: Agregar la integración de Docker Registry a las nubes públicas o privadas Adam Hicks describe en otro tutorial de Morpheus lo sencillo que es integrarse con un Docker Registry privado. (No se requiere configuración adicional para usar Morpheus para aprovisionar imágenes con el centro público de Docker utilizando la API pública de Docker).

Seleccione Integraciones en la pestaña Administrador de la barra de navegación principal y luego elija el botón "+ Nueva integración" en el lado derecho de la pantalla. En la ventana de integración que aparece, seleccione Repositorio de Docker en el menú desplegable Tipo, ingrese un nombre y agregue el punto final de la API de registro privado. Proporcione un nombre de usuario y contraseña para el registro que está utilizando, y haga clic en el botón Guardar cambios.

Integre un Registro Docker con una nube privada a través del cuadro de diálogo "Nueva integración" de Morpheus.

Para aprovisionar la integración que acaba de crear, elija Docker en Tipo en el cuadro de diálogo Crear instancia, seleccione el registro en el menú desplegable Registro de Docker en la pestaña Configurar y luego continúe aprovisionando como lo haría con cualquier contenedor de Docker.

Paso 3: Administre las copias de seguridad Una vez que haya agregado el host Docker e integrado el registro, se configurará una copia de seguridad y se realizará automáticamente para cada instancia que aprovisione. El soporte de Morpheus proporciona instrucciones para ver copias de seguridad, crear una copia de seguridad de instancia y crear una copia de seguridad del servidor.

thelefty07
fuente
0

Si tiene un caso tan simple como el mío, puede hacer lo siguiente:

  1. Cree un Dockerfile que extienda la imagen base de su contenedor
  2. Supongo que sus volúmenes están asignados a su sistema de archivos, por lo que puede agregar esos archivos / carpetas a su imagen usando ADD folder destination
  3. ¡Hecho!

Por ejemplo, suponiendo que tiene los datos de los volúmenes en su directorio de inicio, por ejemplo /home/mydata, puede ejecutar lo siguiente:

DOCKERFILE=/home/dockerfile.bk-myimage
docker build --rm --no-cache -t $IMAGENAME:$TAG -f $DOCKERFILE /home/pirate

Donde su DOCKERFILE apunta a un archivo como este:

FROM user/myimage
MAINTAINER Danielo Rodríguez Rivero <[email protected]>

WORKDIR /opt/data
ADD mydata .

El resto de las cosas se hereda de la imagen base. Ahora puede enviar esa imagen a la nube acoplable y sus usuarios tendrán los datos disponibles directamente en sus contenedores

Danielo515
fuente
cuál es el punto de usar un volumen si eventualmente lo vas a hornear en la imagen.
jiggunjer
@jiggunjer tener un volumen le permite anular los datos en el contenedor
Danielo515
Puedo anular los datos sin un volumen también, usando docker cp.
jiggunjer
0

El problema : desea hacer una copia de seguridad de su contenedor de imágenes CON los volúmenes de datos en él, pero esta opción no está lista para usar, la forma directa y trivial sería copiar la ruta de los volúmenes y hacer una copia de seguridad de la imagen de la ventana acoplable 'cargarla y vincularla ambos juntos. pero esta solución parece ser torpe y no sostenible y mantenible: necesitaría crear un trabajo cron que haga que esto fluya cada vez.

Solución : Uso de dockup : imagen de Docker para hacer una copia de seguridad de los volúmenes del contenedor de Docker y subirlo a s3 (Docker + Backup = dockup). dockup usará sus credenciales de AWS para crear un nuevo depósito con nombre según la variable de entorno, obtendrá los volúmenes configurados y será marcado, comprimido, sellado en el tiempo y cargado en el depósito S3.

Pasos :

  1. configure docker-compose.ymly adjunte el env.txtarchivo de configuración. Los datos deben cargarse en un depósito s3 seguro dedicado y estar listos para volver a cargarlos en las ejecuciones de DRP. para verificar qué ruta de volúmenes configurar configurar ejecutar docker inspect <service-name>y localizar los volúmenes :

"Volúmenes": {"/ etc / service-example": {}, "/ service-example": {}},

  1. Edite el contenido del archivo de configuración env.txty colóquelo en la ruta del proyecto:

    AWS_ACCESS_KEY_ID=<key_here>
    AWS_SECRET_ACCESS_KEY=<secret_here>
    AWS_DEFAULT_REGION=us-east-1
    BACKUP_NAME=service-backup
    PATHS_TO_BACKUP=/etc/service-example /service-example
    S3_BUCKET_NAME=docker-backups.example.com
    RESTORE=false
    
  2. Ejecute el contenedor de acoplamiento

$ docker run --rm \
--env-file env.txt \
--volumes-from <service-name> \
--name dockup tutum/dockup:latest
  1. Luego verifique que su cubo s3 contenga los datos relevantes
avivamg
fuente
-1

Esta es una forma de copia de seguridad de carpeta de volumen.
Si tiene infracción de registro de Docker, este método es muy útil.
Esto utiliza el registro de Docker para mover el archivo zip fácilmente.

#volume folder backup script. !/bin/bash

#common bash variables. set these variable before running scripts
REPO=harbor.otcysk.org:20443/levee
VFOLDER=/data/mariadb
TAG=mariadb1

#zip local folder for volume files
tar cvfz volume-backup.tar.gz $VFOLDER

#copy the zip file to volume-backup container.
#zip file must be in current folder.
docker run -d -v $(pwd):/temp --name volume-backup ubuntu \
       bash -c "cd / && cp /temp/volume-backup.tar.gz ."


#commit for pushing into REPO
docker commit volume-backup $REPO/volume-backup:$TAG

#check gz files in this container
#docker run --rm -it --entrypoint bash --name check-volume-backup \
        $REPO/volume-backup:$TAG

#push into REPO
docker push $REPO/volume-backup:$TAG

En otro servidor

#pull the image in another server
docker pull $REPO/volume-backup:$TAG

#restore files in another server filesystem
docker run --rm -v $VFOLDER:$VFOLDER --name volume-backup $REPO/volume-backup:$TAG \
       bash -c "cd / && tar xvfz volume-backup.tar.gz"

Ejecute su imagen que utiliza esta carpeta de volumen.
Puede crear fácilmente una imagen que tenga una imagen de ejecución y un archivo zip de volumen.
Pero no lo recomiendo por varias razones (tamaño de imagen, comando de entrada, ...).

Myeongsik Joo
fuente