Ya en el post sobre contenedores hablé un poco de que era una imágen, aquí voy a entrar un poco mas en detalle sobre como funcionan y como gestionarlas, estos son los apuntes que he tomado sobe imágenes.
Dockerhub
Dockerhub es el repositorio donde se almacenan las imágenes que utilizamos y donde podremos subir nuestras propias imágenes, existen mas repositorios, pero este es el que docker utiliza por defecto. Aquí podremos encontrar infinidad de imágenes, tanto las oficiales como otras no oficiales o derivadas.
Dentro de la información de las imágenes podremos encontrar las versiones disponibles, el propio fichero de creación y mas información útil como variables de entorno o comandos que podremos ejecutar.
Capas
Las imágenes de docker están creadas a partir de capas que van definidas en el fichero Dockerfile. Una de las ventajas de este sistema es que esas capas son cacheadas y se pueden compartir entre distintas imágenes, esto es que si por ejemplo la creación de nuestra imagen consta de 10 capas, y modificamos una de esas capas, a la hora de volver a construir la imagen solo se debe ejecutar esta nueva capa, el resto permanecen igual.
Estas capas a parte de ahorrarnos peticiones de red al bajarnos una nueva versión de una imagen también ahorra espacio en disco, ya que las capas que no se hayan cambiado entre versiones no se descargarán.
Podemos ver todas estas capas con el comando
docker image history nombre_imagen:version
Para ver información detallada de la imágen podemos usar el comando
docker image inspect nombre_image:version
Etiquetas
Los tags sirven para identificar las versiones de las imágenes, a la hora de listar las imágenes se listan con su tag asociado. En el ejemplo anterior de mariadb el tag que tenía descargado es latest.
Un buen ejemplo que sirve para comprender los tags y de paso ver como funcionan las capas es el siguiente:
Si vamos a la página de docker hub de mariadb podemos ver los tags en la descripción, como esto depende de cuando lo veamos, ahora mismo que lo estoy escribiendo se ve así:
Eso son los tags, que nos dicen que por ejemplo 10.3.0 y 10.3 son iguales y 10.2.14, 10.2, 10 y latest son la misma, esto quiere decir que comparten la misma imagen.
Pues bien, voy hacer un pull de la 10.3 y de la 10.2
Pull
Con pull bajamos a nuestro equipo una imagen especifica, anteriormente las hemos bajado a la hora de crear un contenedor, en este caso la bajaremos con
docker image pull mariadb:10.3
De la misma forma bajo la 10.2 y latest
Fijaos como al hacer pull de la 10.2 no descarga todo, ya que hay partes que teníamos descargada.
Listado de imágenes
Para ver las imágenes instaladas usamos
docker image ls
yo en mi caso he filtrado solo las de mariadb con
docker image ls mariadb
Aquí podemos ver todas las imágenes descargadas, con su tag al lado y aquí ya podemos apreciar algo sobre los tags, si nos fijamos en 10.2 y latest las dos ocupan lo mismo y hacen referencia a la misma id, ya que las dos son la misma imagen, pero con una etiqueta diferente.
Push
No voy a mostrar ejemplo porque no tengo cuenta de dockerhub y aún no lo he probado, pero con push podremos subir cambios de la imagen a nuestro repositorio. Podríamos bajarnos el Dockerfile de mariadb, modificarlo y crear el nuestro propio, etiquetarlo y subirlo a dockerhub, a nuestra cuenta.