我以为我了解Docker。我把它理解为一种打包具有大量依赖性的软件的方法......基本上创造了一个小小的世界,绝对一切都是为一块软件而处理的。然后我在DockerHub上偶然发现了这个
https://hub.docker.com/_/busybox/
它是BusyBox的一个图像,它是一个用于嵌入式系统的小型Linux二进制文件。然后最热门的评论说:
Busybox很棒:)到目前为止整个注册表中每个字节最有用的容器。
但我完全不理解为什么这个图像存在,这让我觉得我实际上并不理解为什么Docker存在。 BusyBox docker图像有什么意义?
答案 0 :(得分:12)
如果构建一个容器,busybox可以在不需要完整的Linux发行版的情况下实现其依赖关系链,那么Busybox docker镜像非常有用。
通常,嵌入式设备只能由busybox的静态链接副本,一个安装procfs,sysfs和c的init脚本组成。使用busybox提供的工具,然后调用实际的应用程序。使用docker设置文件系统命名空间,即使不一定需要init脚本。
答案 1 :(得分:0)
除了是方便用于其他Docker映像的基础之外。 Busybox还为kubernetes提供了一个非常方便的initContainer
:https://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