想象一下,我们的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
期间生成警告(因为它有点9.0.2但可用9.0.3),而今天构建的图像可能不会(因为它已经有了9.0.3)。当然,这个具体问题(这是差异,而不是警告本身)可以使用pip install --disable-pip-version-check
来修复,但更多问题是可能的。
据我了解,几乎Docker的重点是重复性,所以在基本图像规范这样常见的地方看到泄漏有点奇怪。有时这可能是更好的(当我们想要最新的修复时)但有时候不是(当我们想要可重复性时)。
理论上,每个图像都可以用git等跟踪,但这是最后的选择。 Dockerfile中的ID,docker-compose.yml
或docker
的参数显然会更好。问题是:从哪里获取此ID以及放置它的位置?
答案 0 :(得分:2)
Docker有两种识别图像的机制。
了解如何通过其不可变标识符提取图像:https://docs.docker.com/engine/reference/commandline/pull/#pull-an-image-by-digest-immutable-identifier