具体可查看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 save
和docker 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
网友评论