制作了一个“golang 制作 docker 最小镜像”的视频

2019-01-20 21:21:02 +08:00
 jicg

制作了一个构建 docker 的最小镜像的视频,上传到 B 站,分享给大家看。
希望能帮助大家稍微了解下下 docker。
希望大神们别喷,可以到 B 站提提建议。
B 站地址 https://www.bilibili.com/video/av40752125

4553 次点击
所在节点    Go 编程语言
35 条回复
CallMeReznov
2019-01-20 21:35:05 +08:00
楼主的舌头啊.....
jicg
2019-01-20 21:41:47 +08:00
@CallMeReznov ???普通话不标准?
huaxianyan
2019-01-20 22:08:48 +08:00
@jicg 不是人身攻击,你这个普通话,通常意义的标准的确是没达到
Vegetable
2019-01-20 22:16:21 +08:00
file 读[faɪl],稍微注意一下比较好。
当然我也是很友好的说,没别的意思。
koodai
2019-01-20 22:19:51 +08:00
做的挺好的,不过楼主的发音确实可以练一下,真诚建议。
jicg
2019-01-20 22:55:11 +08:00
@huaxianyan 嗯嗯,👌
jicg
2019-01-20 22:56:01 +08:00
@Vegetable 嗯嗯,好的。
jicg
2019-01-20 23:02:07 +08:00
谢谢,各位,还有什么不足之处,也希望大家说出来。
azh7138m
2019-01-21 00:18:49 +08:00
一个多阶段构建水了一个视频......
lands
2019-01-21 01:05:53 +08:00
感觉用 alpine 会小好多
sdijeenx
2019-01-21 01:12:50 +08:00
LZ 读英文单词别用日语发音,普通话不够标准=3=
izoabr
2019-01-21 01:36:59 +08:00
表示对分享的支持,不便发表评论,并保留意见。
yuikns
2019-01-21 02:09:53 +08:00
Dockerfile 听起来像是 Dark Fly,scratch 我好像听到的是 "script"?
不看字幕中文也听不清...


此外还有一些疑问。

先说个无聊的,后面的 "as final" 嘎哈用的?没有也一样啊。

首先,

我的脚本是这样的:

PLATFORM="$(uname -s | tr 'A-Z' 'a-z')"

export CGO_ENABLED=0
export GOOS=${PLATFORM}

export BUILD_DATE=$(date '+%Y%m%d%H%M%S%Z')
export BUILD_LDFLAGS="-X github.com/name/project/version.GitHash=$(git rev-parse HEAD | cut -c1-8) "
export BUILD_LDFLAGS="${BUILD_LDFLAGS} -X github.com/name/project/version.BuildDate=\"${BUILD_DATE}\" "
export BUILD_LDFLAGS="${BUILD_LDFLAGS} \"-extldflags='-static'\""

go build -a -ldflags="$BUILD_LDFLAGS" ./cmd/my-command

这就足以在当前目录下,从 ./cmd/my-command 寻找 main 然后生成了 binary release 了。

我们使用 go help get 得到说明:

Get downloads the packages named by the import paths, along with their
dependencies. It then installs the named packages, like 'go install'.

这个在没有 dep 时候使用一下它下载一下依赖可以理解。但是在有 dep 后为何要保留?

其次,为啥要 copy 那些源代码目录?这远不是最小了。

要是是配置文件,建议楼主了解下 viper。docker 里面不需要贴这些配置文件的。
要是是静态文件,go-bindata 了解一下。
yuikns
2019-01-21 02:27:24 +08:00
另外,了解一下 vendor 目录 https://blog.gopheracademy.com/advent-2015/vendor-folder/

目前有很多依赖管理工具。无论形式怎么变化,只要是缓存代码到本地到,其实就是在当前工程下的 vendor 目录下。

这些工具只有在解析代码时候有用,在 build image 时候并没有用到。

我不明白为啥还要 get 一下 godep。
jicg
2019-01-21 07:32:36 +08:00
@azh7138m 好吧
jicg
2019-01-21 07:39:22 +08:00
@yuikns 源码复制过去只是为了编译用的,再二次构建的时候,只是把需要的文件复制到镜像里面,就是起了别名 final 的那次构建,
jicg
2019-01-21 07:41:24 +08:00
@yuikns 没有 get 啊, 视频里面有讲把 go get 注释掉了啊
jicg
2019-01-21 07:52:10 +08:00
@yuikns go get godep 的包,是为了安装 godep,借用 godep 来编译的,因为我也试过直接,可能我当时测有问题吧,go build 还是会在镜像,提示包不存在的,所以 builder 构建步骤里面安装了 godep
jicg
2019-01-21 07:57:08 +08:00
@lands 嗯嗯,alpine 才 4m 左右
jicg
2019-01-21 07:57:56 +08:00
@koodai 谢谢,

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

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

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

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

© 2021 V2EX