在我看到BusyBox docker image

时间:2015-10-22 21:56:30

标签: docker busybox

我以为我了解Docker。我把它理解为一种打包具有大量依赖性的软件的方法......基本上创造了一个小小的世界,绝对一切都是为一块软件而处理的。然后我在DockerHub上偶然发现了这个

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

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

  

Busybox很棒:)到目前为止整个注册表中每个字节最有用的容器。

但我完全不理解为什么这个图像存在,这让我觉得我实际上并不理解为什么Docker存在。 BusyBox docker图像有什么意义?

2 个答案:

答案 0 :(得分:12)

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

通常,嵌入式设备只能由busybox的静态链接副本,一个安装procfs,sysfs和c的init脚本组成。使用busybox提供的工具,然后调用实际的应用程序。使用docker设置文件系统命名空间,即使不一定需要init脚本。

答案 1 :(得分:0)

除了是方便用于其他Docker映像的基础之外。 Busybox还为kubernetes提供了一个非常方便的initContainerhttps://kubernetes.io/docs/concepts/workloads/pods/init-containers/

假设您需要进行一些操作,以在您的 real 容器开始运行之前设置pod文件系统,然后busybox非常有用。

作为一个具体示例,官方redis映像不会以 root 身份运行redis,因此它无法访问文件系统。如果您正在使用磁盘备份运行Redis(例如,在appendonly模式下),则需要为其打开磁盘许可。

一个有状态的Redis集合的有效(虽然可能是hacky)的initContainer可能看起来像这样:

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