如何配置 网站二级域名,烟台网站制作设计,怎么改一个网站的关键词密度,公司注册流程及条件Docker镜像的分层结构
Docker镜像是由一层一层的文件系统组成#xff0c;UnionFS将这些镜像层堆叠在一起镜像层是只读的#xff0c;构建完成后就不能更改了#xff0c;即使在新的镜像层修改或删除了某些文件#xff0c;也不会影响之前的镜像层内容用Dockerfile构建镜像时UnionFS将这些镜像层堆叠在一起镜像层是只读的构建完成后就不能更改了即使在新的镜像层修改或删除了某些文件也不会影响之前的镜像层内容用Dockerfile构建镜像时每个指令都会创建一个新的镜像层镜像层会被缓存和复用
构建缓存的基本规则
构建镜像时Docker 按照顺序逐步执行 Dockerfile 中的指令。对于每条指令Docker 检查它是否可以重用构建缓存中的指令。
如果引用的父镜像在构建缓存中下一个指令将会和所有从该基础镜像派生的子镜像做比较如果和其中一个子镜像的指令相同那么缓存命中否则缓存失效在大部分情况下通过比较Dockerfile中的指令和子镜像已经足够了但是有些指令需要进一步的检查对于ADD和COPY指令文件的内容会被检查并且会计算每一个文件的校验码。在缓存查找期间如果文件内容或元数据发生更改那么缓存就会失效除了ADD和COPY指令之外缓存检查不会查看容器中的文件来判断是否命中缓存。例如在处理RUN apt-get -y update指令时不会检查容器中的更新文件来确定是否命中缓存这种情况下只会检查指定字符串是否相同
一旦缓存失效所有后续的 Dockerfile 指令都会生成新的镜像层不再使用缓存。
如何充分利用缓存
将多个命令合并成单个RUN指令时同时也要考虑将变更频率不同的命令分开指令从变更不频繁到变更频繁的顺序来写 a. 一般源代码会经常变化所以要把安装依赖等不经常变动的步骤写在前面拷贝源代码等经常变动的步骤写在后面 b.如果是Python项目的话先拷贝requerements.txt然后进行pip install requerements.txt最后再进行COPY代码ARG指令的变量值变化会导致缓存失效所以最好在使用前定义不要过早使用
参考
https://docs.docker.com/develop/develop-images/guidelines/#leverage-build-cache