在travis上使用docker

具体可查看Using Docker in Builds,本文只对里面的一些重点进行说明。

想使用docker,你必须在.travis.yml里添加:

sudo: required

services:
  - docker

然后你就能像在命令行里一样运行docker相关的命令了。
例如使用当前项目下的Dockerfile构建docker镜像:

script:
- docker build -t my-app .

或者你需要建个mongo容器来测试你的app:

before_install:
  # 启动mongo容器
  - docker run -d --name=mongo mongo
script:
  - docker run -d --name=my-app --link mongo:mongo -p 8080:8080 my-app

使用Caching来缓存docker的镜像

可惜的是,暂时没有官方的方法来设置docker镜像缓存,详细见github上的讨论Caching Docker Images on Build。
倘若你了解travis的缓存机制,那应该明白travis缓存其实并不能明显地加快你的docker pull xxx,因为前者依然需要到s3服务器把caching内容拉下来。
但如果你使用docker build,然后cache中间生成的匿名镜像,的确能加速下一次的docker build

Hack

鉴于travis caching功能的灵活性,及docker savedocker load,我们依然可以把镜像缓存下来(该方法由s12v提供,见上面github的讨论):

首先在cache步骤前保存所有的images,

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'

在install步骤前读取镜像缓存:

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)