【问题标题】:What's the purpose of "docker build --pull"?“docker build --pull”的目的是什么?
【发布时间】:2019-10-21 14:32:45
【问题描述】:

在构建 docker 镜像时,您通常使用docker build .

但我发现你可以指定--pull,所以整个命令看起来像docker build --pull .

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

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

【问题讨论】:

    标签: docker


    【解决方案1】:

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

    以基于移动标签(例如ubuntu:bionic)的图像为例。上游会定期进行更改并重建它,但您可能在本地有几个月前的图像。 docker 会很高兴地在旧基础上进行构建。 --pull 将作为副作用拉取,因此您可以针对最新的基础映像进行构建

    使用它来尽快获得上游安全修复程序通常是最佳实践(而不是使用陈旧的、可能易受攻击的图像)。虽然您必须权衡重大更改(如果您使用不可变标签,那么它不会产生影响)

    【讨论】:

    • 这是对ubuntu:bionic 图像的一个很好的解释,因为它(显然)没有附加版本,但每当他们发布新图像时仍然会有所不同。一切都说得通。谢谢!
    • 例如,如果基本图像是ubuntu:0.1.0,并且他们发布了一个新图像但具有 same 版本,即ubuntu:0.1.0 - 这是否意味着docker build --pull会重新下载整个新图像吗? (我猜这将是大多数人更喜欢的)
    • 我希望有人能澄清@JimAho 的最后一个问题,因为这也是我想更好地理解的。如果镜像刚刚被推送,没有其他任何变化,那么是不是没有重建呢?
    • @learning2learn 答案是肯定的,docker 图像的标签只是一个字符串,所以“0.1.0”与答案“bionic”中的示例没有什么不同
    • 如果你想确定你要拉的镜像的版本,不要拉标签。提取摘要。您使用图像的 SHA 哈希签名来确保获得您期望的图像。如果您在开发机器上使用 :develop 标签,那么 --pull 可以帮助您保持最新状态,但是对于生产/掌舵图表,我切换到摘要,因为它更可靠。
    【解决方案2】:

    Docker 允许将--pull 标志传递给docker build,例如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 获得了一个新版本),它会自动使缓存失效;同样,如果您COPY 不同的代码将使缓存无效。这通常会影响的唯一事情是,如果您正在执行类似于网络托管包的apt-get install 的操作,在这种情况下,--no-cache 将导致它检查更新的版本,即使基础映像尚未更新。
    【解决方案3】:

    简单的答案。 docker build 用于从本地 dockerfile 构建。 docker pull 用于从 docker hub 拉取。如果您在没有 docker 文件的情况下使用 docker build,则会引发错误。

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

    基本上,如果你加上 --pull,它会在每次运行时尝试拉取最新版本。

    【讨论】:

    • 如果您有分层图像 - 它会总是全部拉出吗?
    • 如果你有分层的图像,一些会被缓存在机器上(旧的层),任何新的层都会被拉取。
    猜你喜欢
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 2018-10-18
    • 2022-07-04
    • 1970-01-01
    相关资源
    最近更新 更多