Docker:通过摘要提取图像,内部使用标签

Cop*_*ste 5 digest docker dockerfile

以 dockerhub 上托管的以下存储库为例:\n https://hub.docker.com/r/frolvlad/alpine-miniconda3 \n
\n
\n
\n执行以下命令以通过摘要提取映像:

\n\n
docker pull frolvlad/alpine-miniconda3:python3.7@sha256:9bc9c096713a6e47ca1b4a0d354ea3f2a1f67669c9a2456352d28481a6ce2fbe\n
Run Code Online (Sandbox Code Playgroud)\n\n


\n根据docker 文档,通过摘要提取图像具有以下属性:

\n\n
\n

使用此功能\xe2\x80\x9cpins\xe2\x80\x9d将图像及时转换为特定版本

\n
\n\n

据我了解,在任何时候使用该摘要提取的 docker 映像都是不可变的。\n
尽管它不会对其中的可变或看似可变的引用进行评论。\n
\n
\n最重要的是docker 的第一行文件读取

\n\n
FROM frolvlad/alpine-glibc:alpine-3.9\n
Run Code Online (Sandbox Code Playgroud)\n\n

根据我的阅读,我认为如果作者更改了 dockerfile 中的第一行并推送(即使它是相同的标签),我将不会受到影响,因为我指向图像摘要。然而,\n由于作者引用了 dockerfile 中的标签,而不是摘要,我如何确认使用什么 dockerfile/基本映像来构建其映像?因为看起来仅仅分析frolvlad/alpine-glibc:alpine-3.9dockerfile 是不够的,因为它在创建映像时可能会有所不同。

\n

Daz*_*kin 3

您是对的,摘要拉取的图像实际上(!)是不可更改的。

图像摘要是根据构成图像的层计算出的 SHA-256 哈希值。因此,不同的图像共享相同的摘要的可能性极小。

一旦创建图像的图层就不会改变。因此,即使FROM图像发生变化,您现有的图像也不会随之改变。

但是,如果您使用新的(相同标记的)图像重建图像FROM,则图像的摘要将发生变化,这将向您发出信号,表明某些内容已发生变化。

在语句中也可以使用摘要(并且是一个很好的实践)FROM(出于您引用的原因),但很少有开发人员这样做。您可能希望确保语句Dockerfiles中使用FROM摘要,以确保始终使用相同的图像源。

然而,它是海龟一直向下(或向上),因此您递归地将信任委托给从您的图像一直派生到 的图像SCRATCH

这就是推荐图像漏洞工具的原因之一。

我最近在自己的教育中探索了这一点:

https://medium.com/google-cloud/adventures-w-docker-manifests-78f255d662ff