小容器挑戰:將一個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!
點選標題
相關文章
- 如何將word文件壓縮變小?
- 第二屆學習影象壓縮挑戰賽
- 圖鴨科技獲CVPR 2018影像壓縮挑戰賽單項冠軍,技術解讀端到端影像壓縮框架框架
- 圖鴨科技獲CVPR 2018影象壓縮挑戰賽單項冠軍,技術解讀端到端影象壓縮框架框架
- 如何將多個視訊快速壓縮?
- 從零開始一個http伺服器(六)-多路複用和壓力測試HTTP伺服器
- 將三個數按從大到小輸出
- 小程式從入門到實戰系列(一)
- 用Kotlin擼一個圖片壓縮外掛-實戰篇(三)Kotlin
- 從零手寫實現 nginx-09-compress http 檔案壓縮NginxHTTP
- Android-壓縮大圖到容量超小的圖片Android
- 容器安全的三大挑戰
- 壓縮Word,一鍵實現Word文件壓縮
- word文件太大怎麼壓縮到最小 word壓縮檔案大小
- sqlserver 透過壓縮bak檔案實現從伺服器還原資料庫《資料差異數個小時》SQLServer伺服器資料庫
- HTTP前端效能優化(壓縮與快取)HTTP前端優化快取
- 從HTTP到HTTPSHTTP
- Nginx網路壓縮 CSS壓縮 圖片壓縮 JSON壓縮NginxCSSJSON
- 如何把影片壓縮,影片壓縮軟體哪個最好
- png格式如何壓縮,圖片壓縮工具哪個好
- Netty 實戰:如何編寫一個麻小俱全的 web 容器NettyWeb
- [極客大挑戰 2019]Http wpHTTP
- oracle壓縮表(一)Oracle
- netty寫一個http伺服器NettyHTTP伺服器
- 探索HTTP傳輸中gzip壓縮的祕密HTTP
- 從0到1上線一個微信小程式微信小程式
- 一個Vue圖片上傳剪裁壓縮元件Vue元件
- 檔案壓縮和解壓縮
- 容器雲安全挑戰和攻防應對
- 從 Gzip 壓縮 SVG 說起 — 論如何減小資原始檔的大小SVG
- 雲原生時代下,容器安全的“四個挑戰”和“兩個關鍵”
- 字串壓縮(一)之ZSTD字串
- Redis儲存優化--小物件壓縮Redis優化物件
- Python 壓縮PDF減小檔案大小Python
- Python實現壓縮和解壓縮Python
- linux下壓縮解壓縮命令Linux
- linux壓縮和解壓縮命令整理Linux
- JS壓縮方法及批量壓縮JS