容器镜像:Alpine vs Busybox,谁才是容器镜像中的 「瑞士军刀」?

olei 2,790 views 2

容器镜像:Alpine vs Busybox,谁才是容器镜像中的「瑞士军刀」?

AlpineBusybox 介绍

Busybox

BusyBox 是一个集成了一百多个最常用 Linux 命令和工具的软件。BusyBox 包含了一些简单的工具,例如 lscatecho 等等,还包含了一些更大、更复杂的工具,例 grepfindmount 以及 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 libcbusybox,和 busybox 一样小巧,最小的 Docker 镜像只有 5MB
2、安全:面向安全的轻量发行版;
3、简单:提供 APK 包管理工具,软件的搜索、安装、删除、升级都非常方便;
4、适合容器使用:由于小巧、功能完备,非常适合作为容器的基础镜像。

  • Alpine Linux 是一个完整的操作系统,像其他操作系统一样,可以将 Alpine 安装到本地硬盘中。

AlpineBusybox 镜像介绍

大多数情况下,我们构建容器镜像时选择的基础镜像无外乎是 busyboxalpine 这几种,这几个基础镜像在云原生的世界很吃香,被广泛应用于各个应用的容器化。

  • 那么问题来了,为什么这几个基础镜像如此受欢迎呢?
  • 我们先来看下这几个基础镜像的大小:
    容器镜像:Alpine vs Busybox,谁才是容器镜像中的「瑞士军刀」?
    可以看到这些镜像的体积都非常小,几乎可以忽略不计

Busybox 镜像

  • 先启动一个 Busybox 容器进去一探究竟
    容器镜像:Alpine vs Busybox,谁才是容器镜像中的「瑞士军刀」?

这个镜像的大小只有 1.24MB,缺容纳了这么多 GNU 命令,麻雀虽小五脏俱全啊,这到底是怎么做到的?

  • 事实上这一切都要归功于 Multi-Call binary。什么是 Multi-Call binary 呢?
    顾名思义,Multi-Call binary 就是多重调用二进制文件,是一个用 C 语言编写的程序,它允许多次调用来执行二进制文件。它包含了很多函数,每个执行独特动作的函数都可以通过一个名字来调用,这个名字同时也是 Multi-Call binary 的一个符号链接。Multi-Call binary 最好的应用范例便是 Busybox
  • Busybox 里面的函数可以通过两种方式来调用
    • busybox ls
    • ls
      容器镜像:Alpine vs Busybox,谁才是容器镜像中的「瑞士军刀」?
  • 很明显,这些不是我们所熟知的 GNU 二进制文件,因为所有的二进制文件都具有相同的属性,比如大小、日期等。这些都不是独立的二进制文件,而是 Multi-Call binary 每个调用函数的别名。这个 Multi-Call binary 就叫 Busybox
  • 遗憾的是,这些 Busybox 命令并不完全等同于 GNU 命令,某些命令的某些参数是无法执行的,相当于阉割版

Alpine 镜像

  • 看完了 Busybox,我们再来看看 Alpine 是怎么做的
    容器镜像:Alpine vs Busybox,谁才是容器镜像中的「瑞士军刀」?

巧了,Alpine 的二进制文件竟然是指向 busybox 二进制文件的,这就很明显了,Alpine 镜像的底层使用了 busybox 二进制文件。除此之外,Alpine 还包含了 apk 包管理器和一些额外的可执行文件,所以 Alpine 镜像的体积才会比 Busybox


总结

由此看来,这几个基础镜像如此受欢迎的主要原因就是体积小。镜像越小,漏洞就越少,可攻击面也会大幅减少,而且很容易维护。所以大家构建镜像时尽量选择这些镜像作为基础镜像。

  • 比较全的还得是 Alpine,自我感觉它才是容器镜像的 「瑞士军刀」,但相比较,比 busybox 大了一些,但也就大那么点儿而已,是吧

发表评论 取消回复
表情 图片 链接 代码

  1. 757907765
    757907765 Lv 1

    感谢介绍,不过第一小节的标题是不是写反了啊?

    • olei
      olei 站长

      @757907765 啊,对对对,感谢指正~

分享