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镜像,它尽可能的简化了镜像的大小,易于分发,有着完善的包管理器和预编译的包。如果你需要一个干净、简洁的容器,开始尝试使用吧!
感谢魏星对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群 (已满),InfoQ读者交流群(#2) )。