Capas e imágenes en Docker

   En entradas anteriores se ha hablado de la herramienta para crear, administrar y ejecutar contenedores conocida como Docker.
  Uno de los conceptos importantes del uso de este programa es el de imagen, que describe los contenidos que tendrá un contenedor de Docker, así como su configuración y el proceso que se ejecutará en el mismo.
 No obstante, este programa usa un sistema de "capas" para montar una imagen, por lo que cada instrucción del archivo de Docker añade una capa adicional sobre la imagen base, siendo la imagen final una "superposición" de todas esas capas. De este modo, este programa intenta reaprovechar las capas siempre que puede; así, cuando Docker crea contenedores a partir de una imagen concreta monta las nuevas capas una encima de otra, por lo que no es necesario que la misma capa esté dos veces físicamente en disco.
  Desde la versión 1.10 de Docker, las imágenes y las capas ya no son sinónimos, puesto que las capas se identifican mediante un identificador que es realmente una función criptográfica hash del contenido de la capa calculado mediante el algoritmo SHA-256. Usar dicha función como identificador garantiza que una capa siempre tendrá el mismo identificador mientras su contenido no cambie. Si se cambia su contenido, la función resumen ("hash", en inglés) también variará.
  Sin embargo, una imagen es básicamente un objeto de configuración que, entre otros datos, contiene todos los identificadores de todas las capas que la conforman, siendo su identificador  la función resumen (de nuevo SHA-256) de dicho objeto.

BUILDKIT

  Se  trata de un componente de Docker existente desde su versión 23.0. Es una herramienta para construir imágenes, y ha heredado el mismo comando docker build que el programa tenía desde sus inicios.
  Posee varias ventajas respecto al antiguo sistema (básicamente cuestiones de rendimiento), siendo su limitación principal que sólo puede construir contenedores de Linux.

IMÁGENES <NONE>:<NONE>

  Son imágenes que, cuando se usa el comando docker images, aparecen con las columnas "REPOSITORY" y "TAG" con el valor "<none>".
 
Imágenes colgantes
   Se trata de imágenes que ya no están referenciadas por ninguna otra imagen, por lo que se deben eliminar, ya que ocupan espacio en disco.
  Las mencionadas imágenes colgantes ("dangling images", en inglés) aparecen normalmente al construir nuevas versiones de una imagen propia. Ya que si se reconstruye la imagen mediante un archivo de Docker sin haber cambiado ni el nombre ni la etiqueta de la imagen previa, ni haberla borrado, ya que BuildKit no la elimina, ésta seguirá existiendo, mas sin nombre ni etiqueta: es una imagen colgante.
  En versiones anteriores a la aparición de BuildKit no existían las imágenes colgantes, ya que el comando antiguo borraba la imagen previa al construir la nueva (siempre que tuviera el mismo nombre y etiqueta que la nueva, claro).
  Pueden listarse las imágenes de este tipo mediante el comando docker images -f dangling=true.

  Así pues, las imágenes de este tipo se deben eliminar manualmente mediante el comando docker rmi $(docker images -f "dangling=true" -q).

Imágenes intermedias
  Se trata de imágenes que contienen capas intermedias que son usadas por otras imágenes.
  Sólo pueden verse mediante el comando docker images -a.
 

   El número de este tipo de imágenes varía según la versión de Docker que se utilice; pero, en todo caso, no se deben eliminar.
 

 CAPAS

   Las distintas capas de una imagen por capas ("layered image", en inglés) se pueden crear empleando al instrucción ENV en el archivo de Docker empleado en su construcción.
  Si se ven las capas mediante el comando apropiado, puede advertirse que la columna "IMAGE" muestra cada una de las capas de la imagen, así como su tamaño asociado. No obstante, el identificador que aparece siempre será el de la imagen, no el de la capa, aunque esté asociado a la última capa de la misma, mientras que el resto aparece con el valor "<missing>".

   Sin embargo, es posible ver los identificadores de las capas si se exporta la imagen mediante el comando docker save <nombre de la imagen> > <nombre del archivo>.tar  (o docker save <nombre de la imagen> -o <nombre del archivo>.tar). Si se abre el fichero resultante, podrá verse cierto número de carpetas que contienen las capas reales de la imagen, conteniendo la correspondiente a la última capa, las variables de entorno y los metadatos, entre otras cosas.

    Una capa calcula su identificador desde una función resumen (resultado de aplicar una función matemática que toma una entrada y la transforma en una cadena de caracteres, generalmente una representación alfanumérica de longitud fija de los datos de entrada) del contenido de la misma. De este modo, su identificador siempre será el mismo salvo si se modifica su sistema de ficheros; por lo que toda capa que tenga un valor superior a "0" en la columna "SIZE" de la salida del comando para ver capas tendrá su propio identificador, ya que ha modificado su sistema de ficheros.
 
  Aguardo que la presente entrada haya sido interesante para el lector. Si así ha sido, espero que éste la comente y/o la comparta, por favor.

No hay comentarios:

Publicar un comentario

Deje aquí su comentario, si no puede comentar, pruebe a hacerlo desde otro navegador de red u otro equipo.