Guardar, importar y publicar imágenes Docker
1. Introducción #
Hasta ahora hemos trabajado con imágenes y contenedores directamente dentro de Docker.
Pero puede ser necesario:
- Guardar una imagen en un archivo.
- Llevar una imagen a otro equipo.
- Restaurar una imagen desde un archivo.
- Exportar el estado de un contenedor.
- Importar ese contenedor como nueva imagen.
- Publicar una imagen en Docker Hub.
En este bloque veremos:
1docker save 2docker load 3docker export 4docker import 5docker login 6docker tag 7docker push
2. Dos ideas diferentes #
Antes de empezar es importante distinguir entre:
1IMAGEN
y:
1CONTENEDOR
Esto afecta directamente a los comandos.
Para trabajar con imágenes utilizaremos principalmente:
1docker save 2docker load
Para trabajar con contenedores utilizaremos principalmente:
1docker export 2docker import
3. Guardar una imagen: docker save #
El comando:
1docker save
permite guardar una o varias imágenes Docker en un archivo.
Normalmente utilizaremos un archivo:
1.tar
La sintaxis básica es:
1docker save -o <archivo.tar> <imagen>
Por ejemplo:
1docker save -o debian.tar debian
Esto crea un archivo:
1debian.tar
que contiene la imagen Docker.
4. Otra sintaxis de docker save #
También podemos utilizar redirección:
1docker save debian > debian.tar
El resultado es similar.
Por tanto tenemos dos formas:
1docker save -o debian.tar debian
o:
1docker save debian > debian.tar
5. ¿Para qué sirve docker save? #
Imaginemos que tenemos una imagen:
1mi-aplicacion:v1
y queremos llevarla a otro ordenador.
Podemos guardarla:
1docker save -o mi-aplicacion.tar mi-aplicacion:v1
Después copiamos:
1mi-aplicacion.tar
al otro equipo.
En el equipo de destino podremos recuperarla con:
1docker load
6. Ejemplo con Debian #
Primero comprobamos que tenemos Debian:
1docker images
Si no está instalada:
1docker pull debian
Después guardamos:
1docker save -o debian.tar debian
En nuestro directorio aparecerá:
1debian.tar
7. Guardar una imagen con tag #
También podemos guardar una imagen concreta con su tag.
Por ejemplo:
1docker save -o ubuntu24.tar ubuntu:24.04
Esto permite transportar una versión concreta.
8. Restaurar una imagen: docker load #
Para cargar una imagen guardada utilizamos:
1docker load
La sintaxis es:
1docker load --input <archivo.tar>
Por ejemplo:
1docker load --input debian.tar
También podemos utilizar:
1docker load -i debian.tar
9. Ejemplo completo save/load #
Paso 1 #
Descargamos:
1docker pull debian
Paso 2 #
Guardamos:
1docker save -o debian.tar debian
Paso 3 #
Comprobamos:
1docker images
Paso 4 #
Eliminamos la imagen local:
1docker rmi debian
Paso 5 #
Comprobamos:
1docker images
Paso 6 #
Restauramos:
1docker load -i debian.tar
Paso 7 #
Comprobamos otra vez:
1docker images
La imagen debería aparecer de nuevo.
10. ¿Qué conserva docker save? #
docker save está pensado para trabajar con imágenes.
Conserva la información necesaria para restaurar la imagen Docker.
Por ello:
1docker save 2 ↓ 3 IMAGEN
y:
1docker load 2 ↓ 3restaura la IMAGEN
11. Exportar un contenedor: docker export #
El comando:
1docker export
permite guardar el sistema de archivos de un contenedor en un archivo.
La sintaxis básica es:
1docker export <contenedor> > fichero.tar
Por ejemplo:
1docker export mi-debian > debian-contenedor.tar
12. Otra forma con --output #
También podemos utilizar:
1docker export --output fichero.tar <contenedor>
Por ejemplo:
1docker export --output debian-contenedor.tar mi-debian
13. Ejemplo práctico con un contenedor #
Creamos un contenedor:
1docker run -it --name debian-clase debian bash
Dentro creamos:
1mkdir datos
y:
1touch datos/prueba.txt
Salimos:
1exit
Ahora exportamos:
1docker export debian-clase > debian-clase.tar
14. ¿Qué estamos exportando? #
En este caso no estamos guardando directamente la imagen original.
Estamos exportando el contenido del contenedor:
1IMAGEN DEBIAN 2 ↓ 3CONTENEDOR debian-clase 4 ↓ 5modificaciones 6 ↓ 7docker export 8 ↓ 9archivo .tar
15. Importar un contenedor como imagen: docker import #
El archivo creado con:
1docker export
puede importarse posteriormente como una nueva imagen mediante:
1docker import
La sintaxis es:
1docker import fichero.tar imagen:tag
Por ejemplo:
1docker import debian-clase.tar debian-personalizado:v1
16. Comprobar la nueva imagen #
Después ejecutamos:
1docker images
Deberíamos encontrar:
1debian-personalizado v1
Ahora podemos crear un contenedor a partir de ella.
Por ejemplo:
1docker run -it debian-personalizado:v1 bash
17. Ejemplo completo export/import #
Paso 1 #
Creamos:
1docker run -it --name debian-practica debian bash
Paso 2 #
Dentro:
1mkdir cebem
1touch cebem/alumnos.txt
Paso 3 #
Salimos:
1exit
Paso 4 #
Exportamos:
1docker export debian-practica > debian-practica.tar
Paso 5 #
Importamos:
1docker import debian-practica.tar debian-cebem:v1
Paso 6 #
Comprobamos:
1docker images
Paso 7 #
Creamos un nuevo contenedor:
1docker run -it debian-cebem:v1 bash
Paso 8 #
Comprobamos:
1ls
y:
1ls cebem
Deberíamos encontrar:
1alumnos.txt
18. Diferencia entre save/load y export/import #
Esta es una de las partes más importantes del bloque.
docker save #
Trabaja con:
1IMÁGENES
Ejemplo:
1docker save -o ubuntu.tar ubuntu
docker load #
Recupera:
1IMÁGENES
Ejemplo:
1docker load -i ubuntu.tar
docker export #
Trabaja con:
1CONTENEDORES
Ejemplo:
1docker export mi-contenedor > contenedor.tar
docker import #
Convierte ese contenido en una:
1NUEVA IMAGEN
Ejemplo:
1docker import contenedor.tar nueva-imagen:v1
19. Esquema visual #
1IMAGEN 2 │ 3 ├── docker save 4 ↓ 5archivo.tar 6 │ 7 └── docker load 8 ↓ 9 IMAGEN
Mientras que:
1CONTENEDOR 2 │ 3 ├── docker export 4 ↓ 5archivo.tar 6 │ 7 └── docker import 8 ↓ 9 NUEVA IMAGEN
20. Publicar imágenes en Docker Hub #
Docker Hub permite almacenar imágenes Docker en Internet.
Esto nos permite:
- Compartir imágenes.
- Descargar imágenes desde otros equipos.
- Mantener diferentes versiones.
- Tener repositorios públicos o privados.
El proceso general será:
1Crear cuenta 2 ↓ 3docker login 4 ↓ 5docker tag 6 ↓ 7docker push
21. Iniciar sesión: docker login #
Antes de publicar una imagen debemos autenticarnos.
Utilizamos:
1docker login
Docker solicitará las credenciales necesarias.
Una vez autenticados podremos publicar imágenes.
22. Preparar una imagen #
Supongamos que tenemos:
1debian-cebem:v1
Podemos comprobarlo:
1docker images
Para publicarla en Docker Hub necesitamos etiquetarla con el formato adecuado.
23. Formato de una imagen para Docker Hub #
Habitualmente utilizaremos:
1usuario/imagen:tag
Por ejemplo:
1angel/debian:v1
Donde:
1angel
es el usuario.
1debian
es el nombre de la imagen.
1v1
es el tag.
24. Crear el tag para Docker Hub #
Utilizamos:
1docker tag <imagen> <usuario>/<repositorio>:<tag>
Por ejemplo:
1docker tag debian-cebem:v1 angel/debian:v1
Después:
1docker images
podremos ver ambas referencias.
25. Recordatorio sobre docker tag #
Crear un tag nuevo no significa copiar toda la imagen.
Por ejemplo:
1debian-cebem:v1 2angel/debian:v1
pueden apuntar al mismo:
1IMAGE ID
26. Publicar la imagen: docker push #
Una vez etiquetada podemos subirla:
1docker push <usuario>/<repositorio>:<tag>
Por ejemplo:
1docker push angel/debian:v1
Docker comenzará a subir las diferentes capas de la imagen.
27. Proceso completo para publicar #
Supongamos que hemos creado:
1debian-cebem:v1
Primero iniciamos sesión:
1docker login
Creamos la etiqueta:
1docker tag debian-cebem:v1 angel/debian:v1
Publicamos:
1docker push angel/debian:v1
Después la imagen quedará disponible en nuestro repositorio de Docker Hub.
28. Descargar nuestra imagen desde otro equipo #
Una vez publicada podríamos descargarla desde otro equipo utilizando:
1docker pull angel/debian:v1
Es decir:
1EQUIPO 1 2 │ 3 │ docker push 4 ↓ 5DOCKER HUB 6 │ 7 │ docker pull 8 ↓ 9EQUIPO 2