具體可查看Using Docker in Builds,本文只對(duì)里面的一些重點(diǎn)進(jìn)行說(shuō)明睛挚。
想使用docker徙歼,你必須在.travis.yml
里添加:
sudo: required
services:
- docker
然后你就能像在命令行里一樣運(yùn)行docker相關(guān)的命令了王暗。
例如使用當(dāng)前項(xiàng)目下的Dockerfile構(gòu)建docker鏡像:
script:
- docker build -t my-app .
或者你需要建個(gè)mongo容器來(lái)測(cè)試你的app:
before_install:
# 啟動(dòng)mongo容器
- docker run -d --name=mongo mongo
script:
- docker run -d --name=my-app --link mongo:mongo -p 8080:8080 my-app
使用Caching來(lái)緩存docker的鏡像
可惜的是,暫時(shí)沒有官方的方法來(lái)設(shè)置docker鏡像緩存殉簸,詳細(xì)見github上的討論Caching Docker Images on Build负饲。
倘若你了解travis的緩存機(jī)制,那應(yīng)該明白travis緩存其實(shí)并不能明顯地加快你的docker pull xxx
喂链,因?yàn)榍罢咭廊恍枰絪3服務(wù)器把caching內(nèi)容拉下來(lái)返十。
但如果你使用docker build
,然后cache中間生成的匿名鏡像椭微,的確能加速下一次的docker build
洞坑。
Hack
鑒于travis caching功能的靈活性,及docker save
和docker load
蝇率,我們依然可以把鏡像緩存下來(lái)(該方法由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
當(dāng)然你要把目錄保存下來(lái):
cache:
bundler: true
directories:
- $HOME/docker