una sombreadores sombreador sombreado navegadores memoria los htaccess evitar desactivado control caché cache aplicación actualizar activado caching docker

caching - navegadores - memoria cache de sombreadores amd



¿Cómo sabe Docker cuándo usar el caché durante una compilación y cuándo no? (2)

El proceso de creación de la memoria caché se explica con bastante docs.docker.com/engine/userguide/eng-image/… en la docs.docker.com/engine/userguide/eng-image/…

  • Comenzando con una imagen base que ya está en el caché, la siguiente instrucción se compara con todas las imágenes secundarias derivadas de esa imagen base para ver si una de ellas se creó utilizando la misma instrucción. Si no, el caché se invalida.

  • En la mayoría de los casos, basta con comparar la instrucción en el Dockerfile con una de las imágenes secundarias. Sin embargo, ciertas instrucciones requieren un poco más de examen y explicación.

  • Para las instrucciones ADD y COPY , se examina el contenido de los archivos en la imagen y se calcula una suma de comprobación para cada archivo. Los tiempos de los archivos modificados por última vez y de los últimos accesos no se consideran en estas sumas de comprobación. Durante la búsqueda de caché, la suma de comprobación se compara con la suma de comprobación en las imágenes existentes. Si algo ha cambiado en los archivos, como el contenido y los metadatos, la memoria caché se invalida.

  • Aparte de los comandos ADD y COPY , la comprobación de la memoria caché no examinará los archivos en el contenedor para determinar la coincidencia de la memoria caché. Por ejemplo, al procesar un comando RUN apt-get -y update los archivos actualizados en el contenedor no se examinarán para determinar si existe un acierto de caché. En ese caso, solo la cadena de comandos se utilizará para encontrar una coincidencia.

Una vez que se invalida la memoria caché, todos los comandos de Dockerfile subsiguientes generarán nuevas imágenes y la memoria caché no se utilizará.

Se encontrará con situaciones en las que los paquetes del sistema operativo, los paquetes NPM o un repositorio de Git se actualizan a las versiones más recientes (por ejemplo, ~2.3 semver en package.json ), pero como su Dockerfile o package.json no se han actualizado, la Dockerfile acoplable continuará usando el caché .

Es posible generar programáticamente un Dockerfile que Dockerfile el caché modificando líneas en ciertas verificaciones más inteligentes (por ejemplo, recuperar el último shasum de rama de git de un repositorio para usar en la instrucción de clonación). También puede ejecutar la compilación periódicamente con --no-cache=true para imponer las actualizaciones.

Me sorprende lo bien que funciona el almacenamiento en caché de capas de Docker, pero también me pregunto cómo determina si puede usar una capa en caché o no.

Tomemos estos pasos de compilación, por ejemplo:

Step 4 : RUN npm install -g node-gyp ---> Using cache ---> 3fc59f47f6aa Step 5 : WORKDIR /src ---> Using cache ---> 5c6956ba5856 Step 6 : COPY package.json . ---> d82099966d6a Removing intermediate container eb7ecb8d3ec7 Step 7 : RUN npm install ---> Running in b960cf0fdd0a

Por ejemplo, ¿cómo sabe que puede usar la capa en caché para npm install -g node-gyp pero crea una capa nueva para la npm install ?


Se debe a que su archivo package.json ha sido modificado, vea Removing intermediate container .

Esa es también la razón por la que los archivos de información del administrador de paquetes (proveedores / terceros) son COPY ''ed primero durante la docker build . Después de eso, ejecuta la instalación del administrador de paquetes y luego agregas el resto de tu aplicación, es decir, src .

Si no ha realizado cambios en sus bibliotecas, estos pasos se sirven desde la memoria caché de compilación.