Performance 在Travis CI上缓存docker映像

Performance 在Travis CI上缓存docker映像,performance,caching,docker,continuous-integration,travis-ci,Performance,Caching,Docker,Continuous Integration,Travis Ci,是否可以在Travis CI上缓存docker图像?试图用travis.yml中的cache.directory缓存/var/lib/docker/aufs/diff文件夹和/var/lib/docker/repositories aufs文件似乎不起作用,因为它们需要根目录。从docker的角度来看,我认为这是最好的方法(不可能运行本地网络)是Docker映像并缓存导出的tar球。您需要在一开始就使用该选项,而不是拉取图像。这样,您就不会干扰docker存储实现 install: - dock

是否可以在Travis CI上缓存docker图像?试图用travis.yml中的cache.directory缓存
/var/lib/docker/aufs/diff
文件夹和
/var/lib/docker/repositories aufs
文件似乎不起作用,因为它们需要根目录。

从docker的角度来看,我认为这是最好的方法(不可能运行本地网络)是Docker映像并缓存导出的tar球。您需要在一开始就使用该选项,而不是
拉取图像。这样,您就不会干扰docker存储实现

install:
- docker pull busybox
- docker save busybox | gzip > docker/busybox.tar.gz
cache:
  directories:
  - docker
然后,在运行Travis之前,您需要
加载
缓存的图像

before_script:
- gzip -dc docker/busybox.tar.gz | docker load
对于Travis,我不清楚的一点是,您是否需要在第一次之后停止它运行
install
步骤。您不希望Travis每次缓存图像后都提取和导出图像。我不确定是否让
缓存
指令自动为您实现这一点

接下来的主要问题是,这是否真的会比提取图像快:

缓存会将配置中列出的所有目录都存储起来 并使用安全和受保护的URL将它们上载到S3,确保 上传档案的安全和隐私

请注意,这使我们的缓存不是本地的,它仍然绑定到 S3的网络带宽和DNS分辨率。这会影响你的工作 可以并且应该存储在缓存中。如果存储的档案大于 缓存中有几百兆字节,您不太可能看到 大速度改进


您可能只是在增加开销。由于Docker注册表由Cloudfront支持,Travis已经从本地或至少关闭的Amazon基础设施中提取压缩图像。可能会要求他们提供功能,类似于他们为
apt
软件包所做的工作。

看看circleci建议的内容:


docker save
/
docker load
与travis提供的目录缓存结合起来应该很容易。

我不确定这是否正是我想要的,因为它导出了容器,我只是在寻找图像。也不会像您可能注意到的那样更新。虽然这是一个很好的片段,但可能尝试缓存docker映像真的没有意义。当您想要更新时,需要通过gui手动取消缓存。图像名称也需要不同,这有点痛苦。此外,容器文件系统只是一个覆盖了更改的映像。如果您不做任何更改,您仍然保留图像。事实上,
docker构建
通过提交正在运行的容器中所做的更改来创建映像。使用
export
时,您会丢失图像层的轨迹。详细介绍了一种基于预定义的
$CACHE\u DIR
将人工制品有条件地缓存到预定义的
$CACHE\u DIR>中的方法。如果它不存在,则假设没有缓存并填充它,否则,使用
缓存\u目录中的存档文件。这是一个副本,请参阅CircleCI 2.0自动缓存docker图像的可能副本。他们在每个构建主机上缓存它,所以一开始,人们可能会认为,没有缓存。构建越多,缓存被命中的频率就越高。@Jan_Doms链接被破坏:(CircleCI上的docker层缓存似乎是一个好方法,但也有DIY解决方法。此外,docker层缓存似乎至少是CircleCI上的一个高级功能