Travis CI上的缓存码头图像

kag*_*ag0 12 performance continuous-integration caching travis-ci docker

是否可以在Travis CI上缓存泊坞窗图像?尝试使用travis.yml中的cache.directories 缓存/var/lib/docker/aufs/diff文件夹和/var/lib/docker/repositories-aufs文件似乎不起作用,因为它们需要root.

Mat*_*att 13

从Docker的角度来看,我认为你可以做到这一点的最佳方式(没有运行网络本地注册表的可能性)是saveDocker镜像并缓存导出的tar球.你需要load在开始时而不是pull图像.这样你就不会搞乱docker存储实现.

install:
- docker pull busybox
- docker save busybox | gzip > docker/busybox.tar.gz
cache:
  directories:
  - docker
Run Code Online (Sandbox Code Playgroud)

然后,load在Travis运行之前,您需要缓存的图像.

before_script:
- gzip -dc docker/busybox.tar.gz | docker load
Run Code Online (Sandbox Code Playgroud)

对于特拉维斯来说,我不清楚的一点是,如果你需要install在第一次之后阻止它运行该步骤.一旦缓存,您不希望Travis每次都拉动并导出图像.我不确定该cache指令是否会自动为您执行此操作?

那么主要的问题是,这实际上是否比拉动图像更快:

缓存会对配置中列出的所有目录进行分析,并使用安全且受保护的URL将其上载到S3,从而确保上载的归档的安全性和隐私性.

请注意,这使得我们的缓存不是网络本地的,它仍然绑定到S3的网络带宽和DNS解析.这会影响您可以存储在缓存中的内容.如果您在缓存中存储大于几百兆的存档,则您不太可能看到速度大幅提升.

你可能只是在增加开销.由于Docker注册表由Cloudfront支持,因此Travis已经从本地或至少关闭的亚马逊基础架构中提取压缩图像.也许要求他们提供本机缓存Docker镜像的功能,类似于他们对apt包的做法,尽管听起来并不乐观.