使用 go mod download 加速 docker 編譯

這幾天在折騰 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 編譯也快了很多。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章