缓存 – 在下载资源时,使Dockerfile指令缓存无效的一些策略是什么

我们的一些Docker镜像需要从Nexus服务器或Internet上下载更大的二进制文件,后者负责分发 Java,Node.js,Mobile( Android和iOS)应用程序.例如,使用ADD或RUN指令进行下载.

RUN curl -o docker https://get.docker.com/builds/Linux/x86_64/docker-latest

考虑到命令“docker build”将根据文件的mtime查看指令和缓存,在构建这些图像时利用缓存机制的方法是什么,避免重新下载整个二进制文件? https://stackoverflow.com/a/26612694/433814.

另一个问题是如果资源发生变化,Docker将不会下载最新版本.

我使用类似但更简单的方法:

假设我想添加一个名为mybin的二进制文件,可以从http://www.example.com/pub/mybin下载

我在jenkins的工作中做了以下几点

wget -N http://www.example.com/pub/mybin

在我的Docker文件中,我有:

COPY mybin /usr/local/bin/

选项-N仅在服务器上更改后才下载二进制文件.我第二次运行wget工作时得到:

...
Length: 12262118 (12M) [application/octet-stream]
Server file no newer than local file ‘mybin’ -- not retrieving.

而docker build使用缓存.

如果服务器上的二进制更改(当时间戳更改时),则wget再次下载二进制文件,这会使COPY命令的高速缓存无效.

相关文章
相关标签/搜索