Saltar al contenido principal

Imágenes de contenedor (pull, search rmi, prune)

En este episodio, vamos a profundizar en el concepto de imagen, como se componen, descargarlas y subirlas a repositorios remotos y gestionarlas en local, eliminándolas y consultando su historial.

Vídeo del tutorial: Curso Docker

Imagen

Ya hemos visto en los conceptos básico, que una imagen contiene todos los elementos necesarios para ejecutar un contenedor, funcionando como una plantilla que se utiliza para crear contenedores.

Además de eso, tiene algunas propiedades más a tener en cuenta:

  • Inmutabilidad: Una vez creada, una imagen no se puede modificar. Si necesitamos hacer cambios, debemos crear una nueva imagen, ya sea a partir de la anterior o desde cero. Este concepto es muy importante, ya que nos permite tener control sobre las versiones de las imágenes y verificar que siempre se comporten de la misma forma en cualquier entorno, garantizando su integridad.

  • Están formadas por capas: Las imágenes se componen de una serie de capas, cada una de ellas con una funcionalidad concreta. Esto permite reutilizar capas de otras imágenes, lo que reduce el tamaño de las imágenes y el tiempo de construcción. Por ejemplo, si tenemos una imagen con una aplicación en Python y otra con una aplicación en Node.js, ambas podrían compartir las capas de la imagen base de Linux o de alguna librería común. Esto se verá más claro cuando veamos cómo se construyen las imágenes y cómo se definen los Dockerfiles.

Capas de una imagen

Todas las imágenes de Docker están formadas por una serie de capas. Cada capa representa un cambio en el sistema de archivos de la imagen. Por ejemplo, si instalamos una librería en una imagen, esa librería se añadirá como una nueva capa en la imagen.

Vamos a descargarnos dos imágenes de Docker Hub para ver cómo están formadas. Por ejemplo, vamos a descargar la imagen de nginx y la imagen de alpine. Para ello, ejecutamos los siguientes comandos:

docker pull nginx
docker pull alpine

Una vez descargadas, podemos ver las capas de las imágenes con el comando docker history. Por ejemplo, si queremos ver las capas de la imagen de nginx, podríamos hacerlo con el siguiente comando:

docker history nginx

Y si queremos ver las capas de la imagen de alpine, podríamos hacerlo con el siguiente comando:

docker history alpine

Si ejecutamos estos comandos, veremos que las imágenes están formadas por varias capas, cada una de ellas con una funcionalidad concreta. Por ejemplo, la imagen de nginx tiene una capa con la instalación de nginx, otra con la configuración de nginx, otra con la configuración del sistema operativo, etc.

Vamos ahora descargar una versión de nginx que esté basada en alpine, para ver cómo se compone. Por ejemplo, vamos a descargar la imagen de nginx:alpine:

docker pull alpine:3.19
docker pull nginx:stable-alpine3.19

Al hacer pull de la imagen de nginx basada en alpine, podremos ver que hay una capa que se comparte con la imagen de alpine, al estar basada en ella.

❯ docker pull nginx:stable-alpine3.19                                                                                      (base)
stable-alpine3.19: Pulling from library/nginx
bca4290a9639: Already exists <--- Capa compartida con alpine
32b20be2efbb: Pull complete
71b2358004a3: Pull complete
0f47c41872d5: Pull complete
3ea1fa5d304d: Pull complete
0d78e9913865: Pull complete
1b5a5854bd5a: Pull complete
2ffdb130edbd: Pull complete
Digest: sha256:ef587d1eb99e991291c582bfb74f27db27f7ca2c095d4ba06cc3f7c910a0c7b3
Status: Downloaded newer image for nginx:stable-alpine3.19
docker.io/library/nginx:stable-alpine3.19`

Todo este proceso de capas, hace muy eficiente el almacenamiento de imágenes y la creación de contenedores, ya que Docker solo necesita descargar las capas que no tenga en local y montarlas en el contenedor. En la sección de Dockerfile veremos cómo se construyen las imágenes, se definen las capas y como se aprovecha este sistema para optimizar otros procesos.

Borrar imágenes

Para borrar una imagen, necesitaremos el ID o el nombre de la imagen. Podemos ver las imágenes que tenemos en local con el comando docker images y borrar una imagen con el comando docker rmi.

Por ejemplo, empezamos listando todas la imágenes que tenemos en local:

docker images

Y si queremos borrar una imagen, por ejemplo, la imagen de nginx, podríamos hacerlo con el siguiente comando:

docker rmi nginx

También podríamos borrar la imagen por ID:

docker rmi 7faa5d3a2af2

Prune de imágenes

Si queremos borrar todas las imágenes que no estén en uso, podemos utilizar el comando docker image prune. Este comando eliminará todas las imágenes que no estén asociadas a ningún contenedor.

El comando es muy sencillo, simplemente ejecutamos:

docker image prune

Volver al índice