写点什么

Alpine Linux,一个只有 5M 的 Docker 镜像

  • 2016-01-06
  • 本文字数:1182 字

    阅读完需:约 4 分钟

简介

Alpine Linux Docker 镜像基于 Alpine Linux 操作系统,后者是一个面向安全的轻型 Linux 发行版。不同于通常 Linux 发行版,Alpine Linux 采用了 musl libc busybox 以减小系统的体积和运行时资源消耗。在保持瘦身的同时,Alpine Linux 还提供了自己的包管理工具 apk,可以在其网站上查询,或者直接通过apk 命令查询和安装。

Alpine Linux Docker 镜像也继承了 Alpine Linux 发行版的这些优势。相比于其他 Docker 镜像,它的容量非常小,仅仅只有 5M,且拥有非常友好的包管理器。

下表是一些官方镜像的大小:

除了小,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 好读者(已满),InfoQ 读者交流群(#2)InfoQ 好读者)。

2016-01-06 18:0040730

评论

发布
暂无评论
发现更多内容

在线TSV转多行数据工具

入门小站

工具

C语言-strlen与sizeof区别

芒果酱

c++ 编程语言 C语言 5月月更

十、高可用之应急预案

穿过生命散发芬芳

5月月更 高可用设计

数字化转型的理论体系与具体技术

小炮

数字化转型

数据仓库ETL管理平台TASKCTL调度计划控制原理

敏捷调度TASKCTL

程序员 DevOps 分布式 数据仓库 ETL

基于 Agora SDK 实现 iOS 端的多人视频互动

RTE开发者社区

视频 SDK教程

druid源码阅读1——获取连接与释放连接

张大彪

在线2进制8进制10进制16进制进制转换工具

入门小站

工具

SOFA Serverless 体系助力业务极速研发

SOFAStack

开源 Serverless springboot GitHub、 SOFA

40万年才能遇到外星人,是怎么算出来的?

脑极体

深入了解 Flutter 的状态管理机制(下)

岛上码农

flutter 移动端 安卓开发 ios 开发 5月月更

Hadoop WordCount案例

Emperor_LawD

hadoop 5月月更

架构实战训练营毕业设计

刘帅

区块链将掀开人类的新时代

CECBC

iframe框架

恒山其若陋兮

5月月更

厚积薄发——开源公司商业化之路

CnosDB

IoT 时序数据库 开源社区 CnosDB infra

Web常见的漏洞描述与修复方案

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

5月硬核预告!明晚开讲:Virtio 虚拟化技术趋势与 DPU 实践 | 第16 期

OpenAnolis小助手

云计算 直播 虚拟化 龙蜥社区 龙蜥大讲堂

一文看懂Web3.0:元宇宙的基础设施,三大标签颠覆互联网

CECBC

小红书持续打击炫富行为:自媒体行业不能违背公序良俗

石头IT视角

元宇宙现阶段都支持哪些接入现实的活动?

CECBC

Native Flink on Kubernetes 在小红书的实践

Apache Flink

大数据 flink 编程 流计算 实时计算

【愚公系列】2022年05月 二十三种设计模式(十)-外观模式(Facade Pattern)

愚公搬代码

5月月更

架构实战训练营毕业总结

刘帅

linux之history使用技巧

入门小站

Linux

玩了一场剧本杀,同车队友“不是人”

白洞计划

根因分析思路方法总结|保障IT系统及其稳定性

云智慧AIOps社区

算法 监控 根因分析 智能运维

真正深入底层!阿里巴巴2022最新版JDK源码剖析笔记太香了

Java全栈架构师

Java 源码 jdk 面试 程序人生

Web3:创作者经济的黄金时代

CECBC

数据仓库规范的重要性

奔向架构师

数据仓库 5月月更

Alpine Linux,一个只有5M的Docker镜像_语言 & 开发_金灵杰_InfoQ精选文章