En la búsqueda de imágenes de Docker cada vez más pequeñas, es común eliminar el caché de apt (para imágenes basadas en Debian/Ubuntu) después de instalar paquetes. Algo como
RUN rm -rf /var/lib/apt/lists/* He visto algunos Dockerfile s donde esto se hace después de la instalación de cada paquete ( ejemplo ), es decir, con el patrón
# Install some package RUN apt-get update \ && apt-get install -y <some-package> \ && rm -rf /var/lib/apt/lists/* # Do something ... # Install another package RUN apt-get update \ && apt-get install -y <another-package> \ && rm -rf /var/lib/apt/lists/* # Do something else ... ¿Hay algún beneficio de hacer esto, en lugar de solo limpiar el caché de apt al final (y, por lo tanto, solo actualizarlo una vez al principio)? A mí me parece que tener que eliminar y update la memoria caché varias veces solo ralentiza la creación de la imagen.
La razón principal por la que la gente hace esto es para minimizar la cantidad de datos almacenados en esa capa acoplable en particular. Al extraer una imagen acoplable, debe extraer todo el contenido de la capa.
Por ejemplo, imagina las siguientes dos capas en la imagen:
RUN apt-get update RUN rm -rf /var/lib/apt/lists/*El primer comando EJECUTAR da como resultado una capa que contiene las listas, que SIEMPRE será extraída por cualquier persona que use su imagen, aunque el siguiente comando elimina esos archivos (por lo que no son accesibles). En última instancia, esos archivos adicionales son solo una pérdida de espacio y tiempo.
Por otro lado,
RUN apt-get update && rm -rf /var/lib/apt/lists/*Al hacerlo dentro de una sola capa, esas listas se eliminan antes de que finalice la capa, por lo que nunca se empujan o extraen como parte de la imagen.
Entonces, ¿por qué tener múltiples capas que usan apt-get install ? Es probable que esto sea para que las personas puedan hacer un mejor uso de las capas en otras imágenes, ya que Docker compartirá capas entre imágenes si son idénticas para ahorrar espacio en el servidor y acelerar las compilaciones y extracciones.