Alpine Linux,一個只有5M的Docker鏡像

jopen 8年前發布 | 17K 次閱讀 Linux Docker

簡介

Alpine Linux Docker鏡像 基于 Alpine Linux操作系統 ,后者是一個面向安全的輕型Linux發行版。不同于通常Linux發行版,Alpine Linux采用了 musl libcbusybox 以減小系統的體積和運行時資源消耗。在保持瘦身的同時,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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!