使用 go mod download 加速 docker 編譯

這幾天在折騰 go-ycsb 的 docker 環(huán)境的時候,一直被一件簡單的事情困擾,就是升級了 go 使用了 go mod 之后,已經(jīng)沒有 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 編譯也快了很多。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Docker — 云時代的程序分發(fā)方式 要說最近一年云計算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,872評論 15 147
  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一、Docker 簡介 Docke...
    極客圈閱讀 10,764評論 0 120
  • 背景 我最初使用 Docker 的時候,每個人都在說它用起來有多簡單方便,它內(nèi)部的機制是有多么好,它為我們節(jié)省了多...
    希云Docker容器管理平臺閱讀 1,803評論 5 8
  • 第一章:編譯和安裝SCons第二章:簡單編譯第三章:編譯相關(guān)的一些事情第四章:編譯和鏈接庫文件第五章:節(jié)點對象第六...
    仙靈兒閱讀 12,357評論 0 3
  • 時時自我克制,這是愚蠢的事,因為你在毫無意義地耗盡自己。這或許是薩特自我放逐的美麗借口,不過抱怨本是無罪的,可太多...
    海貓閱讀 362評論 0 1

友情鏈接更多精彩內(nèi)容