441 - Backups en Docker

441 - Backups en Docker

¿Como realizar backups en Docker? Te cuento como realizar copias de seguridad de tus volúmenes Docker de cuatro formas diferentes para que tu elijas.

1:25
-3:15

Últimamente, en el grupo de Telegram, uno de los temas mas recurrentes es el de hacer bachups en Docker. Lo cierto, es que en repetidas ocasiones me habrás escuchado en el podcast, o en YouTube hablar sobre copias de seguridad. En concreto, como podías tener las copias de seguridad de tu equipo, o de los documentos que te interese, o de lo que tu quieras. En concreto, normalmente te hablo sobre Borg, que es la herramienta que utilizo por defecto. Sin embargo, hay vida mas allá de tu equipo, también están todos esos servicios, que durante estos últimos meses has estado utilizando.

Así, en este episodio del podcast, te voy a hablar sobre diferentes métodos, para que realices copias de seguridad de tus volúmenes, para que hagas tus Backups en Docker. Son varias opciones, para que tu elijas la que mas te convence, o la que mejor se adapta a tus necesidades.

Backups en Docker

Backups en Docker

Docker adicto

Si te sucede como a mi, que te has convertido en un Docker adicto, o en un Self Hosted adicto, según veas, esto es imprescindible.

Hasta la fecha, y toco madera, no he tenido que restaurar mi VPS, pero si tuviera que hacerlo tendría bastante trabajo por delante. Por supuesto que menos que si todo estuviera instalado directamente en la propia máquina, y esto es sin lugar a dudas gracias a Docker y a docker-compose.

La verdad es que Docker ha sido todo una revolución. Me ha permitido probar decenas, si no, centenares de servicios y aplicaciones que de otra manera, hubiera sido completamente impensable. Así, que indudablemente tengo mucho que agradecer.

Sin embargo, que sea una revolución, no quiere decir que no tengamos que prestar la misma atención que prestamos con los servicios instalados en la propia máquina. Por ejemplo, en el caso de las bases de datos. Actualmente tengo varias páginas web servidas desde contenedor, y en este sentido, tengo que realizar las correspondientes copias de seguridad, para evitar llevarme una sorpresa en el momento mas inoportuno.

Backups en Docker

A lo largo y ancho de Internet puedes encontrar todo tipo de herramientas, scripts y soluciones para realizar tus copias de seguridad de forma efectiva. O por lo menos, podrás encontrar ideas inspiradoras para solucionar los Backups en Docker de forma efectiva. Ya depende de ti, encontrar aquella que mejor se adapte a tus necesidades o a tu flujo de trabajo.

Un sencillo script

Lo primero y mas sencillo es un script como es el que te muestro a continuación que se encargará de hacer la copia de seguridad. Para ello tienes que parar el contenedor. Ojo, que se trata de hacer, en el caso de docker compose un stop no un down. La diferencia es importante, así que tienes que tenerlo en cuenta.

Así, el script, puede ser tan sencillo como,

VOLUME_NAME="$1"
if [[ -z "$VOLUME_NAME" ]]
then
    echo "Tienes que especificar un volumen"
    exit 1
fi
docker run --rm \
           -v "$VOLUME_NAME":/backup-volume \
           -v "$(pwd)":/backup \
           busybox \
           tar -zcvf "/backup/${VOLUME_NAME}.tar.gz" /backup-volume

docker-vackup

Si quieres algo mas elaborado, pero siguiendo en la línea de scripts, puedes utilizar docker-vackup. Es un sencillo script que te permitirá hacer una copia de seguridad de los volúmenes de Docker. Por supuesto también te permitirá restaurarlas.

Se trata de un script pensado para ejecutarlo en cualquier host que tenga la herramienta de docker.

En el caso de tratar con bases de datos, el propio desarrollador de este script te recomienda utilizar las propias herramientas que para cada una de las bases de datos existen para hacer copias de seguridad. Pero en el caso de que tengas los archivos de la base de datos en un volumen, no descarta su utilización.

Tiene dos opciones de uso,

  • export/import que te permite copiar archivos entre un tarball y un volumen. Básicamente para hacer copias de seguridad y restaurarlas.
  • save/load te permite copiar archivos entre una imagen y un volumen.

Así, para el caso que nos ocupa de importar y exportar, la operativa es tan sencilla como para exportar utilizar lo siguiente,

vackup export mivolumen mivolument.tar.gz

Mientras que para importar puedes utilizar

vackup improt mivolument.tar.gz mivolumen

La instalación es tremendamente sencilla. Tan solo tienes que ejecutar estas dos líneas en la máquina donde quieras hacer copias de seguridad de tus volúmenes,

curl -sSL https://raw.githubusercontent.com/BretFisher/docker-vackup/main/vackup > /usr/local/bin/vackup
chmod +x /usr/local/bin/vackup

Offen

Offen es un contenedor que te permite realizar copias de seguridad de tus volúmenes. Además te da dos opciones, o bien realizar una copia puntual o bien realizar copias recurrentes.

Pero no solo esto, sino que además te permite llevar estas copias a un directorio local, a un S3, WebDAV o SSH, o a una combinación de ellas.

Y si esto te parece poco, también tienes la opción de realizar rotado de las copias de seguridad antiguas realizadas y el cifrado mediante GPG, así como la opción de que te envié un correo electrónico en el caso de que no se haya podido realizar la copia de seguridad.

Algunas características que seguro te resultarán la mar de interesantes,

  • Te permite indicar los servicios que quieres detener antes de realizar la copia de seguridad. Para detener estos servicios tienes que utilizar una etiqueta.
  • Además de notificarte vía correo electrónico, también puedes personalizar estos mensajes mediante plantillas.
  • Puedes definir determinadas operativas que se ejecutaran antes y/o después de realizarse la copia de seguridad. Por ejemplo, en el caso de una base de datos, puedes realizar la copia de seguridad de la base de datos antes. Para indicar esto tienes que utilizar de nuevo etiquetas.

docker-volume-backup

docker-volume-backup, es otra imagen similar a la anterior. Comparten algunas características y otras no. Así, por ejemplo,

  • Monta distintos volúmenes en un contenedor de los que hace copias de seguridad.
  • Utiliza expresiones compatibles con cron para programar las copias de seguridad.
  • Permite hacer copias de seguridad locales, en AWS S3 o de forma remota mediante scp.
  • Es posible forzar la realización de una copia de seguridad en cualquier momento. Esto siempre es interesante, para el momento que queremos hacer alguna operación delicada. Antes de realizarla simplemente tienes que forzar esa copia de seguridad y tan frescos.
  • Te permite detener e iniciar los contenedores antes de realizar las copias de seguridad.
  • Puedes ejecutar comandos antes y después de realizar la copia de seguridad.
  • Puedes guardar métricas mediante InfluxDB.
  • Es posible cifrar las copias de seguridad.

Este segundo parece una primera semilla del anterior, y que esté un poco a medio cocinar. O simplemente que el desarrollador a cumplido con todas sus expectativas y no necesita nada mas.

¿Y esto es todo?

Evidentemente no. Además de guardar el contenido de los volúmenes necesitaremos guardar la configuración, y esto tendremos que hacerlo de forma ordenada. Esta configuración, por lo general tendrá información sensible.

Y ¿como guardar todo esto? Una interesante opción puede ser utilizar Dotdrop, un completo gestor de dotfiles. Si, lo cierto es que no son dotfiles, pero la estructura es muy similar.

Otra opción, creo que la mas clara es simplemente utilizar Borg. Así de un lado te encargas de gestionar todos los datos y por el otro de toda la configuración.

¿Como lo estoy haciendo?

Actualmente solo estoy haciendo copias de seguridad de las bases de datos. Para esto ejecuto directamente un dump de cada una de las bases de datos, y posteriormente lo comprimo a un tarball. Esto los tengo organizados por fechas, como ya he comentado en episodios del podcast anterior.

¿Que echo en falta de los servicios anteriores?

Sobre todo, lo que mas hecho en falta, es algo general. Una herramienta que me permita encargarse de todas las copias de seguridad deteniendo los servicios cuando sea necesario. Y por supuesto, otros medios de notificación. Entiendo, que el correo electrónico es lo que prima, pero, yo actualmente estoy utilizando clientes de mensajería, y lo prefiero.


Espero que te haya gustado este nuevo episodio del podcast. Si puedes, te agradecería una valoración en iVoox y/o en Apple Podcast.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *