什么';“的目的是什么?”;docker build--pull“;?

什么';“的目的是什么?”;docker build--pull“;?,docker,Docker,构建docker映像时,通常使用docker build. 但是我发现您可以指定--pull,因此整个命令看起来像docker build--pull。 我不确定--pull的用途。Docker's说“总是尝试提取图像的更新版本”,我不确定这在这种情况下意味着什么 您可以使用docker build构建一个新映像,并最终将其发布到容器注册表的某个位置。为什么要提取尚不存在的内容?它将提取任何基础映像的最新版本,而不是重用您在本地已标记的内容 以一个基于移动标签的图像为例(例如ubuntu:bio

构建docker映像时,通常使用
docker build.

但是我发现您可以指定
--pull
,因此整个命令看起来像
docker build--pull。

我不确定
--pull
的用途。Docker's说“总是尝试提取图像的更新版本”,我不确定这在这种情况下意味着什么


您可以使用
docker build
构建一个新映像,并最终将其发布到容器注册表的某个位置。为什么要提取尚不存在的内容?

它将提取任何基础映像的最新版本,而不是重用您在本地已标记的内容

以一个基于移动标签的图像为例(例如
ubuntu:bionic
)。upstream会定期进行更改和重建,但您可能在本地有一个月的映像。docker将很乐意在老基地上建造
--pull
将作为副作用进行pull,因此您可以根据最新的基本映像进行构建


使用它来尽快获得上游安全修复通常是最佳做法(而不是使用过时的、可能有漏洞的图像)。尽管您必须权衡破坏性的更改(如果您使用不可变的标记,则不会产生任何影响)

简单的答案<代码>docker build用于从本地docker文件生成<代码>docker pull用于从docker hub拉出。如果在没有docker文件的情况下使用docker build,则会抛出错误

当您指定
--pull
时:最新版本
docker将尝试下载最新版本(如果有)


基本上,如果您添加--pull,它将在每次运行时尝试提取最新版本。

Docker允许将
--pull
标志传递给
Docker build
,例如
Docker build--拉动-t myimage
。这是确保生成始终使用最新容器映像的推荐方法,尽管本地版本可用。然而,还有一点值得一提:

要确保完全重建生成(包括检查基础映像是否有更新),请在生成时使用以下选项:

--无缓存
-这将强制重建已可用的层

因此,完整命令将如下所示:

docker构建--pull--无缓存--标记myimage:版本

相同的选项可用于
docker compose


docker compose build——无缓存——pull

在正常使用中,您不应该需要
——无缓存
。如果基础映像已更新(并且
--pull
获得新版本),则会自动使缓存无效;类似地,如果您
复制将使缓存无效的不同代码。这通常会影响到的唯一一件事是,如果您正在执行类似于
apt get install
的网络托管软件包的操作,在这种情况下,
--无缓存
将导致它检查更新的版本,即使基本映像尚未更新。如果您有分层映像,它会始终拉取所有映像吗?如果您有分层映像,一些将被缓存在机器上(旧的层),任何新的层都将被拉出来。这对于
ubuntu:bionic
图像来说是一个很好的解释,因为它(显然)没有附加版本,但在发布新图像时仍然会有所不同。一切都有道理。谢谢例如,如果基本映像是
ubuntu:0.1.0
,并且他们发布了一个新映像,但版本相同,即
ubuntu:0.1.0
,这是否意味着
docker build--pull
将再次重新下载整个新映像?(我想这是大多数人喜欢的)我希望有人能澄清@JimAho的最后一个问题,因为这也是我想更好地理解的。如果图像刚刚被推送,没有其他更改,那么它是不是没有重建?@learning2learn答案是肯定的,docker图像的标记只是一个字符串,因此“0.1.0”与答案“仿生”中的示例没有什么不同