如何將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的映象並執行起來,貌似還挺快的。

現在總結一下我們的技巧。

總結技巧

  1. 使用upx壓縮二進位制檔案,這一步從17MB->4MB。
  2. 使用iron/base映象,讓整體體積不至於太膨脹。這一步從4MB->15MB。
  3. 使用docker-slim壓縮映象,這一步從15MB->4MB。