如何將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。