docker build go 项目每次都很慢,有什么好的办法吗?

2020-12-01 17:03:59 +08:00
 caicaiwoshishui
COPY . .

ADD go.mod .
ADD go.sum .

RUN export GO111MODULE=on && \
    export GOPROXY=https://goproxy.cn && \
    go mod download

RUN go build -o main main.go

接触 golang 没多久,是不是姿势不对呀? mod 没有更新的情况,为啥每次都 go mod download,它不会自己缓存吗?

求大佬解答

5931 次点击
所在节点    Go 编程语言
26 条回复
Hanggi
2020-12-01 20:34:50 +08:00
Go 语言构建 docker 只需要 4 行代码,build, from, copy, cmd 结束了。
guyeu
2020-12-01 20:43:24 +08:00
如果对测试特性没有什么心理障碍的话,可以试试这个

https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md#run---mounttypecache

可以缓存编译的中间产物
falcon05
2020-12-01 21:14:23 +08:00
如果只是为了 go 跨平台编译用 docker,根本不需要,go 本身就支持交叉编译。
tikazyq
2020-12-01 22:10:24 +08:00
理论上你不清理 docker 的临时镜像重新 build 的时候就会复用安装依赖时的镜像,先将依赖配置拷贝进容器,下载安装完依赖后再拷贝源码,这样就会复用之前的镜像(除非你是更改了依赖配置)。这样 docker 构建就快很多了。

话说 go 编译速度真的不算慢的,要不你去试试 java (doge)
shmilyoo
2020-12-01 22:11:38 +08:00
相反,我把本地交叉编译改成 在 paas 里面编译了,本地 mac,paas:go-alpine 。 并不觉得慢,换个 goproxy 试试?
tikazyq
2020-12-01 22:12:15 +08:00
docker 的多阶段构建可以帮助你去掉没用的源码,最后只保留编译好的二进制文件。

可以参考: https://github.com/crawlab-team/crawlab/blob/master/Dockerfile

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/731045

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX