在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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,635评论 15 147
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,544评论 0 120
  • docker基本概念 1. Image Definition 镜像 Image 就是一堆只读层 read-only...
    慢清尘阅读 8,816评论 1 21
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,568评论 2 45
  • 以千分之一的模样贴近大地 以叹息辗转于人世之间 我可以是陨石 打翻宇宙巨大的旗帜 也可以是星光 居无定所 永不坠落...
    故墙阅读 250评论 8 5