制作了一个构建 docker 的最小镜像的视频,上传到 B 站,分享给大家看。
希望能帮助大家稍微了解下下 docker。
希望大神们别喷,可以到 B 站提提建议。
B 站地址 https://www.bilibili.com/video/av40752125
1
CallMeReznov 2019-01-20 21:35:05 +08:00
楼主的舌头啊.....
|
2
jicg OP @CallMeReznov ???普通话不标准?
|
3
huaxianyan 2019-01-20 22:08:48 +08:00
@jicg 不是人身攻击,你这个普通话,通常意义的标准的确是没达到
|
4
Vegetable 2019-01-20 22:16:21 +08:00 via iPhone
file 读[faɪl],稍微注意一下比较好。
当然我也是很友好的说,没别的意思。 |
5
koodai 2019-01-20 22:19:51 +08:00 via iPhone
做的挺好的,不过楼主的发音确实可以练一下,真诚建议。
|
6
jicg OP @huaxianyan 嗯嗯,👌
|
8
jicg OP 谢谢,各位,还有什么不足之处,也希望大家说出来。
|
9
azh7138m 2019-01-21 00:18:49 +08:00
一个多阶段构建水了一个视频......
|
10
lands 2019-01-21 01:05:53 +08:00
感觉用 alpine 会小好多
|
11
sdijeenx 2019-01-21 01:12:50 +08:00
LZ 读英文单词别用日语发音,普通话不够标准=3=
|
12
izoabr 2019-01-21 01:36:59 +08:00
表示对分享的支持,不便发表评论,并保留意见。
|
13
yuikns 2019-01-21 02:09:53 +08:00 1
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 了解一下。 |
14
yuikns 2019-01-21 02:27:24 +08:00 1
另外,了解一下 vendor 目录 https://blog.gopheracademy.com/advent-2015/vendor-folder/
目前有很多依赖管理工具。无论形式怎么变化,只要是缓存代码到本地到,其实就是在当前工程下的 vendor 目录下。 这些工具只有在解析代码时候有用,在 build image 时候并没有用到。 我不明白为啥还要 get 一下 godep。 |
16
jicg OP @yuikns 源码复制过去只是为了编译用的,再二次构建的时候,只是把需要的文件复制到镜像里面,就是起了别名 final 的那次构建,
|
18
jicg OP @yuikns go get godep 的包,是为了安装 godep,借用 godep 来编译的,因为我也试过直接,可能我当时测有问题吧,go build 还是会在镜像,提示包不存在的,所以 builder 构建步骤里面安装了 godep
|
21
jicg OP @yuikns go-bindata 这个工具,我知道。他只是将静态文件打包到程序里面,得到的最终文件也不小,我一般用 upx 工具对他再压缩。
|
23
yuikns 2019-01-21 10:33:04 +08:00
@jicg 我是说
COPY --from=builder go/src/github.com/xxx/views /app/views COPY --from=builder go/src/github.com/xxx/conf /app/conf 这一挂。 |
24
jicg OP Beego 的基础项目,views 是存放页面模板文件的啊,必须要复制过去的吧,conf 是放配置文件的地方,也是需要的
|
25
jicg OP @yuikns Beego 的基础项目,views 是存放页面模板文件的啊,必须要复制过去的吧,conf 是放配置文件的地方,也是需要的
|
26
artandlol 2019-01-21 11:35:30 +08:00 via iPhone
肯定用 alpine,现在都是主流了。
|
28
yuikns 2019-01-21 11:54:10 +08:00
@jicg 所以我才说
> 要是是配置文件,建议楼主了解下 viper。docker 里面不需要贴这些配置文件的。 > 要是是静态文件,go-bindata 了解一下。 配置文件你要是需要默认值,那配置下 default。要是不是,config ( https://docs.docker.com/compose/reference/config/ ) 或者 etcd 才是最终归宿。 |
29
imherer 2019-01-21 11:54:25 +08:00
IDE 用的 JB 家的哪个?
|
30
yuikns 2019-01-21 11:59:16 +08:00
@imherer 要是还写 scala/java/... 的话,不要 goland。和 idea + go plugin 没区别
|
33
jicg OP @yuikns 嗯嗯,好的。
go-bindata 我是知道的,用与不用,看个人爱好吧,我觉得 docker 没必须,将静态文件打包到可执行程序内部。go-bindata 的作者好像已经不再维护这个项目了。 viper 这个框架是配置文件的框架,非常好的框架,谢谢,分享。我用的是 beego 的项目来演示的,而 beego 配置文件可以设定取系统环境变量的值的,所以将 conf 文件复制过去没问题的。 |
34
yesono 2019-01-21 16:36:33 +08:00
golang 基础环境( alpine+glibc+改时区)+add go 二进制就可以了吧
··· FROM alpine:latest # Install base packages RUN apk update && apk --no-cache add tzdata ca-certificates wget zlib libgcc \ && cp -r -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://raw.githubusercontent.com/sgerrand/alpine-pkg-glibc/master/sgerrand.rsa.pub && wget http://mirrors.lo ngzhu.cn/src/glibc-2.28-r0.apk && apk add glibc-2.28-r0.apk && rm -f glibc-2.28-r0.apk /etc/apk/keys/sgerrand.rsa.pub ··· |