Alpine Linux,一個只有5M的Docker鏡像
簡介
Alpine Linux Docker鏡像 基于 Alpine Linux操作系統 ,后者是一個面向安全的輕型Linux發行版。不同于通常Linux發行版,Alpine Linux采用了 musl libc 和 busybox 以減小系統的體積和運行時資源消耗。在保持瘦身的同時,Alpine Linux還提供了自己的包管理工具apk,可以在其網站上 查詢 ,或者直接通過apk命令查詢和安裝。
Alpine Linux Docker鏡像也繼承了Alpine Linux發行版的這些優勢。相比于其他Docker鏡像,它的容量非常小,僅僅只有5M,且擁有非常友好的包管理器。
下表是一些官方鏡像的大小:
鏡像名稱 | 大小(MB) |
ubuntu:latest | 187.9 |
debian:latest | 125.1 |
centos:latest | 196.6 |
alpine | 4.794 |
除了小,Alpine鏡像的另外一大優勢就是內置完整包管理器。相較于其他微型基礎鏡像(如busybox,基礎鏡像大小為1.113MB),擁有一個包管理器,可以快速構建應用鏡像。例如這個 dnsmasq 鏡像,Dockerfile非常簡單,僅僅運行了Alpine提供的apk工具安裝了dnsmasq包即可:
FROM alpine:3.2 RUN apk -U add dnsmasq EXPOSE 53 53/udp ENTRYPOINT ["dnsmasq", "-k"]
使用
由于Alpine Linux有完整的包管理器,其使用方式和其他的基礎鏡像類似,直接使用其包管理命令apk即可。
如README中例子,如果需要安裝一個mysql客戶端,只需要創建如下Dockerfile:
FROM gliderlabs/alpine:3.3 RUN apk add --no-cache mysql-client ENTRYPOINT ["mysql"]
然后通過 docker build 命令,即可構建出自己的mysql客戶端。同樣,基于Alpine Linux構建出來的鏡像,有其空間上的巨大優勢:
docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE alpine/mysql latest edf988b8f4c8 58 seconds ago 35.74 MB
爭論
對于Alpine Linux, Hacker News 上爭論還是比較激烈的。
首先是空間占用問題,小是Alpine Linux的最大優勢,但是Docker的文件系統可以進行分層緩存,對于已經構建或者拉取過鏡像的機器來說,每次的增量更新內容可能并不會很多。也就是說,如果所有鏡像都使用相同的基礎鏡像,這個鏡像在所有機器上都只會拉取一遍。
另外,Alpine Linux使用了musl,可能和其他Linux發行版使用的glibc實現會 有所不同 。在容器化中最可能遇到的是 DNS問題 ,即musl實現的DNS服務不會使用resolv.conf文件中的search和domain兩個配置,這對于一些通過DNS來進行服務發現的框架可能會遇到問題。
總結
Alpine Linux,一個只有5M的Docker鏡像,它盡可能的簡化了鏡像的大小,易于分發,有著完善的包管理器和預編譯的包。如果你需要一個干凈、簡潔的容器,開始嘗試使用吧!
來自: http://www.infoq.com/cn/news/2016/01/Alpine-Linux-5M-Docker