Travis CI 可以缓存 docker 图像吗?
Can Travis CI cache docker images?
是否可以添加设置以在 travis 配置中的任何位置缓存我的 docker 图片?我的 docker 图片更大,下载需要一段时间。
有什么建议吗?
参见 缓存 Docker 内部版本 #5358 中的图像
的答案。对于Docker Travis 1.12 可用,推荐manually cache the images。对于 Docker 1.13,您可以在 Travis 上使用它的 --cache-from
。
保存:
before_cache:
# Save tagged docker images
- >
mkdir -p $HOME/docker && docker images -a --filter='dangling=false' --format '{{.Repository}}:{{.Tag}} {{.ID}}'
| xargs -n 2 -t sh -c 'test -e $HOME/docker/.tar.gz || docker save [=10=] | gzip -2 > $HOME/docker/.tar.gz'
加载:
before_install:
# Load cached docker images
- if [[ -d $HOME/docker ]]; then ls $HOME/docker/*.tar.gz | xargs -I {file} sh -c "zcat {file} | docker load"; fi
还需要声明一个缓存文件夹:
cache:
bundler: true
directories:
- $HOME/docker
我刚刚发现了以下 article 中讨论的方法。
services:
- docker
before_script:
- docker pull myorg/myimage || true
script:
- docker build --pull --cache-from myorg/myimage --tag myorg/myimage .
- docker run myorg/myimage
after_script:
- docker images
before_deploy:
- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
deploy:
provider: script
script: docker push myorg/myimage
on:
branch: master
这对我有用:
- 更新所需的 docker 图片名称,而不是
<IMAGE_NAME_HERE>
(3 个位置)。
- 您也可以对多张图片使用相同的配置,
docker save
可以处理多张图片,只需确保在尝试保存之前拉取它们。
services:
- docker
cache:
directories:
- docker-cache
before_script:
- |
filename=docker-cache/saved_images.tar
if [[ -f "$filename" ]]; then docker load < "$filename"; fi
mkdir -p docker-cache
docker pull <IMAGE_NAME_HERE>
docker save -o "$filename" <IMAGE_NAME_HERE>
script:
- docker run <IMAGE_NAME_HERE>...
今天(2019 年 10 月)最简单的解决方案是将以下内容添加到 .travis.yml
:
cache:
directories:
- docker_images
before_install:
- docker load -i docker_images/images.tar || true
before_cache:
- docker save -o docker_images/images.tar $(docker images -a -q)
Docker 图片不建议缓存,这里是 Travis 文档
https://docs.travis-ci.com/user/caching/#things-not-to-cache
是否可以添加设置以在 travis 配置中的任何位置缓存我的 docker 图片?我的 docker 图片更大,下载需要一段时间。
有什么建议吗?
参见 缓存 Docker 内部版本 #5358 中的图像
的答案。对于Docker Travis 1.12 可用,推荐manually cache the images。对于 Docker 1.13,您可以在 Travis 上使用它的 --cache-from
。
保存:
before_cache:
# Save tagged docker images
- >
mkdir -p $HOME/docker && docker images -a --filter='dangling=false' --format '{{.Repository}}:{{.Tag}} {{.ID}}'
| xargs -n 2 -t sh -c 'test -e $HOME/docker/.tar.gz || docker save [=10=] | gzip -2 > $HOME/docker/.tar.gz'
加载:
before_install:
# Load cached docker images
- if [[ -d $HOME/docker ]]; then ls $HOME/docker/*.tar.gz | xargs -I {file} sh -c "zcat {file} | docker load"; fi
还需要声明一个缓存文件夹:
cache:
bundler: true
directories:
- $HOME/docker
我刚刚发现了以下 article 中讨论的方法。
services:
- docker
before_script:
- docker pull myorg/myimage || true
script:
- docker build --pull --cache-from myorg/myimage --tag myorg/myimage .
- docker run myorg/myimage
after_script:
- docker images
before_deploy:
- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
deploy:
provider: script
script: docker push myorg/myimage
on:
branch: master
这对我有用:
- 更新所需的 docker 图片名称,而不是
<IMAGE_NAME_HERE>
(3 个位置)。 - 您也可以对多张图片使用相同的配置,
docker save
可以处理多张图片,只需确保在尝试保存之前拉取它们。
services:
- docker
cache:
directories:
- docker-cache
before_script:
- |
filename=docker-cache/saved_images.tar
if [[ -f "$filename" ]]; then docker load < "$filename"; fi
mkdir -p docker-cache
docker pull <IMAGE_NAME_HERE>
docker save -o "$filename" <IMAGE_NAME_HERE>
script:
- docker run <IMAGE_NAME_HERE>...
今天(2019 年 10 月)最简单的解决方案是将以下内容添加到 .travis.yml
:
cache:
directories:
- docker_images
before_install:
- docker load -i docker_images/images.tar || true
before_cache:
- docker save -o docker_images/images.tar $(docker images -a -q)
Docker 图片不建议缓存,这里是 Travis 文档 https://docs.travis-ci.com/user/caching/#things-not-to-cache