小容器挑戰:將一個HTTP伺服器Dcoker從943M壓縮到6k! | devopsdirective
本文展示如何將Node.js的Image大小從最初的943MB縮小到6.34kB Assembly Image的過程,並瞭解了一些可用於將來縮小容器映象的技術。
Docker具有稱為多階段構建的功能,可輕鬆在具有所有必要依賴項的環境中構建程式碼,然後將生成的可執行檔案複製到其他Image中。出於多種原因,這很有用,但是最明顯的原因之一是Image大小!通過如下方式重構dockerfile:
### build stage ### FROM golang:1.14-alpine AS builder COPY . . RUN go build -o server . ### run stage ### FROM alpine:3.12 COPY --from=builder /go/server ./server COPY index.html index.html CMD ["./server"] |
Image結果就是13.2MB!
靜態編譯+Scratch image
13 MB還算不錯,但是我們仍然可以使用一些技巧來使它變得更小。
有一個稱為scratch的基本Image,其內容為空且大小為零。因為scratch裡面沒有任何內容,所以使用它構建的任何Image都必須帶有所有必需的依賴項。
為了使基於go的伺服器能夠做到這一點,我們需要在編譯步驟中新增一些標誌,以確保將必要的庫靜態連結到可執行檔案中:
### build stage ### FROM golang:1.14 as builder COPY . . RUN go build \ -ldflags "-linkmode external -extldflags -static" \ -a server.go ### run stage ### FROM scratch COPY --from=builder /go/server ./server COPY index.html index.html CMD ["./server"] |
具體來說,我們將連結模式設定為external,並將-static標誌傳遞給外部連結器。
這兩個更改使Image大小達到8.65MB
ASM贏!
用Go之類的語言編寫的小於10MB的影像幾乎在任何情況下都足夠小...但是我們可以縮小尺寸!Github使用者nemasu在github上以彙編形式編寫的全功能http伺服器,名為assmttpd。
對其進行容器化所需要做的就是在執行提供的make release配方之前將一些構建依賴項安裝到ubuntu基礎Image中:
### build stage ### FROM ubuntu:18.04 as builder RUN apt update RUN apt install -y make yasm as31 nasm binutils COPY . . RUN make release ### run stage ### FROM scratch COPY --from=builder /asmttpd /asmttpd COPY /web_root/index.html /web_root/index.html CMD ["/asmttpd", "/web_root", "8080"] |
asmttpd然後將生成的可執行檔案複製到 scratch image中,並使用呼叫CMD。這樣產生的影像大小僅為6.34kB!
點選標題
相關文章
- HTTP壓縮HTTP
- 第二屆學習影象壓縮挑戰賽
- 圖鴨科技獲CVPR 2018影象壓縮挑戰賽單項冠軍,技術解讀端到端影象壓縮框架框架
- 圖鴨科技獲CVPR 2018影像壓縮挑戰賽單項冠軍,技術解讀端到端影像壓縮框架框架
- HTTP 之 檔案壓縮HTTP
- linux的tar命令詳情;linux多個檔案壓縮打包到一個壓縮檔案Linux
- 從零開始一個http伺服器(六)-多路複用和壓力測試HTTP伺服器
- 給Tomcat,Apache配置gzip壓縮(HTTP壓縮)功能 (轉)TomcatApacheHTTP
- 小程式從入門到實戰系列(一)
- 如何壓縮 HTTP 請求正文HTTP
- 30 天的 Github 挑戰,我從中學到的 5 個經驗Github
- 用Kotlin擼一個圖片壓縮外掛-實戰篇(三)Kotlin
- Exadata 混合列壓縮實戰一例
- tar的打包-壓縮與解壓縮,並解壓到指定的目錄
- Android-壓縮大圖到容量超小的圖片Android
- oracle compress壓縮小記Oracle
- 從0到1上線一個微信小程式微信小程式
- 壓縮Word,一鍵實現Word文件壓縮
- Oracle壓縮黑科技(一)—基礎表壓縮Oracle
- word文件太大怎麼壓縮到最小 word壓縮檔案大小
- 將專案從 GitHub 部署到伺服器Github伺服器
- 如何把影片壓縮,影片壓縮軟體哪個最好
- png格式如何壓縮,圖片壓縮工具哪個好
- HTTP前端效能優化(壓縮與快取)HTTP前端優化快取
- HTTP/2 頭部壓縮技術介紹HTTP
- Netty 實戰:如何編寫一個麻小俱全的 web 容器NettyWeb
- 一次性將多個資料夾批處理壓縮成多個.rar
- 從雲端計算到容器到容器雲
- Nginx網路壓縮 CSS壓縮 圖片壓縮 JSON壓縮NginxCSSJSON
- AIX 將ps從同卷組一個PV遷到另一個PVAI
- oracle壓縮表(一)Oracle
- JAVA壓縮和解壓縮Java
- zip壓縮和解壓縮
- 從HTTP到HTTPSHTTP
- 圖片壓縮演算法 3M壓縮到200K演算法
- 一個強大的圖片壓縮演算法—近微信壓縮機制的Luban演算法
- 一個Vue圖片上傳剪裁壓縮元件Vue元件
- 仿寫一個android圖片壓縮工具Android