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:
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:
Salida en 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:
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:
Salida 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:
Salida 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:
El comando para realizar la recuperación del archivo backup.tar en Linux:
docker load < backup.tar
Salida en Linux:
El comando para realizar la recuperación del archivo backup.tar en Windows:
docker load -i .\backup.tar
Salida 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:
- Diferencia entre ENTRYPOINT y CMD en Docker
- Instalar Docker Compose en Ubuntu 20.04
- Instalar Docker en Ubuntu 20.04
- Convertir CSV a JSON usando la herramienta Miller (mlr)