是否可以在Travis CI上缓存泊坞窗图像?尝试在travis.yml中缓存带有cache.directories的/var/lib/docker/aufs/diff
文件夹和/var/lib/docker/repositories-aufs
文件似乎不起作用,因为它们需要root。
答案 0 :(得分:12)
从Docker的角度来看,我认为你可以做到这一点的最佳方式(没有运行网络本地registry的可能性)是save
Docker镜像并缓存导出的tar球。您需要load
一开始而不是pull
一张图片。这样你就不会搞乱docker存储实现。
install:
- docker pull busybox
- docker save busybox | gzip > docker/busybox.tar.gz
cache:
directories:
- docker
然后,在Travis运行之前,您需要load
缓存的图像。
before_script:
- gzip -dc docker/busybox.tar.gz | docker load
对于特拉维斯来说,我不清楚的是,如果你需要在第一次之后阻止它运行install
步骤。一旦缓存后,您不希望Travis每次都拉动并导出图像。我不确定cache
指令是否会自动为您执行此操作?
接下来的主要问题是,这实际上是否比拉动图像更快:
缓存会破坏配置中列出的所有目录 并使用安全且受保护的URL将它们上传到S3,确保 上传档案的安全性和隐私性。
请注意,这使得我们的缓存不是网络本地的,它仍然受到约束 S3的网络带宽和DNS解析。这会影响到你 可以而且应该存储在缓存中。如果存储的档案大于a 在缓存中几百兆字节,你不太可能看到一个 速度提升很快。
您可能只是增加了开销。由于Docker注册表由Cloudfront支持,因此Travis已经从本地或至少关闭的亚马逊基础架构中提取压缩图像。也许可以向cache Docker images natively询问他们的功能,类似于他们对{{1}}包的操作,although it doesn't sound hopeful。
答案 1 :(得分:3)
看看circleci推荐的内容:https://circleci.com/docs/docker/#caching-docker-layers。
将docker save
/ docker load
与travis提供的目录缓存结合起来应该很容易。