25
2024
06
00:05:50

Go应用Dockerfile编辑



推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

#一、前言

#一、概述


我们知道使用GO开发的应用程序,我们可以打包成二进制文件,然后直接像shell脚本一样执行即可。因此基于此方式,我们在编辑go项目的Dockerfile时,可以借助多层构建的功能,使最终的镜像体积很小,但是也不影响业务的运行。

#二、GO应用打包介绍


#2.1 直接打包

在项目根目录执行,这将在当前目录下生成一个名为应用程序module的可执行文件。

go build
1
#2.2 指定输出文件名

我们如果想要指定打包后的脚本名称,则可以使用-o参数指定,指定打包后的项目脚本问app

go build -o app
1
#2.3 交叉编译

Go交叉编译允许你在一个平台上构建适用于其他操作系统和架构的Go可执行文件。这对于在本地构建不同操作系统或架构的二进制文件非常有用。

  • 在 Windows 上构建 Linux 二进制文件

# 设置变量SET CGO_ENABLED=0SET GOOS=linux
SET GOARCH=amd64# 打包go build -o app.exe
1
2
3
4
5
6
  • 在Linux上构建Windows可执行文件

# 设置变量GOOS=windows 
GOARCH=amd64 
# 打包go build -o app.exe
1
2
3
4
5
  • 在MacOS上构建Windows可执行文件

# 设置变量GOOS=windows 
GOARCH=amd64 
# 打包go build -o app.exe
1
2
3
4
5

#三、Docker镜像


使用Dockerfile将Go项目打包为Docker镜像。可以使用多层构建的方式,将Go应用程序编译并放入最终的镜像中。

  • Dockerfile示例

FROM golang:1.20 as builderWORKDIR /appsCOPY ./ /appsRUN export GOPROXY=https://goproxy.cn \
    && go build  -ldflags "-s -w" -o get-pod \
    && chmod +x get-podFROM alpineLABEL maintainer="tchua"COPY --from=builder /apps/get-pod  /apps/RUN echo -e  "http://mirrors.aliyun.com/alpine/v3.15/main\nhttp://mirrors.aliyun.com/alpine/v3.15/community" >  /etc/apk/repositories \&& apk  update && apk --no-cache add tzdata gcompat libc6-compat \&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo "Shanghai/Asia" > /etc/timezone \&& apk del tzdata \&& ln -s /lib/libc.so.6 /usr/lib/libresolv.so.2WORKDIR /appsCMD ["./get-pod"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

说明

上面Dockerfile我们使用了多层构建的方式:

  • FROM golang:1.20 as builder 阶段一,注意负责应用的依赖下载及打包

    • export GOPROXY=https://goproxy.cn 设置代理,加上GO依赖下载

    • go build -ldflags "-s -w" 指定链接标志以减小打包后可执行文件的大小

  • FROM alpine 阶段二,核心配置

    • COPY --from=builde 从阶段1中复制构建好的应用程序到当前阶段

    • libc6-compat 包 提供了对glibc的兼容支持,可以使用glibc编译的应用程序能够在这些系统上正常运行

Alpine是一个基于musl libc和BusyBox的轻量级Linux发行版相比于传统的GNU C库(glibc),musl libc是另一个C库的实现,它旨在提供更小巧、更快速的运行时环境。

  • 查看构建后镜像大小

可以看到镜像只有不到50M,如果使用原始GO镜像,则会达到上G的大小

image-20230630172037586


本文链接:https://hqyman.cn/post/6781.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

您的IP地址是: