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
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
- Lista de vídeos en Youtube: Curso de Docker