优秀的编程知识分享平台

网站首页 > 技术文章 正文

如何将golang程序的镜像压缩到4MB么?请看这里

nanyue 2024-08-30 21:00:35 技术文章 8 ℃

如何将golang程序的镜像压缩到4MB么?

最初go程序的大小是17MB。



首先我使用upx将它压缩到4MB。

这是一个压缩二进制的工具。

具体命令:

GOOS=linux GOARCH=amd64 go build -ldflags "-a -s -w"  // 这里-ldflags去掉些符号。
upx -9 -k viot-worker  // -k是保留备份的意思,viot-worker是二进制文件的名称,替换成你们的就可以了。



现在是4MB,但是还没有打包成镜像

由于之前看过其他大佬的文章,所以我精心挑选一个镜像它叫iron/base,只有一个7MB的基础镜像。


然后我通过以下Dockerfile将go程序打包成镜像。简化了些跟文章无关的内容。

FROM iron/base
WORKDIR /root
COPY viot-worker /root

RUN chmod +x viot-worker
ENTRYPOINT ["./viot-worker"]

打包镜像的命令

docker build -t demo/viot-worker:3 .


这个时候整个镜像到了15MB

然后我出动了镜像压缩神器docker-slim。

执行了下面命令。

docker-slim build demo/viot-worker:3 --http-probe=false

生成了x.slim的镜像就是打包后的镜像,大小是4MB。

这个时候整个镜像就已经被压缩到4MB


接下来我们试试可否运行

由于我是部署在私有云的k8s上的。因此修改这个镜像地址就可以测试是否运行了。

容器重新部署后,容器日志显示已经启动成功!

现在我们已经成功将go程序打包成一个4MB的镜像并运行起来,貌似还挺快的。

现在总结一下我们的技巧。

总结技巧

  1. 使用upx压缩二进制文件,这一步从17MB->4MB。
  2. 使用iron/base镜像,让整体体积不至于太膨胀。这一步从4MB->15MB。
  3. 使用docker-slim压缩镜像,这一步从15MB->4MB。
最近发表
标签列表