Travis CI可以缓存docker映像吗?



是否可以在travis配置的任何地方添加缓存docker映像的设置?我的是一个更大的docker映像,它需要一段时间才能下载。

有什么建议吗

今天(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)

参见build# 5358缓存Docker映像为了得到答案。对于现在在Travis上可用的Docker 1.12,建议手动缓存图像。对于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/$1.tar.gz || docker save $0 | gzip -2 > $HOME/docker/$1.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

关于这里的Travis文档,不建议缓存Docker映像https://docs.travis-ci.com/user/caching/things-not-to-cache

我刚刚找到了本文中讨论的以下方法。

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>...

最新更新