加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Docker图像缓存失效何时发生?

发布时间:2020-12-16 03:31:07 所属栏目:安全 来源:网络整理
导读:也许我的Google Foo不够强大,但我无法找到有关何时缓存中的Docker镜像无效的明确列表.具体来说,我至少在这些场景中感兴趣: 因mtime changes vs checksum changes而失效.适用于何时?它可以处理不同的源路径(例如,不同目录中的存储库的克隆)吗? 由于更新的

也许我的Google Foo不够强大,但我无法找到有关何时缓存中的Docker镜像无效的明确列表.具体来说,我至少在这些场景中感兴趣:

>因mtime changes vs checksum changes而失效.适用于何时?它可以处理不同的源路径(例如,不同目录中的存储库的克隆)吗?
>由于更新的基本映像而导致无效.此时将(安全)更新例如Debian泡到我身边?
>是否存在任何显式API,持续集成工具可以使用它来告诉Docker哪些缓存图像可以重用,哪些不可以(例如因为wget foo.com/latest.gz)?

最佳答案
从Docker 1.8开始,Docker不再使用mtime来使缓存无效(这在此拉取请求#12031中已更改).

建立图像时;

>对于本地内容(ADD myfiles / somewhere / COPY myfiles / somewhere),docker使用校验和更改来使缓存无效
>始终下载远程内容(ADD http://example.com/foobar / somewhere),但基于校验和更改,构建缓存无效
>除非指令被更改,否则RUN指令(例如wget foo.com/latest.gz)将永远不会使高速缓存失效;即,高速缓存基于指令中的文本.如果您需要可重现的构建,请确保这些URL指向特定版本(wget http://example.com/package-major.minor.patch.gz)

Docker 1.9引入了对build-time arguments的支持,它允许您传递可以在Dockerfile中使用的变量,这样您就不必编辑Dockerfile来破坏缓存,或者安装不同版本的软件包.

例如

FROM foobar
ARG MAJOR=1
ARG MINOR=0
ARG PATCH=0
ADD http://example.com/package-$MAJOR.$MINOR.$PATCH.gz /

默认情况下会添加http://example.com/package-1.0.0.gz,但是,传递“major”,“minor”或“patch”构建时参数可以覆盖要下载的版本,并使缓存无效;

docker build --build-arg MINOR=2 .                                           Sat Jan 16 13:22:40 2016
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM ubuntu
 ---> 1c9b046c2850
Step 2 : ARG MAJOR=1
 ---> Using cache
 ---> a149d88772ba
Step 3 : ARG MINOR=0
 ---> Using cache
 ---> e3dae0189ffd
Step 4 : ARG PATCH=0
 ---> Using cache
 ---> 678d7ae33054
Step 5 : ADD http://example.com/package-$MAJOR.$MINOR.$PATCH.gz /
Get http://example.com/package-1.2.0.gz: dial tcp 127.0.0.1:80: getsockopt: connection refused

有关build-cache的更多信息,请参阅文档中的the build-cache section.

At which point will (security) updates of e.g. Debian bubble down to me?

Docker不会自动下载更新的图像,也不会更新基于它们的图像.但是,如果docker pull yourbaseimage,并且下载了较新的映像,则基于该映像的构建缓存无效,因此下一个构建将不使用缓存.

对于Docker hub上的自动构建,您可以确保在更新基本映像时自动重建映像,请参阅documentation on automated builds

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读