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.
backup
docker
linux-containers
pguardiario
fuente
fuente
Respuestas:
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 .
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 run
comando tiene un nuevo comportamiento para la-v
opció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 prune
comando para eliminar todos los volúmenes colgantes fácilmente.fuente
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 heredadosmysqldump
. Simplemente envuelva en el contenedor, bótelo y luego cópielodocker cp
.data only container obsolete?
Para nada. El contenedor de solo datos le proporciona un contenedor paradocker exec data-container tar -czf snapshot.tgz /data
entoncesdocker cp data-container:snapshot.tgz ./snapshot.tgz
y similares. Si desea que el contenedor sea de larga duración, haga que su comando sea comotail -f /dev/null
si nunca saliera, utilizando recursos mínimos.ACTUALIZACIÓN 2
Script de bash de copia de seguridad de un solo volumen sin procesar:
Script de bash de restauración de volumen único sin procesar:
El uso puede ser así:
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:
y:
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:
puedes hacer una copia de seguridad de todos los volúmenes de esta manera
y restaurar así:
O puedes seguir el camino oficial:
¿Cómo portar volúmenes solo de datos de un host a otro?
fuente
unknown shorthand flag: 'r' in -rm.
¿debería ser--rm
? (Docker versión 18.09.5, compilación e8ff056)Si solo necesita hacer una copia de seguridad de los volúmenes montados, puede copiar carpetas de su Dockerhost .
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 .
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
Ahora puede verificar si funciona:
fuente
/var/lib/docker/volumes
en Ubuntu?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 llamadadata_image
:Hacer copias de seguridad:
Restaurar:
fuente
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
Expanda este archivo tar en un nuevo contenedor para que podamos confirmarlo como parte de su imagen
Compromete y empuja la imagen con la etiqueta deseada ($ VERSIÓN)
Finalmente, vamos a limpiar
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
Ejecute su imagen de whatEver con volúmenes de data-conainter
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.
fuente
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-backup
ydb-restore
servicios a su archivo docker-compose.yml, y lo adapta para el nombre de su volumen. Mi volumen se nombradbdata
en este ejemplo.Evitar la corrupción
Para mantener la coherencia de los datos, detenga su contenedor db antes de realizar una copia de seguridad o restaurar
Copia de seguridad
Para realizar una copia de seguridad en el destino predeterminado (
backup/dbdata.tar.bz2
):O, si desea especificar un nombre de destino alternativo, haga lo siguiente:
Restaurando
Para restaurar desde
backup/dbdata.tar.bz2
, hacer:O restaurar desde un archivo específico usando:
Adapte los comandos de https://loomchild.net/2017/03/26/backup-restore-docker-named-volumes/ para crear este enfoque.
fuente
El siguiente comando ejecutará tar en un contenedor con todos los volúmenes de datos nombrados montados y redirigirá la salida a un archivo:
Asegúrese de probar el archivo resultante en caso de que algo salga mal:
fuente
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:
archivará el volumen nombrado
some_volume
al/tmp/archive1.tar.bz2
archivo de archivadoRestaurar:
se limpie y restaurar el volumen llamado
some_volume
de/tmp/archive1.tar.bz2
archivo de almacenamiento.Más información: https://medium.com/@loomchild/backup-restore-docker-named-volumes-350397b8e362
fuente
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
duplicity
para 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.
fuente
Si desea una copia de seguridad completa, deberá realizar algunos pasos:
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 " .
fuente
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.
fuente
Si tiene un caso tan simple como el mío, puede hacer lo siguiente:
ADD folder destination
Por ejemplo, suponiendo que tiene los datos de los volúmenes en su directorio de inicio, por ejemplo
/home/mydata
, puede ejecutar lo siguiente:Donde su DOCKERFILE apunta a un archivo como este:
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
fuente
docker cp
.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 :
docker-compose.yml
y adjunte elenv.txt
archivo 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 ejecutardocker inspect <service-name>
y localizar los volúmenes :Edite el contenido del archivo de configuración
env.txt
y colóquelo en la ruta del proyecto:Ejecute el contenedor de acoplamiento
fuente
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.
En otro servidor
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, ...).
fuente