当构建一个docker镜像时,通常使用的是docker build .
。
但我发现可以指定--pull
,整个命令看起来就像是docker build --pull .
我不确定--pull
的目的。Docker的官方文档中说,“始终尝试拉取图像的更新版本”,而我不确定这在这种情况下意味着什么。
您使用docker build
来构建新镜像,并最终将其发布到容器注册表中。为什么要拉取还不存在的东西呢?
使用--pull选项时,它会拉取任何基础镜像的最新版本,而不是重复使用本地标记过的镜像
以基于移动标记(例如ubuntu:bionic
)的图像为例。上游周期性地进行更改和重建,但您可能已经拥有几个月前的镜像。Docker将愉快地构建旧的基础镜像。--pull
将作为副作用拉取最新的基础镜像,因此您将构建最新的基础镜像
通常最好的做法是尽快使用--pull获取上游安全修补程序(而不是使用过时、可能存在漏洞的镜像)。尽管您必须权衡破坏性变更的影响(如果您使用了不可变标记,则不会产生影响)
--pull
标志,例如docker build . --pull -t myimage
, 以确保始终使用最新的容器镜像版本进行构建,而不考虑本地可用版本。但是有一个值得注意的附加点:--no-cache
- 这将强制重新构建已经存在的层。docker build . --pull --no-cache --tag myimage:version
对于docker-compose
也有相同的选项:
docker-compose build --no-cache --pull
--no-cache
,如果基础镜像被更新了(使用 --pull
获取新版本),缓存会自动失效;同样地,如果你复制了不同的代码,也会使缓存失效。通常唯一受影响的是,如果你正在安装网络主机包(如 apt-get install
),那么 --no-cache
将导致即使基础镜像没有更新也会检查是否有更新版本。 - David Maze--pull
时,如果基础镜像没有接收到任何更新,则可以使用 --no-cache
来忽略/使本地缓存失效。 - Stphanedocker build
用于从本地dockerfile构建镜像,docker pull
用于从docker hub下载镜像。如果在不带dockerfile的情况下使用docker build,则会抛出错误。--pull
或:latest
时,Docker将尝试下载最新版本(如果有)。--pull
参数,每次运行命令时,它都会尝试拉取最新版本。--pull
是确保构建的镜像得到最新更新的好方法。如果你的 Dockerfile 引用了 node:16-buster
,你需要使用 pull 来确保获取所有的修补程序(例如 16.16.0)。 - Marc
ubuntu:bionic
镜像,非常好,因为它没有附加版本号,但是每当他们发布新的镜像,它仍然会有所不同。所有的都说得通。谢谢! - Jim Ahoubuntu:0.1.0
,并且他们发布了一个新的镜像,但版本号相同,即ubuntu:0.1.0
- 这是否意味着docker build --pull
将重新下载整个新镜像?(这可能是大多数人喜欢的方式) - Jim Aho