docker build --no-cache 是否构建不同的层?

2024-05-16

几个月前,我决定使用以下命令设置我的项目构建 docker 镜像的 CIno-cacheflag:我认为最好不要冒险让 docker 使用旧的缓存层。

我现在才意识到,我的图像各层的 sha 总是不同的(即使新构建的图像应该生成与之前构建的相同的层),并且每当我拉动新构建的图像时,所有层总是从零下载。

我现在认为问题是--no-cache标志,我知道这听起来很明显,但说实话,我认为--no-cache只是执行速度较慢,而且还认为它是以功能方式实现的(相同命令+相同内容=相同层)。

有人可以确认--no-cache标志是问题吗?


容器的问题是,实际上,你永远不会用相同的 sha 构建相同的层。如果您使用之前构建的同一层,则只能拥有相同的 sha。

这样想:每次构建一个层时,至少会有一个日志文件、一个时间戳、一些不同的东西——然后我们还没有提到引入外部依赖项。

--no-cache 标志将简单地阻止 Docker 引擎使用缓存层,并且它将再次下载和构建所有内容。因此,该标志确实是散列不同的(间接)原因,但这是预期的行为。从缓存构建意味着您的构建速度会更快,但会重用以前构建的层,因此具有相同的 sha(这可能会导致重用以前的过时结果等,这就是我们拥有该标志的原因)。

请查看这篇文章以获取更多信息:https://thenewstack.io/understanding-the-docker-cache-for-faster-builds/ https://thenewstack.io/understanding-the-docker-cache-for-faster-builds/

如果您希望保证某些层具有相同的 sha 但仍不想使用缓存,您可能需要研究多阶段 Docker 构建:https://docs.docker.com/develop/develop-images/multistage-build/ https://docs.docker.com/develop/develop-images/multistage-build/

这样,您就可以拥有一个固定的基础镜像,并在此基础上构建其他所有内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker build --no-cache 是否构建不同的层? 的相关文章

随机推荐

  • React 中的变异状态有哪些缺点?

    我有一个带有顶级组件和许多嵌套子组件的 React 应用程序 顶级组件是唯一具有状态的组件 该状态采用单个变量的形式 this state g new BlackJackGame g 包含一个复杂的数据结构 class BlackJackG
  • 使用 jQuery 查找带有文本的元素

    我想创建一个包含文本字符串的 div 中所有 html 元素的数组 例如 p some string p 我不想获取字符串 我希望数组项成为元素 在示例中 将是 p 节点 我事先不知道字符串是什么 所以我无法查找匹配的字符串值 我也不希望空
  • Android Accessibility 执行触摸操作

    我想知道是否可以使用 Android 辅助功能服务在屏幕上的位置执行触摸操作 例如 Bundle arguments new Bundle arguments putInt coord X X value arguments putInt
  • 有没有办法让 git flow 显示它在幕后执行的命令?

    有什么方法可以让 git flow 提前告诉我当我执行 flow 命令时它将执行的确切 git 命令吗 或者告诉我它是东吗 我只能看到输出和摘要吗 你可以使用Git的GIT TRACE 环境变量 http git scm com docs
  • requestValidationMode 2.0 和 4.0 有什么区别

    这是 MSDN 的定义 4 0 默认值 HttpRequest 对象在内部设置一个标志 指示每当访问任何 HTTP 请求数据时都应触发请求验证 这保证了在请求期间访问 cookie 和 URL 等数据之前触发请求验证 配置文件中的页面元素
  • 将 mydomain.com 重定向到不带 www 的 openshift 应用程序

    我正在尝试在 Openshift 上部署我的应用程序 我已经添加www mydomain com and mydomain com作为 Openshift 上的别名 并将 cname 记录 www 更改为myapp mydomain rhc
  • Flutter - 构建失败并出现异常

    当我启动我的应用程序时 我收到此错误消息 自上次运行以来我没有进行任何更改 当时一切都很好 有人知道如何解决这个问题吗 谢谢 FAILURE Build failed with an exception 什么地方出了错 无法确定任务 app
  • 在构造函数中调用可重写的方法,例如 Swing 的 add()

    我知道从构造函数调用可重写的方法是一个坏主意 但我也看到到处都是用 Swing 完成的 其中代码如下add new JLabel Something 一直出现在构造函数中 以 NetBeans IDE 为例 它对构造函数中的可重写调用非常挑
  • 导出BQ表时是否可以指定CSV引号字符?

    我使用以下命令导出表bq extract destination format CSV compression GZIP noprint header table table
  • 如何更改对话框的默认黑色暗淡背景“颜色”(而不是暗淡量)?

    这是随机显示的图像Dialog在网上找到的 我一直在实施一个自定义Dialog 我可以处理对话框上的几乎所有内容 除了对话框本身下方的默认黑色昏暗背景之外 但在其后面的整个屏幕上 基本上我想改变它color和阿尔法值 我一直在 StackO
  • gets() 如何超过 malloc() 分配的内存?

    我对 malloc 和 realloc 函数有疑问 当我使用 malloc 函数时 为字符指针分配10个字节的内存 但是当我分配值时 对于该字符指针 如果我尝试分配 则需要超过 10 个字节 怎么可能 例如 main char ptr pt
  • 为什么在 C# 中使用 String.Concat()?

    我想知道这个问题有一段时间了 为什么使用String Concat 而不是使用 操作员 我明白了String Format因为它是一个空洞使用 运算符并使您的代码看起来更好 例如 string one bob string two jim
  • Webpack 4 with Less 和 MiniCssExtractPlugin 使用条目

    我的应用程序中的样式结构如下 应用 css bootstrap boostrap less gt has import another less another less common common less entries bootstr
  • Mongodb $push 嵌套数组

    我想向我的嵌套数组添加新数据 我的文档是 username erkin email email protected cdn cgi l email protection password b playlists id 58 name asd
  • 查找列表中项目的索引

    给定一个列表 foo bar baz 和列表中的一个项目 bar 如何获取它的索引1 gt gt gt foo bar baz index bar 1 See 文档 https docs python org tutorial datast
  • WPF 中处理系统关闭

    如何在 WPF 中重写 WndProc 当我的窗口关闭时 我尝试检查我正在使用的文件是否被修改 如果是 我必须提示用户 你想保存更改吗 消息 然后关闭正在使用的文件和窗口 但是 当我的窗口仍然打开时 我无法处理用户重新启动 关闭 注销的情况
  • 如何使用 Swift 将“完成”按钮添加到 iOS 中的数字键盘?

    它在默认键盘上工作得很好 但我无法让它在数字键盘上工作 有任何想法吗 据我所知 你不能在键盘部分添加 完成 按钮 你应该添加一个inputAccessoryView to the UITextField or UITextView 如果这就
  • 样式化组件:如何针对直系儿童?

    我在文档中看到 选择器用于嵌套定位 但以下不起作用 这里使用的正确语法是什么 const InlineContainer styled div display flex gt margin right 40px 作为 CSS 值 字符串 4
  • 使用 UTF-8 编码的 Powershell 字符串变量

    我检查了许多与此相关的问题 但找不到解决我的问题的东西 基本上 我想将 UTF 8 编码的字符串存储在变量中 然后使用该字符串作为文件名 例如 我正在尝试下载 YouTube 视频 如果我们打印视频标题 则会显示非英文字符 ytd这是you
  • docker build --no-cache 是否构建不同的层?

    几个月前 我决定使用以下命令设置我的项目构建 docker 镜像的 CIno cacheflag 我认为最好不要冒险让 docker 使用旧的缓存层 我现在才意识到 我的图像各层的 sha 总是不同的 即使新构建的图像应该生成与之前构建的相