我曾以为我理解了Docker,直到我看到BusyBox Docker镜像。

69

我以为我理解Docker了。我理解它是一种打包软件及其大量依赖项的方式...基本上创建了一个小世界,在那里为一款软件处理绝对一切。然后我在DockerHub上偶然发现了这个:

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

这是 BusyBox 的镜像,它是为嵌入式系统设计的一个微型的Linux二进制文件。但是顶部的评论说:

Busybox很棒:)在整个注册表中,按字节计算最有用的容器。

但我完全不明白为什么需要这个镜像,这让我想到我实际上并不理解Docker存在的原因。BusyBox docker镜像的目的是什么?


7
如果你认为人们只会创造有用的东西,并且他们从不使用讽刺来描述他们所创造的东西... - Charles Duffy
5
Busybox容器是一款瑞士军刀式的工具,可以帮助您诊断Docker网络问题。 - Ivan Aracki
3
我仅凭标题就收藏了这个问题 :) - Dark Star1
3个回答

46
一个Busybox Docker镜像非常有用,如果你正在构建一个容器,并且只需要Busybox来满足其依赖关系链而不需要完整的Linux发行版。
通常,嵌入式应用可能仅由静态链接的Busybox副本、一个挂载procfs、sysfs等文件系统的init脚本和实际被调用的应用程序组成。通过Docker设置文件系统命名空间,即使是那个init脚本也不一定需要。

3
我明白了。所以你是在说Docker有一些我不理解的深层次的东西。你是在说你将busybox镜像作为另一个更大的Docker镜像的一部分使用? - techgnosis
8
你们几乎所有公共Docker镜像都是作为基础镜像来使用的。 - Charles Duffy
3
所以,你需要使用公共的Debian X.Y镜像,并告诉Docker想要在其中添加额外文件/安装软件包/将主机中的某些内容绑定到其中,然后这就是你真正的应用程序容器。 - Charles Duffy
3
在这里,你只需要一个比Debian/Ubuntu/CentOS等发行版更轻、更薄的基础环境。 - Charles Duffy
7
哦,我明白了。事后看来这是显而易见的。你说的是使用“FROM busybox”而不是从一个更大的Linux发行版中获取。这样做非常有道理。我之前搞混了… - techgnosis
显示剩余4条评论

20

除了作为其他docker镜像的方便基础之外,Busybox 还非常适合用作kubernetes的方便initContainer: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/

举个例子,官方的redis镜像不会以root身份运行redis,因此无法访问文件系统。如果你要运行备份到磁盘(例如以appendonly模式运行)的redis,那么就需要打开该磁盘权限。

一个有效(尽管可能有些 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

2
但为什么不使用Alpine呢? - Qiulang
1
在这个例子中,我想没有什么特别的原因。两者都可以使用。 - Charlie Gildawie
我问了一个类似的问题 https://dev59.com/f1EG5IYBdhLWcg3wWa9H - Qiulang

6

但是我完全不明白为什么需要这个镜像,这让我认为我实际上并不理解Docker的存在意义。BusyBox Docker镜像的用途是什么?

我刚开始使用带有Docker的BusyBox,到目前为止,它与 --rm 命令一起使用非常方便,可以创建未保存的实例,并且具备常见的内置实用程序,例如 ping,目前只用到ping:/

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

然后,BusyBox 中的所有实用工具都可以在该 Docker 自定义网络上使用,并且当您退出 BusyBox CLI 时会立即销毁。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接