最简单的 Go Dockerfile 编写姿势,没有之一!

2020-12-10 14:46:40 +08:00
 kevinwan

1. Dockerfile 一些额外注意点

2. 多阶段构建

3. 完整 Dockerfile 编写过程

4. 总结

goctl 工具极大简化了 Dockerfile 文件的编写,提供了开箱即用的最佳实践,并且支持了模板自定义。

如果觉得工具有帮助,欢迎 star 🤝

5. 项目地址

https://github.com/tal-tech/go-zero

8286 次点击
所在节点    推广
64 条回复
feelinglucky
2020-12-11 08:59:05 +08:00
@kieoo 干净的编译环境是比较重要的,相比之下打包时间变长以及缓存等对比不是很关键
kiddingU
2020-12-11 09:33:22 +08:00
多条 run 指令为何不合并成一条
zunceng
2020-12-11 09:33:37 +08:00
@kieoo 我碰到过这个问题 后来为了加快速度编译和打包分了两步
编译在一个编译用的容器内运行 可以把 GOPATH GOROOT 等挂载进去 做增量编译
vZexc0m
2020-12-11 09:48:06 +08:00
@kieoo #21 不是每次都会重新拉所有的依赖包,因为先复制的 go.mod 和 go.sum ,这两个文件没有变动的时候会使用缓存。
lwch
2020-12-11 09:55:18 +08:00
@kevinwan 没有,我们当初用 docker 的时候还是 go1.10~1.11 左右的时代,监控做的也不全面
f6x
2020-12-11 10:05:46 +08:00
@dayeye2006199 的版本更标准. @kevinwan
build 和 pack 分离.
然后把 go 环境的 builder 镜像本地缓存, 没有模块变化时达到最快构建速度.
kevinwan
2020-12-11 10:19:32 +08:00
@kiddingU 合了,只是文章不能改
fy
2020-12-11 10:47:51 +08:00
看了第一条:

选择最简单的镜像
比如 alpine,整个镜像 5M 左右

告辞。
mritd
2020-12-11 11:30:20 +08:00
把那两个 ADD 指令删掉
kevinwan
2020-12-11 12:05:25 +08:00
@mritd 这个是优化技巧,吃缓存的
tozp
2020-12-11 12:11:38 +08:00
不错,赞一下
beginor
2020-12-11 13:11:18 +08:00
@kevinwan 缓存的副作用是导致最终编译出来的镜像体积增大
kevinwan
2020-12-11 13:22:40 +08:00
@beginor 两阶段构建,不存在变大的
fuis
2020-12-11 13:54:44 +08:00
@fy 哈哈,我也是看到第一点就不想看了
kevinwan
2020-12-11 14:00:02 +08:00
@fuis 支持模板完全可定制,按需自定义
beginor
2020-12-11 19:23:32 +08:00
@kevinwan run 语句越多, 镜像越大
kevinwan
2020-12-12 12:31:46 +08:00
周一我会发一篇文章讲解如何一键生成 K8S 部署文件
kevinwan
2020-12-13 19:24:02 +08:00
@fy scratch 没有 sh,无法登记去查问题
phx13ye
2020-12-14 01:37:02 +08:00
alpine 有什么问题呀?
@fuis
@fy
kevinwan
2020-12-14 07:31:07 +08:00
@phx13ye 他们意思这不是最简单的镜像,scratch 才是,而我觉得 scratch 没有 sh 不方便

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

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

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

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

© 2021 V2EX