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

olei 2,698 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

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

分享