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

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

上期的文章: 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-7 / 79.00元

《第三次浪潮》是美国著名未来学家阿尔文•托夫勒的代表作之一。1980年出版之际,随即引起全球热评,堪称中国改革开放的指南。本书阐述了由科学技术发展引起的社会各方面的变化与趋势。托夫勒认为,人类迄今为止已经经历了两次浪潮文明的洗礼:第一次是农业革命,人类就此从原始渔猎时代进入以农业为基础的文明社会,并历经千年,直到工业革命的到来。随后,人类社会历时300年摧毁了落后的第一次浪潮文明,并在“二战”后1......一起来看看 《第三次浪潮》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具