• docker 缓存


    docker 缓存

    官方地址: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
    官方的中文直译如下:

    在构建映像时,Docker将逐步Dockerfile执行您的指令, 并按指定的顺序执行每个指令。在检查每条指令时,Docker会在其缓存中查找可重用的现有映像,而不是创建新的(重复的)映像。
    
    如果根本不想使用缓存,则可以使用命令--no-cache=true 上的选项docker build。但是,如果您确实允许Docker使用其缓存,那么了解何时可以找到匹配的映像非常重要。Docker遵循的基本规则概述如下:
    
    从已在缓存中的父映像开始,将下一条指令与从该基本映像派生的所有子映像进行比较,以查看是否其中一个是使用完全相同的指令构建的。如果不是,则高速缓存无效。
    
    在大多数情况下,只需将中的指令Dockerfile与子图像之一进行比较就足够了。但是,某些说明需要更多的检查和解释。
    
    对于ADD和COPY指令,将检查图像中文件的内容,并为每个文件计算一个校验和。在这些校验和中不考虑文件的最后修改时间和最后访问时间。在高速缓存查找期间,将校验和与现有映像中的校验和进行比较。如果文件中的任何内容(例如内容和元数据)发生了更改,则缓存将无效。
    
    除了ADD和COPY命令之外,缓存检查不会查看容器中的文件来确定缓存是否匹配。例如,在处理RUN apt-get -y update命令时,不检查容器中更新的文件以确定是否存在缓存命中。在这种情况下,仅使用命令字符串本身来查找匹配项。
    
    一旦缓存无效,所有后续Dockerfile命令都会生成新映像,并且不使用缓存。
    

    大概可以归为以下两点:

    1. 除了add和copy指令, 其他指令只会做指令层面的比较,指令一样就视为缓存有效.例如 yum install nginx 缓存的镜像层的指令也是 yum install nginx 这两个指令一样说明缓存没问题.
    2. add和copy除了检查指令是否一样,还会检查文件的校验和,进行对比检验和,一样说明缓存没问题.
  • 相关阅读:
    数据倾斜原理及解决方案
    删除emp_no重复的记录,只保留最小的id对应的记录
    理解HBase面向列存储
    给数据库用户授权(对象多为系统表,如dba可以查看的表)
    SpringBoot里的一些注解
    01背包
    【转】简说GNU, GCC and MinGW (Lu Hongling)
    费马小定理
    欧拉定理
    【转】C中的静态存储区和动态存储区
  • 原文地址:https://www.cnblogs.com/wspblog/p/13037304.html
Copyright © 2020-2023  润新知