docker - 如何在本地计算 docker 映像的确定性和可重现校验和,而无需 ping 任何注册表?
问题描述
如何在本地计算 docker 映像的确定性和可重现校验和,而无需 ping 任何注册表?
校验和不应取决于映像名称或它所在的注册表。它应该完全取决于所有层的内容。
例如,假设如下:
- 给定文件
a
- 包含内容的 dockerfile
FROM scratch COPY a /a
docker build . --no-cache
然后多次构建图像应该总是产生相同的校验和。
常规图像 ID 并没有削减它,因为它以某种方式使用来自中间容器的内容,因此总是会发生变化。我也知道,从 Docker 1.10 开始,图像有一个“RepoDigest”属性,它根据图层的内容唯一地标识图像。但是,据我所知,只有在拉取或推送到注册表时才会计算该摘要。有没有办法在不联系注册表的情况下获取此字段?(无论图像名称、标签或存储库如何,它实际上是确定性的吗?)
基本上,我正在寻找一种在 docker image 上运行良好 ol' sha256sum 的方法。这将帮助我实现类似于使用 Bazel 可以完成的事情:一个封闭的构建环境,从而实现:
- 声明 docker 镜像之间的依赖关系,并让 CI 系统只重建所需的内容而不使用 docker 的缓存(假设我有一个已经管理缓存的构建工具)
- 允许我使用与签署经典 tarball 相同的方法“签署”图像(即,发布校验和并以某种方式签署)
- 最重要的是:启用可重现的构建!
解决方案
推荐阅读
- django - Django REST:如何将 SimpleJWT 访问和刷新令牌作为带有自定义声明的 HttpOnly cookie 返回?
- c++ - 为什么负 size_t 下溢但减去它却没有?
- google-chrome-extension - 由于内容安全策略,Chrome 扩展程序拒绝加载脚本(试图在 chrome 扩展程序中运行 babel)
- flex-lexer - 为 (f)lexers 定义 lex 包含文件
- reactjs - ReactJs 管理一组有状态组件
- android - FXCollections in over Android
- python - D 盘上的 Python 与 VS Code 连接
- apache-kafka - Kafka接收器连接器-> postgres,avro JSON数据失败
- python - 是否可以从 python 中的字符串中获取这个 df['homes']+df['flats']?
- javascript - 以 HTML 格式从 API 请求中获取和显示数据