Saltar al contenido principal

Gestión de imágenes (tags, exportar, importar)

Ya hemos visto como construir imágenes con Dockerfile y Docker build. Ahora vamos a ver cómo gestionar las imágenes que hemos creado, descargado o commiteado, etiquetarlas, versionarlas, exportarlas e importarlas y subirlas nuestros propios repositorios en Docker Hub.

Dentro vídeo: https://youtu.be/5CNQMeYUBPs

Curso Docker

Commit - Crear una imagen a partir de un contenedor

Ya habíamos comentado la posibilidad de crear una imagen a partir de un dockerfile, pero también podríamos hacerlo desde un contenedor en ejecución. Esto sería similar a hacer una snapshot de una máquina virtual, es decir, guardar el estado actual de un contenedor en una imagen, incluyendo los cambios que se hayan hecho en el sistema de archivos, memoria, etc.

Suponiendo que tuviéramos un contenedor en ejecución, podríamos crear una imagen a partir de él con el comando docker commit:

docker commit <container_id> <nombre_imagen>

Por ejemplo, si tuviéramos un contenedor con id 1234567890ab y quisiéramos crear una imagen a partir de él llamada mi-imagen, podríamos hacerlo así:

docker commit 1234567890ab mi-imagen

Save y load - Exportar e importar imágenes

Estas imágenes que hemos creado, descargado o commiteado, podemos exportarlas a un fichero tar y luego importarlas en otro sistema. Para exportar una imagen a un fichero tar, podemos usar el comando docker save:

docker save -o <nombre_fichero>.tar <nombre_imagen>

Por ejemplo, si quisiéramos exportar la imagen mi-imagen a un fichero tar llamado mi-imagen.tar, podríamos hacerlo así:

docker save -o mi-imagen.tar mi-imagen

Para importar una imagen desde un fichero tar, podemos usar el comando docker load:

docker load -i <nombre_fichero>.tar

Por ejemplo, si quisiéramos importar la imagen mi-imagen desde un fichero tar llamado mi-imagen.tar, podríamos hacerlo así:

docker load -i mi-imagen.tar

Tags - Nombre y etiquetas de las imágenes

Al construir una imagen con docker build, pudimos especificar un nombre y una etiqueta para la imagen con el argumento -t. Este nombre y etiqueta, no solo se usa por darle un nombre familiar a la imagen, sino que también identifica el origen de la imagen y su versión. Este origen, es importante y lo veremos en la siguiente sección cuando hablemos de repositorios remotos y como interactuar con ellos.

Podemos alterar el nombre y las etiquetas de una imagen con el comando docker tag:

docker tag <nombre_imagen>:<etiqueta> <nuevo_nombre>:<nueva_etiqueta>

Tan simple como eso. Por ejemplo, si quisiéramos cambiar el nombre de la imagen mi-imagen a mi-imagen-v1, podríamos hacerlo así:

docker tag mi-imagen:latest mi-imagen-v1:latest

Repositorios, subir y descargar imágenes

Las imágenes se almacenan en repositorios. El repositorio más conocido es Docker Hub, donde podemos encontrar miles de imágenes de contenedor listas para usar.

Podemos interactuar con los repositorios de varias formas:

  • Buscar imágenes: Podemos buscar imágenes en Docker Hub utilizando la página web o la CLI de Docker.
  • Descargar imágenes: Podemos descargar imágenes de Docker Hub con el comando docker pull.
  • Subir imágenes: Podemos subir nuestras propias imágenes a Docker Hub con el comando docker push.

Veamos un ejemplo de cómo buscar una imagen en docker hub:

docker search nginx

Una vez tengamos la imagen que queremos, podemos descargarla con el comando docker pull:

docker pull nginx

Subir imágenes a Docker Hub

Imaginemos que hemos creado una imagen llamada mi-imagen y queremos subirla a Docker Hub. Para ello, primero debemos etiquetar la imagen con nuestro nombre de usuario en Docker Hub y el nombre del repositorio. Por ejemplo:

docker tag mi-imagen:latest pabpereza/mi-imagen:latest

Luego, podemos subir la imagen a Docker Hub con el comando docker push:

docker push pabpereza/mi-imagen:latest

Subir imágenes a repositorios remotos (no Docker Hub)

Pero, que pasaría si la imagen que queremos subir no está en Docker Hub, sino que está en nuestro propio sistema. En el nombre de una imagen también podríamos especificar la dirección de un repositorio remoto, por ejemplo, si el repositorio estaría en github, podríamos hacer algo así:

docker tag mi-imagen:latest github.com/pabpereza/mi-imagen:latest

Y luego subir la imagen a ese repositorio remoto con el comando docker push:

docker push github.com/pabpereza/mi-imagen:latest

Volver al índice