gpt4 book ai didi

docker - 如何获取构建ID并在 `FROM`中指定它?

转载 作者:行者123 更新时间:2023-12-02 19:06:52 25 4
gpt4 key购买 nike

假设我们在Dockerfile中有FROM python:3.6.4。它似乎非常具体,因此我们可以预期,每次Docker在全新环境中将此图像作为docker build的一部分下载时,我们都将获得相同的基础图像。

但是实际上并非如此。在撰写本文时,this Dockerfile(两天前生成)已用于该图像。该构建本身大概也是在两天前(因此镜像中的apt-get'd软件包是从那时开始的),尽管https://hub.docker.com/_/python/https://store.docker.com/images/python都没有显示构建细节。但是,例如,https://hub.docker.com/r/aslushnikov/latex-online/builds/列出了构建。

因此,从同一Dockerfile构建的两个镜像可能会有所不同。一个为什么如此重要的小例子:两天前构建的图像可能会在pip install期间生成警告(因为它具有pip 9.0.2但9.0.3可用),而今天构建的图像则可能不会(由于已经具有9.0.3)。当然,可以使用pip install --disable-pip-version-check修复此具体问题(即差异,而不是警告本身),但是可能出现更多问题。

据我了解,Docker的几乎所有重点都是可重复性,因此在基本镜像规范这样常见的地方看到泄漏是有点奇怪的。有时(当我们需要最新的修复程序时)​​可能更可取,但有时(当我们希望可重复性时)则不然。

从理论上讲,每个图像都可以在git中进行跟踪,依此类推,但这是最后的选择。 Dockerfile中的ID,docker-compose.ymldocker的参数显然会更好。问题是:从哪里获得此ID并将其放在哪里?

最佳答案

Docker有两种识别镜像的机制。

  • 第一个是众所周知的标记机制,它不能保证确定性部署,因为可以重用标记来指向其他图像。
  • 第二个是鲜为人知的不可变标识符机制。不变标识符本质上是SHA256哈希摘要。标签可以重复使用,但不变的标识符永远不会。

  • 了解如何通过其不可变标识符提取图像: https://docs.docker.com/engine/reference/commandline/pull/#pull-an-image-by-digest-immutable-identifier

    关于docker - 如何获取构建ID并在 `FROM`中指定它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49466289/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com