美文网首页
使用 go mod download 加速 docker 编译

使用 go mod download 加速 docker 编译

作者: siddontang | 来源:发表于2019-01-06 21:40 被阅读245次

    这几天在折腾 go-ycsb 的 docker 环境的时候,一直被一件简单的事情困扰,就是升级了 go 使用了 go mod 之后,已经没有 vendor 了,那么每次在 docker 里面编译 go-ycsb 的时候,都会重新去下载需要的依赖。这个其实是很坑爹的一个事情。所以我在想有没有办法能把依赖缓存起来。

    首先我做了如下改动:

    ADD . /go/src/github.com/pingcap/go-ycsb
    RUN GO111MODULE=on go mod download
    WORKDIR /go/src/github.com/pingcap/go-ycsb
    RUN GO111MODULE=on go build -o /go-ycsb ./cmd/*
    

    也就是希望在编译的时候,先使用 go mod download 将所需要的依赖给下载下来,但这个其实是不行的,每次仍然都需要下载编译依赖。原因也很好解释,主要是 ADD . /go/src/github.com/pingcap/go-ycsb 这一步会把 docker 的 cache 给清掉,毕竟代码有更新了。

    那么我们要如何才能先缓存需要的依赖呢?这个其实也挺简单的,我们先把 go mod 需要的两个文件 copy 到 docker 里面,然后 go mod download,就可以了,如下:

    WORKDIR /go/src/github.com/pingcap/go-ycsb
    
    COPY go.mod .
    COPY go.sum .
    
    RUN GO111MODULE=on go mod download
    
    COPY . .
    
    RUN GO111MODULE=on go build -o /go-ycsb ./cmd/*
    

    只有当我们的 mod 文件重新更新之后,cache 才会失效,然后重新 download。搞定了这个问题,go-ycsb 的 docker 编译也快了很多。

    相关文章

      网友评论

          本文标题:使用 go mod download 加速 docker 编译

          本文链接:https://www.haomeiwen.com/subject/flyerqtx.html