小而美的選擇:Alpine Linux (28:57)
在 Minimal Docker image 的製作手法中,Alpine Linux 是個很特殊的東西。
它很小:只有約 5 MB。但它又很有威力,藉由 Busybox + musl libc + APK,可以兜出上百 MB 的 image 可以做的事情。
所以,在 minimal Docker image 領域裡,可說是後來居上。
在這一課中,我以 Redis server 3.0.7 為對象,教你如何以 Alpine Linux 作為 base image,製作出不到 20 MB 的 Redis image。
我也用三種不同的 Redis server 執行模式,實測性能表現:
- Native:不涉及 Docker 技術,直接以 native 模式執行 Redis。理論上,這是赤裸裸、不加料、不打折扣的模式。
- Debian base:以常見的
debian:jessie
作爲 Redis 的 base image。 - Alpine base:以這一課探討的
alpine:3.3
作為 Redis 的 base image。
請根據以下的素材,親自實驗看看。你可以用 Vagrant 虛擬機來實驗,也可以用 Ubuntu/Debian 實體或雲端主機來實驗:
我實測的結果,原始數據如下:
數據僅供參考,畢竟這不是最嚴謹的實測方法。
換成圖形來比較看看:
從圖中可看出,藍色部分的 native application 不見得每次都有最佳的表現(應該在合理的誤差範圍內)。而黃色部份的 Alpine 表現十分出色,完全可與以 glibc 為班底的 native application 及 Debian base image 相抗衡。
所以,Alpine 算是可以認真考慮的一種 base image 方案。
當然啦,如果你真的考慮在實務上採用 Alpine 作為 base image,完整的測試集是必要的。不只是測效能,更是測相容性及穩定性。畢竟,絕大多數 Linux 世界的軟體,都是以 glibc 作為隱含的假設;要切換成 Alpine 所用的 musl libc,仍然有潛在的風險。
再提醒一次:完整的測試集是必要的!
0 comments