如何将golang程序的镜像压缩到4MB么?
如何将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的镜像并运行起来,貌似还挺快的。
现在总结一下我们的技巧。
总结技巧
- 使用upx压缩二进制文件,这一步从17MB->4MB。
- 使用iron/base镜像,让整体体积不至于太膨胀。这一步从4MB->15MB。
- 使用docker-slim压缩镜像,这一步从15MB->4MB。
赞 (0)