Docker构建缓存

这篇具有很好参考价值的文章主要介绍了Docker构建缓存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Docker镜像的分层结构

  1. Docker镜像是由一层一层的文件系统组成,UnionFS将这些镜像层堆叠在一起
  2. 镜像层是只读的,构建完成后就不能更改了,即使在新的镜像层修改或删除了某些文件,也不会影响之前的镜像层内容
  3. 用Dockerfile构建镜像时,每个指令都会创建一个新的镜像层,镜像层会被缓存和复用

构建缓存的基本规则

构建镜像时,Docker 按照顺序逐步执行 Dockerfile 中的指令。对于每条指令,Docker 检查它是否可以重用构建缓存中的指令。

  1. 如果引用的父镜像在构建缓存中,下一个指令将会和所有从该基础镜像派生的子镜像做比较,如果和其中一个子镜像的指令相同,那么缓存命中,否则缓存失效
  2. 在大部分情况下,通过比较Dockerfile中的指令和子镜像已经足够了,但是有些指令需要进一步的检查
  3. 对于ADD和COPY指令,文件的内容会被检查,并且会计算每一个文件的校验码。在缓存查找期间,如果文件内容或元数据发生更改,那么缓存就会失效
  4. 除了ADD和COPY指令之外,缓存检查不会查看容器中的文件来判断是否命中缓存。例如,在处理RUN apt-get -y update指令时,不会检查容器中的更新文件来确定是否命中缓存,这种情况下只会检查指定字符串是否相同

一旦缓存失效,所有后续的 Dockerfile 指令都会生成新的镜像层,不再使用缓存。

如何充分利用缓存

  1. 将多个命令合并成单个RUN指令时,同时也要考虑将变更频率不同的命令分开
  2. 指令从变更不频繁到变更频繁的顺序来写
    a. 一般源代码会经常变化,所以要把安装依赖等不经常变动的步骤写在前面,拷贝源代码等经常变动的步骤写在后面
    b.如果是Python项目的话,先拷贝requerements.txt,然后进行pip install requerements.txt,最后再进行COPY代码
  3. ARG指令的变量值变化会导致缓存失效,所以最好在使用前定义,不要过早使用

参考

https://docs.docker.com/develop/develop-images/guidelines/#leverage-build-cache文章来源地址https://www.toymoban.com/news/detail-769115.html

到了这里,关于Docker构建缓存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker清缓存、日志、无用镜像

    查看docker各类型文件占用情况 该命令列出了 docker 使用磁盘的 4 种类型: Images: 所有镜像占用的空间,包括拉取的镜像、本地构建的镜像 Containers: 运行中的容器所占用的空间(没运行就不占空间),其实就是每个容器读写层的空间 Local Volumes: 本地数据卷的空间 Build Cache: 镜像

    2024年02月06日
    浏览(36)
  • Docker 构建镜像(docker build)

    docker build 命令用于从Dockerfile构建镜像。 典型用法 选项 -t 给镜像加一个Tag ImageName 给镜像起的名称 TagName 给镜像的Tag名 Dir Dockerfile所在目录 执行结果 根据目录下的 Dockerfile 文件构建镜像 例子 chinaskill-redis 是镜像名 v1.1 是 tag 标签 . 表示当前目录,即Dockerfile所在目录 查看镜

    2024年02月11日
    浏览(44)
  • Docker Build Cache 缓存清理

    Docker 18.09 引入了 BuildKit ,提升了构建过程的性能、安全、存储管理等能力。 docker system df 命令,类似于 Linux上的 df 命令,用于查看 Docker 的磁盘使用情况: TYPE 列出了 Docker 使用磁盘的 4 种类型: 类型 说明 Images 所有镜像占用的空间,包括拉取下来的镜像,和本地构建的。

    2024年01月17日
    浏览(34)
  • docker入门(Linux环境下安装Docker,Docker构建镜像)

    1.1 官方解释 Docker is the world’s leading software containerization platform。 Docker公司开发,开源,托管在github跨平台, 支持Windows、Macos、Linux。 1.2 抽象解释 2.1 集装箱-类似一个容器 没有集装箱之前运输货物,东西零散容易丢失,有了集装箱之后货物不容易丢失,我们可以把货物想象成程

    2024年02月15日
    浏览(49)
  • [Docker精进篇] Docker镜像构建和实践 (三)

    前言: Docker镜像构建的作用是将应用程序及其依赖打包到一个可移植、自包含的镜像中,以便在不同环境中快速、可靠地部署和运行应用程序。 这篇文章是我的笔记,旨在带您快速入门上手docker,更加深入学习docker知识 做事三步走:是什么,为什么,怎么办 我们一步一步来

    2024年02月12日
    浏览(48)
  • Python项目打包, docker build构建docker镜像, Docker Compose (Docker编配)

    将本地Python项目打包构建docker镜像,并在docker中运行【流程1-8】 8、Docker Compose (Docker编配) 附录: 其他常用docker命令   2.2 下载python项目所需依赖包到指定文件夹py_pkgs:    在es-python文件夹下,新建一个Dockerfile文件: 5. 假设宿主机上已经装好docker, 此时切换到es-python路径下  

    2024年02月15日
    浏览(52)
  • Docker 深度清除镜像缓存 (overlay2)

    Docker 深度清除镜像缓存 (overlay2) 一般情况下,运维清理镜像是通过命令 docker rm i 删除镜像的。但是这条命令不会删除docker build命令产生的缓存文件。 这个时候需要使用 docker system 的系列命令来做相关处理。 输出: 参数: -a 删除全部未使用的镜像 -f 或 --force 不经过确认

    2024年02月08日
    浏览(39)
  • Docker安装及Docker构建简易版Hadoop生态

    一、首先在VM创建一个新的虚拟机将Docker安装好(Window系统可以安装 Docker Desktop Installer) 更新系统:首先打开终端,更新系统包列表。 下图是更新系统包截图 安装Docker:使用以下命令在Linux上安装Docker。 启动Docker服务:使用以下命令启动Docker服务,我们通过ps命令可以看到

    2024年02月11日
    浏览(33)
  • 【Docker】MySQL 源码构建 Docker 镜像(基于 ARM 64 架构)

    以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号!  公众号原文链接:MySQL 源码构建 Docker 镜像(基于 ARM 64 架构) 背景介绍 近期,笔者正推进公司 MySQL 适配 ARM 64 架构工作,由于一直使用 Docke

    2024年04月15日
    浏览(55)
  • Docker 构建 Jar 镜像

    需求:想追加一个命令 -l , 期望执行 ls -al docker run 会覆盖 CMD 后面的命令 此时命令在 docker 启动后自己执行, 我们可以在命令行启动 docker 镜像时, 执行其他命令行参数, 覆盖默认的 CMD docker run 不会覆盖 entrypoint 后面的命令,需要使用 --entrypoint 命令覆盖

    2024年02月07日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包