线上 Go 项目的 Docker 镜像应该怎么构建?

栏目: IT技术 · 发布时间: 4年前

上期的文章: Kubernetes入门实践--部署运行 Go 项目 发布后,有网友留言说我文章里演示的镜像是把项目文件和Go都打包到了镜像里,这样镜像的占用空间会比较大。

线上 Go 项目的  <a href='https://www.codercto.com/topics/20577.html'>Docker</a>  镜像应该怎么构建?

Go 开发的程序在编译成二进制文件后是可以在没有安装 Go 环境的系统里执行的,如果只把编译完的二进制文件直接放到镜像里就能节省很多镜像空间了。我给的回复是文章的侧重点是 Kubernetes 的实践所以镜像方面就没有占太多篇幅。

确实线上项目的应用镜像一般都不像之前文章里讲的那样构建,因为生产项目各方面要求更严格些。镜像构建的过程一般都是先用 Docker 容器把项目编译成二进制文件,然后把编译好的文件拷贝到一个新的容器镜像里,新镜像里一般只包含 Linux 系统运行需要的最基本的文件,不需要有 Go 环境,因此能减少很多占用空间。整个这个过程都发生在镜像构建的过程中,这样就能保证多环境的一致性,上面这个构建 Docker 镜像的方式叫做多阶段构建( multi stage build )。

多阶段构建是 17.05 版本才有的功能,所以使用前要先确定下使用的 Docker Engine 的版本。

线上 Go 项目的 Docker 镜像应该怎么构建?

Docker Engine版本

下面就来介绍一下怎么使用 Docker 的多阶段构建制作 Go 应用的镜像。

之前文章 Kubernetes入门实践--部署运行Go项目 里镜像的 Dockerfile 长这样:

FROM golang:1.14-alpine
RUN mkdir /app
COPY . /app
WORKDIR /app
RUN go build -o main .
CMD ["/app/main"]

我们使用多阶段构建的方式构建镜像后, Dockerfile 会变成类似下面这样:

FROM golang:alpine AS build

RUN mkdir /app
COPY . /app
WORKDIR /app
RUN CGO_ENABLED=0 GOOS=linux go build -o myapp

###
FROM scratch as final
COPY --from=build /app/myapp .
CMD ["/myapp"]

Go 项目应用的 Dockerfile 通常大概类似这样,但是每个项目的细节可能有所不同。 FROM golang:alpine 指定了开始阶段的基础映像(其中包含Go工具和库,用于构建程序), AS build 是给这个阶段取名为 build

golang:alpine 指定了 Go 基础映像的 alpine 版本, alpine 是专门为容器设计的小型 Linux 发行版。这个 Dockerfile 中使用了两次 FROM 指令,第二条 FROM scratch 行,它告诉 Docker 从一个全新的,完全空的容器镜像重新开始,然后将上个阶段编译好的程序复制到其中。这个才是我们随后将用于运行的 Go 应用程序的容器镜像。

scratch 镜像是 Docker 项目预定义的最小的镜像。使用 scratch 镜像可以节省大量空间,因为我们实际上不需要 Go 工具或其他任何东西来运行我们的编译好的程序,这可能也是 Go 在容器时代的一个优势吧。

使用 scratch 镜像制作的 Go 应用镜像在运行时会有一个不识别时区的问题。这个也是我们最近项目往 Kubernetes 上迁移时遇到的第一个问题,不过还好经过 Google 和查看 Go 加载系统时区的源码我帮新来的运维小哥哥找到了解决方法,具体怎么解决的下期的文章再告诉大家。

线上 Go 项目的 Docker 镜像应该怎么构建?

容器和虚拟机到底有啥区别?

Minikube-笔记本上的Kubernetes集群

:heart:爱心三连

1.看到这里了就点个在看支持下吧,你的 在看 是我创作的动力。

2.关注公众号 网管叨bi叨「每周为您分享原创技术文章」

3.特殊阶段,带好口罩,做好个人防护。

线上 Go 项目的 Docker 镜像应该怎么构建?

“在看转发” 是最大的支持


以上所述就是小编给大家介绍的《线上 Go 项目的 Docker 镜像应该怎么构建?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

硅谷增长黑客实战笔记

硅谷增长黑客实战笔记

曲卉 / 机械工业出版社 / 2018-4-10 / 65.00元

增长黑客这个词源于硅谷,简单说,这是一群以数据驱动营销、以迭代验证策略,通过技术手段实现爆发式增长的新型人才。近年来,互联网公司意识到这一角色可以发挥四两拨千斤的作用,因此对该职位的需求也如井喷式增长。 本书作者曾在增长黑客之父肖恩•埃利斯麾下担任增长负责人,用亲身经历为你总结出增长黑客必备的套路、内力和兵法。本书不仅有逻辑清晰的理论体系、干货满满的实践心得,还有Pinterest、SoFi......一起来看看 《硅谷增长黑客实战笔记》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试