BusyBox docker 镜像有什么意义?

问题描述 投票:0回答:4

我以为我了解 Docker。我将其理解为一种打包具有大量依赖项的软件的方法......基本上创建一个小世界,在这个小世界中,一个软件的所有内容都得到了照顾。然后我在 DockerHub 上偶然发现了这个

https://hub.docker.com/_/busybox/

这是 BusyBox 的图像,这是一个用于嵌入式系统的小型 Linux 二进制文件。然后置顶评论说:

Busybox 非常棒:) 迄今为止,整个注册表中每字节最有用的容器。

但是我完全不明白为什么这个镜像会存在,这让我觉得我其实并不明白Docker为什么存在。 BusyBox docker 镜像有什么意义?

docker busybox
4个回答
49
投票

如果正在构建一个容器,而 busybox 可以在不需要完整的 Linux 发行版的情况下实现其依赖链,则 Busybox docker 映像非常有用。

通常,嵌入式设备只包含 busybox 的静态链接副本、安装 procfs、sysfs 等的 init 脚本。使用 busybox 提供的工具,然后调用实际的应用程序。通过 docker 设置文件系统名称空间,甚至不一定需要初始化脚本。


21
投票

除了作为其他 docker 镜像使用的便捷基础之外。 Busybox 还为 kubernetes 提供了非常方便的

initContainer
https://kubernetes.io/docs/concepts/workloads/pods/init-containers/

假设您需要在您的 real 容器开始运行之前设置 pod 文件系统,那么 busybox 就很擅长此..

作为一个具体示例,官方

redis
映像不会以 root 身份运行 redis,因此它无法访问文件系统。如果您正在运行带有磁盘备份的 Redis(例如,在
appendonly
模式下),您将需要为其打开该磁盘权限。

一个有效的(虽然可能是 hacky 的)redis statefulSet 的 initContainer 可能看起来像这样:

      initContainers:
      - name: redis-data-permission-fix
        image: busybox
        command: ["/bin/chmod", "-R", "777", "/opt/data/redis"]
        volumeMounts:
        - name: data
          mountPath: /opt/data/redis

6
投票

但是我完全不明白为什么这个镜像会存在,这让我觉得我其实并不明白Docker为什么存在。 BusyBox docker 镜像有什么意义?

我刚刚开始在 docker 中使用 BusyBox,但到目前为止,使用 --rm 命令来使用常见的内置实用程序(如 ping)创建未保存的实例非常方便,是的,到目前为止只需 ping :/

docker container run --rm -it --network [network_name] busybox

然后 BusyBox 中的所有这些实用程序都可以在该 docker 自定义网络上使用,并在您

退出 BusyBox CLI 时立即销毁


0
投票
对我来说这只是一个轻量级的 Linux 文件系统镜像。我将它用于教育目的,但没有构建一个完整的 Linux 实例。

© www.soinside.com 2019 - 2024. All rights reserved.