在我看到BusyBox docker图像之前,我以为我理解了Docker

tec*_*sis 25 busybox docker

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

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

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

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

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

Cha*_*ffy 20

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

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

  • 我知道了。所以我对 Docker 有一些很深的理解。您是说您将 busybox 图像用作另一个更大的 docker 图像的一部分吗? (3认同)
  • 几乎所有*您的公共docker映像都打算用作基础。 (3认同)
  • 哦,呃.事后来看,这是显而易见的.你说的是"FROM busybox"而不是更胖的Linux发行版.这很有道理.我很困惑...... (3认同)
  • ...因此,您获取公共的Debian XY映像,告诉Docker您想为其添加一个额外的文件/在其上安装一个包/将主机中的某些内容绑定装入其中,然后这就是您的实际应用程序容器。 (2认同)
  • ...在这里,您所拥有的东西比Debian / Ubuntu / CentOS / etc更轻,更薄。基础。 (2认同)

小智 14

除了作为用于其他 docker 图像的方便基础之外。Busybox 还initContainer为 kubernetes 提供了非常方便的功能:https ://kubernetes.io/docs/concepts/workloads/pods/init-containers/

假设您需要在真正的容器开始运行之前设置 pod 文件系统,然后busybox 在这方面做得很好。

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

一个用于 redis 的 statefulSet 的有效(虽然可能是 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
Run Code Online (Sandbox Code Playgroud)

  • 但为什么不使用 alpine 呢? (2认同)

sko*_*ari 6

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

我刚刚开始将 BusyBox 与 docker 一起使用,但到目前为止,使用 --rm命令使用常见的内置实用程序(如ping )创建未保存的实例已经很方便了,是的,到目前为止只是 ping :/

docker container run --rm -it --network [network_name] busybox
Run Code Online (Sandbox Code Playgroud)

然后 BusyBox 中的所有这些实用程序都可以在该 docker 自定义网络上使用,并在退出BusyBox CLI时立即销毁