Performance 在Travis CI上缓存docker映像
是否可以在Travis CI上缓存docker图像?试图用travis.yml中的cache.directory缓存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
/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上的一个高级功能