【问题标题】:Is it possible to make a FROM instruction in a Dockerfile pull the most recent image?是否可以在 Dockerfile 中创建 FROM 指令来拉取最新的图像?
【发布时间】:2020-06-17 18:27:58
【问题描述】:

我想知道在继续构建之前是否可以在 Dockerfile 中创建 FROM 指令来拉取最新的映像(例如 image:latest)?

目前,只有在本地尚未存储图像时才会拉取图像。

【问题讨论】:

    标签: docker kubernetes dockerfile cloud docker-registry


    【解决方案1】:

    docker build --pull OTHER_OPTIONS PATH

    来自https://docs.docker.com/engine/reference/commandline/build/

    --pull      Always attempt to pull a newer version of the image
    

    尽管出于开发目的可能有真正的用例,但我强烈建议避免在生产版本中依赖此选项。 Docker 镜像必须是不可变的。使用此选项可能会导致从相同源代码生成不同图像的情况,并且由于此类构建而导致的任何行为更改而没有相应的代码更改都难以调试。

    假设有一个名为“派生项目”的项目使用基础镜像myBaseImage:latest

    FROM myBaseImage:latest
    
    <snipped>
    
    CMD xyz
    
    docker build --pull -t myDerivedImage:<version of source code> .
    

    假设派生图像的标记基于它的源代码版本(例如 git commit hash),这是标记图像的最常用方法,如果发布了最新标记下的新基础图像而没有更改在派生项目中,派生项目的构建会在基础镜像更改前后产生不同的同名镜像。以名称发布图像后,不应对其进行变异。

    【讨论】:

    • 谢谢。 Docker 映像始终不可变。您的意思是:使用此选项可能会导致从相同源代码生成不同图像的情况,并且在没有相应代码更改的情况下由此类构建导致的任何行为更改都难以调试。???????跨度>
    • 好的,图片不能修改。它在设计上是不可变的。的确,两张图片在不同的时间点可能具有相同的名称,但严格来说,这张图片从未发生过变异。
    • 是语义。对象本身不能变异,但对象上的句柄可以在不同的时间点指向不同的对象。
    【解决方案2】:

    要通过更新基础镜像来构建 docker 镜像,您必须使用以下选项:

    --pull
    

    我留给您讨论此选项的官方文档以及更多内容:official docker documentation

    【讨论】:

    • 我没有使用 docker-compose
    猜你喜欢
    • 2016-02-08
    • 2022-11-04
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多