【发布时间】:2021-08-04 07:35:22
【问题描述】:
alpine docker 图像和busybox docker 图像有什么区别?
当我检查他们的停靠文件时,alpine is like this(适用于 Alpine v3.12 - 3.12.7)
FROM scratch
ADD alpine-minirootfs-3.12.7-x86_64.tar.gz /
CMD ["/bin/sh"]
FROM scratch
ADD busybox.tar.xz /
CMD ["sh"]
但正如https://alpinelinux.org/about/ 所说
Alpine Linux 是围绕 musl libc 和 busybox 构建的。
那么到底有什么区别呢?
我也很好奇许多 docker 镜像(nodejs/nginx/php 仅举几例)提供基于 alpine 而不是busybox 的镜像。这是为什么 ? busybox 图片的用例是什么?我需要强调的是,我不是在寻找关于为什么 A 比 B 更好或反之亦然或软件推荐的答案。
我的 alpine docker 遇到了间歇性 DNS 查找失败,就像这里的 musl-libc - Alpine's Greatest Weakness 和这里的 Does Alpine have known DNS issue within Kubernetes? 所说的那样。这是我提出问题的原因之一。
PS,https://musl.libc.org/ 说“musl 是基于 Linux 系统调用 API 构建的 C 标准库的实现”,https://en.wikipedia.org/wiki/Alpine_Linux 也提到了
它以前使用 uClibc 作为其 C 标准库,而不是 最常用的传统 GNU C 库 (glibc)。虽然它是 更轻巧,它确实有一个显着的缺点是 二进制与 glibc 不兼容。因此,必须编译所有软件 与 uClibc 一起使用才能正常工作。截至 2014 年 4 月 9 日,[16] 阿尔派 Linux 切换到 musl,它部分二进制兼容 glibc。
【问题讨论】:
-
busybox镜像是针对哪个 libc 构建的?我们需要分析busybox.tar.xz才能知道。 -
如果它是静态链接的,我不会感到惊讶,但即便如此,静态链接的 glibc 和静态链接的 musl 之间的大小差异很大。基本上,
busybox.tar.xz是如何构建的需要成为问题才能回答。 -
(请注意,我认为这个问题可能是题外话,因为它是在两个替代软件之间“寻求建议”;此外,对它们之间不同之处的分析不是狭隘的或具体的因此可以说“过于宽泛”,而且随着新版本的推出可能会发生变化)。
-
但我真的没有寻找建议(任何东西)。我就是想知道busybox docker的用例。
-
...如果
alpine提供musl 作为共享库并且busybox静态链接musl,这意味着当您添加其他共享库时alpine可以生成更小的图像,但是busybox将会更小——如果这种猜测是真的,那么只有当你添加不需要更多编译二进制文件的 shell 脚本之类的东西(至少,不需要编译的二进制文件)时,它才会使busybox更有效率需要一个 libc)。
标签: linux docker alpine busybox