我以为我了解 Docker。我将其理解为一种打包具有大量依赖项的软件的方法......基本上创建一个小世界,在这个小世界中,一个软件的所有内容都得到了照顾。然后我在 DockerHub 上偶然发现了这个
https://hub.docker.com/_/busybox/
这是 BusyBox 的图像,这是一个用于嵌入式系统的小型 Linux 二进制文件。然后置顶评论说:
Busybox 非常棒:) 迄今为止,整个注册表中每字节最有用的容器。
但是我完全不明白为什么这个镜像会存在,这让我觉得我其实并不明白Docker为什么存在。 BusyBox docker 镜像有什么意义?
如果正在构建一个容器,而 busybox 可以在不需要完整的 Linux 发行版的情况下实现其依赖链,则 Busybox docker 映像非常有用。
通常,嵌入式设备只包含 busybox 的静态链接副本、安装 procfs、sysfs 等的 init 脚本。使用 busybox 提供的工具,然后调用实际的应用程序。通过 docker 设置文件系统名称空间,甚至不一定需要初始化脚本。
除了作为其他 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
但是我完全不明白为什么这个镜像会存在,这让我觉得我其实并不明白Docker为什么存在。 BusyBox docker 镜像有什么意义?
我刚刚开始在 docker 中使用 BusyBox,但到目前为止,使用 --rm 命令来使用常见的内置实用程序(如 ping)创建未保存的实例非常方便,是的,到目前为止只需 ping :/
docker container run --rm -it --network [network_name] busybox
然后 BusyBox 中的所有这些实用程序都可以在该 docker 自定义网络上使用,并在您
退出 BusyBox CLI 时立即销毁