Alpine 与 Busybox 介绍
Busybox
BusyBox 是一个集成了一百多个最常用 Linux 命令和工具的软件。BusyBox 包含了一些简单的工具,例如 ls、cat 和 echo 等等,还包含了一些更大、更复杂的工具,例 grep、find、mount 以及 telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说 BusyBox 就好像是个大工具箱,它集成压缩了 Linux 的许多工具和命令,也包含了 Android 系统的自带的 shell
Alpine
Alpine的意思是 「高山的」,比如Alpine plants高山植物,Alpine skiing高山滑雪、the alpine resort阿尔卑斯山胜地。
Alpine Linux网站首页注明 「Small!Simple!Secure!Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.」概括了以下特点:
1、小巧:基于 Musl libc 和 busybox,和 busybox 一样小巧,最小的 Docker 镜像只有 5MB;
2、安全:面向安全的轻量发行版;
3、简单:提供 APK 包管理工具,软件的搜索、安装、删除、升级都非常方便;
4、适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像。
Alpine Linux是一个完整的操作系统,像其他操作系统一样,可以将Alpine安装到本地硬盘中。
Alpine 与 Busybox 镜像介绍
大多数情况下,我们构建容器镜像时选择的基础镜像无外乎是 busybox、alpine 这几种,这几个基础镜像在云原生的世界很吃香,被广泛应用于各个应用的容器化。
Busybox 镜像
这个镜像的大小只有 1.24MB,缺容纳了这么多 GNU 命令,麻雀虽小五脏俱全啊,这到底是怎么做到的?
- 事实上这一切都要归功于
Multi-Call binary。什么是Multi-Call binary呢?
顾名思义,Multi-Call binary就是多重调用二进制文件,是一个用 C 语言编写的程序,它允许多次调用来执行二进制文件。它包含了很多函数,每个执行独特动作的函数都可以通过一个名字来调用,这个名字同时也是Multi-Call binary的一个符号链接。Multi-Call binary最好的应用范例便是Busybox Busybox里面的函数可以通过两种方式来调用
- 很明显,这些不是我们所熟知的
GNU二进制文件,因为所有的二进制文件都具有相同的属性,比如大小、日期等。这些都不是独立的二进制文件,而是Multi-Call binary每个调用函数的别名。这个Multi-Call binary就叫Busybox。- 遗憾的是,这些
Busybox命令并不完全等同于GNU命令,某些命令的某些参数是无法执行的,相当于阉割版
Alpine 镜像
巧了,
Alpine的二进制文件竟然是指向busybox二进制文件的,这就很明显了,Alpine镜像的底层使用了busybox二进制文件。除此之外,Alpine还包含了apk包管理器和一些额外的可执行文件,所以Alpine镜像的体积才会比Busybox大
总结
由此看来,这几个基础镜像如此受欢迎的主要原因就是体积小。镜像越小,漏洞就越少,可攻击面也会大幅减少,而且很容易维护。所以大家构建镜像时尽量选择这些镜像作为基础镜像。
- 比较全的还得是
Alpine,自我感觉它才是容器镜像的 「瑞士军刀」,但相比较,比busybox大了一些,但也就大那么点儿而已,是吧
本文作者为 olei,转载请注明。





感谢介绍,不过第一小节的标题是不是写反了啊?
@757907765 啊,对对对,感谢指正~