Como guardar y recuperar una imagen en docker

1. Introducción

Durante el desarrollo de un proyecto reciente, me vi con la necesidad de generar una imagen en docker que al final fué un auténtico dolor de cabeza ya que los desarrolladores del proyecto original ya no se encargaban del proyecto y los scripts para la generación de la imagen no funcionaban correctamente.

Al final conseguí generar la imagen, pero me di cuenta que en algunos casos, cuando existen tantos problemas al generar una imagen y siendo para una versión muy concreta de un software, una opción genial sería poder guardarla y recuperarla sin tener que volver a generarla. En resumen, realizar una copia de seguridad.

Y como siempre, mirando de forma detallada la documentación de Docker encontré la forma de poder hacerlo.

El comando docker save se usa para exportar una o varias imágenes docker a un archivo. Este comando permite guardar las imágenes en un archivo .tar para poder usarlas a modo de backup o importarlas en otro entorno docker.

Para los ejemplos de este post voy a usar la imagen docker de Plausible que es una excelente alternativa open source a Google analytics.

Veamos como se hace todo esto.

2. Guardar una imagen usando una redirección del stdout a un .tar (Linux)

Este caso de uso es útil cuando queremos guardar un tag específico de la imagen en un archivo .tar, usando la redirección del stdout. Esta opción funciona sólo en entornos Unix.

Al redirigir la salida a un archivo, tenemos un backup de la imagen listo para su posterior recuperación o para su transferencia a otro entorno docker ya sea local o remoto.

El comando completo es:

docker save plausible/analytics:latest > backup.tar

Salida en Linux:

Guardar una imagen haciendo una redirección del stdout a un .tar

Explicación:

  • docker save es el comando de docker para guardar una imagen.
  • plausible/analytics es la combinación de la imagen y el tag que queremos guardar como backup.
  • > es el símbolo que se usa para la redirección y que le dice al comando que queremos almacenar su salida en un archivo concreto.
  • backup.tar es el path destino donde se guardará la imagen.

3. Guardar una imagen de forma directa a un archivo .tar (Linux y Windows)

Este caso de uso produce el mismo output que el caso anterior pero la principal ventaja es que se puede ejecutar tanto en Windows como Linux.

El comando completo es:

docker save --output backup.tar plausible/analytics:latest

Salida en Linux:

Guardar una imagen a un fichero .tar desde Linux

Salida en Windows:

Guardar una imagen a un fichero .tar desde Windows

4. Guardar todos los tags de una imagen (Linux y Windows)

Si necesitamos guardar todos los tags asociados a una imagen podemos hacerlo ejecutando el comando sin especificar el tag y docker nos guardará todos los tags de esa imagen que tengamos descargados.

Para el ejemplo me he descargado varios tags de plausible:

Listar todos los tags de una imagen

El comando completo para guardar todos los tags de la imagen en un .tar es:

$ docker save --output backup.tar plausible/analytics

Salida en Linux:

Guardar todos los tags de una imagen en un fichero .tar en Linux

Salida en Windows:

Guardar todos los tags de una imagen en un fichero .tar en Windows

Como podemos ver en el tamaño del fichero backup.tar, todos los tags de la imagen han sido almacenados.

5. Guardar tags específicos de una imagen (Linux y Windows)

Puede ser que nos interese guardar tags específicos de una imagen. Docker permite almacenar no solo todos los tags de una imagen sino aquellos tags específicos que le indiquemos.

Vamos a guardar las versiones 1.3.0 y 1.5.0. El comando para hacerlo es:

Code:

docker save --output backup.tar plausible/analytics:v1.3.0 plausible/analytics:v1.5.0

Explicación:

  • plausible/analytics:v1.3.0 plausible/analytics:v1.5.0 ... es la combinación de los tags específicos que queremos guardar..
  • backup.tar es el path destino del archivo .tar del backup.

Salida en Linux:

Guardar tags específicos de una imagen en un fichero .tar en Linux

Salida en Windows:

Guardar tags específicos tags de una imagen en un fichero .tar en Windows

6. Recuperar el backup en un entorno Docker (Linux y Windows)

Si deseamos recuperar el backup realizado en cualquiera de las modalidades que hemos visto, podemos hacerlo de forma muy similar a como hemos visto anteriormente, es decir, con la ejecución de un comando y tendremos disponible la imagen o los tags de versiones específicas que hayamos guardado.

Para mostrar como se realiza la operación primero vamos a borrar todas las imágenes (ya tenemos un archivo .tar como copia de seguridad) de Plausible que tenemos instaladas en docker de la siguiente manera:

docker rmi $(docker images -q plausible/analytics)

Salida en Linux:

Borrar todos los tags de una imagen en docker

El comando para realizar la recuperación del archivo backup.tar en Linux:

docker load < backup.tar

Salida en Linux:

Cargar un archivo .tar de imágenes en Linux

El comando para realizar la recuperación del archivo backup.tar en Windows:

docker load -i .\backup.tar

Salida en Windows:

Cargar un archivo .tar de imágenes en Windows

7. Conclusión

Si queremos realizar copias de seguridad de nuestras imágenes en docker, ya se de una imagen completa, todos los tags, o tags específicos el comando docker save es una herramienta muy potente para realizar este trabajo.

Enlaces y vídeos de interés

Artículos de interés

Vídeos



Posts que te pueden interesar:


LinkedIn

comments powered by Disqus