gpt4 book ai didi

docker 使用 apt-get 构建缓存破坏

转载 作者:行者123 更新时间:2023-12-04 18:38:53 27 4
gpt4 key购买 nike

我的理解是,如果 RUN命令“string”本身并没有改变(即要安装的包列表没有改变),docker引擎使用缓存中的图像进行相同的操作。这也是我的经验:

...
Step 2/6 : RUN apt update && DEBIAN_FRONTEND=noninteractive apt install -y curl git-all locales locales-all python3 python3-pip python3-venv libusb-1.0-0 gosu && rm -rf /var/lib/apt/lists/*
---> Using cache
---> 518e8ff74d4c
...
不过官方 Dockerfile best practices document这是关于 apt-get 的:

Using RUN apt-get update && apt-get install -y ensures your Dockerfile installs the latest package versions with no further coding or manual intervention. This technique is known as “cache busting”.


如果我将新包添加到列表中,这是正确的,但如果我不修改列表,则不是。
我的理解是否正确,或者我在这里遗漏了什么?
如果是,我可以假设我只会在 apt-get install 中获得更新的包吗?如果 Ubuntu 基础镜像也已更新(这会使整个缓存无效)?

最佳答案

你切断了中间的报价。报价的其余部分包括一个非常重要的条件:

You can also achieve cache-busting by specifying a package version. This is known as version pinning, for example:

RUN apt-get update && apt-get install -y \
package-bar \
package-baz \
package-foo=1.3.*

因此,您在该示例中运行的命令每次都会通过更改列表中包的固定版本来更改。请注意,除了更改命令运行之外,您还可以更改环境,具有相同的效果,使用 build arg as described in this answer .

关于docker 使用 apt-get 构建缓存破坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70947196/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com