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。
答案 0 :(得分:2)
它们之间的主要区别在于旧版本的 busybox
图像静态将 busybox 与 glibc 链接起来(当前版本由于使用 libnss 甚至在静态配置中动态地将 busybox 与 glibc 链接) ,而 alpine
图像动态链接到 musl libc。
详细讨论用于在这些因素之间进行选择的权重因子将是题外话(软件推荐请求),但有一些关键点:
将 glibc 与 musl libc 进行比较,有几个要点(当然还有许多其他因素):
比较静态构建与动态构建的优势:
老实说,这两个图像本身并没有覆盖整个可能性矩阵空间;在某些情况下,它们都不是最佳的。拥有一个只包含 静态 链接到 musl libc 的 busybox 的图像(如果你要添加的所有东西都是非 C 语言的),或者一个带有 busybox 的图像是有价值的>动态针对 glibc 的链接(如果您要添加更多需要 libc 且与 musl 不兼容的二进制文件)。