我试图在Docker官方文档中找到这些信息,但没有成功。
在计算每个提交/层的哈希时,Docker会考虑哪些信息?
很明显,Dockerfile中的行是哈希的一部分,当然还有父提交哈希。但是在计算这个哈希值时会考虑其他因素吗?
具体用例:假设我在不同的机器上有两个开发人员,在不同的时间点(并且因此,不同的docker守护进程和不同的缓存)对同一个Dockerfile运行$ docker build ...
。 FROM ...
指令将为它们提供相同的起点,但每个操作的结果散列是否会产生相同的散列?这是确定性的吗?
答案 0 :(得分:5)
谢谢@thaJeztah。答案在https://gist.github.com/aaronlehmann/b42a2eaf633fc949f93b#id-definitions-and-calculations
layer.DiffID :单个图层的ID
计算:DiffID = SHA256hex(未压缩的层tar数据)
layer.ChainID :图层及其父级的ID。此ID唯一标识由一组图层组成的文件系统。
计算:
image.ID :图片的ID。由于图像配置引用了图像使用的图层,因此该ID包含文件系统数据和图像配置的其余部分。
计算:SHA256hex(imageConfigJSON)