Docker 容器镜像 alpine VS Ubuntu 的竞争

2021-11-24 22:29:39 +08:00
 programV2

<div class="markdown_body">
最下面的链接 是三年前 reddit 论坛有讨论将 alpine 作为基础镜像, 如今已经实现被推荐作为 Docker 官方基础镜像。。想请教各位:
1 、回帖中提到的那些 alpine 的缺陷是否已解决? 比如它的 musl libc 是不是还会有很多坑?
2 、现在 alpine 还有哪些库没有,但是也没办法自己手动编译安装的?
3,你们在构建 docker 基础镜像的话会如何选择?


https://www.reddit.com/r/docker/comments/b6gk1x/why_use_ubuntu_as_base_image_when_alpine_exists/

谢谢🙏
</div>

3444 次点击
所在节点    程序员
32 条回复
programV2
2021-11-24 23:16:39 +08:00
谢谢
Tink
2021-11-25 00:12:37 +08:00
这几天正好在用 mqtt ,所以需要在 docker 里构建 mosquito ,alpine 和 ubuntu 都试了,alpine 很奇怪的是,verbose 模式下拿不到任何 log ,也不知道是我没搞对还是咋回事,就很难受
LokiSharp
2021-11-25 09:00:08 +08:00
用 Debian 还挺好的
cokyhe
2021-11-25 09:25:05 +08:00
项目能用 alpine 就用 alpine ,不行就改 ubuntu ,不和自己过不去
programV2
2021-11-25 09:44:30 +08:00
@cokyhe 大佬 请问你优先用 alpine 如何避开 musl 的问题?
liuxu
2021-11-25 09:45:35 +08:00
1. 一把年纪了,是该自己学会 google 了
2. 都能编译
3. 常用 alpine ,目前制作 docker image 最小方案有 2 种,一种是在 gentoo 下用 kubler 这类交叉编译工具制作目标系统 tar 包然后生成 docker image ;还有一种方式就是通过 alpine ,我实际测试来看 alpine 有时候比 gentoo 下自己制作的包还要小,而且编译时间 10 倍缩减


@Tink 日常通用方式是 ln -sf /proc/$$/fd/1 verbose.log ,然后进程输入日志到这个文件,还有问题的话看看配置是不是弄错了
billzhuang
2021-11-25 09:48:50 +08:00
我最近钟意 google 的 distroless
bao3
2021-11-25 09:58:58 +08:00
无论用哪个系统做底包,它们都是工具,哪个顺手你就用哪个。因噎废食就搞反了
afirefish
2021-11-25 09:59:04 +08:00
debian 11 ,虽然没有 alpine ,但是包比较全,没有太多坑。
SmiteChow
2021-11-25 10:12:51 +08:00
当然是 Ubuntu ,你就缺那点空间还是网速?
hwdef
2021-11-25 10:48:15 +08:00
能用 alpine 的就用 alpine ,如果用到了 musl ,就换 ubuntu.
programV2
2021-11-25 11:11:26 +08:00
@hwdef 关键是你不知道用到的哪个依赖包可能有用到 MUSL ? 想要排错都很困难。
programV2
2021-11-25 11:19:00 +08:00
@liuxu 谢谢大佬回复。 请问
1 ,你在实际使用中没有碰到 musl 带来的问题吗?
2 ,Ubuntu 的库是不是比 alpine 要全一些?
joesonw
2021-11-25 11:59:24 +08:00
liuxu
2021-11-25 12:29:30 +08:00
@programV2

1. 没有
2. alpine 和其他系统最大的不同是系统命令用的 busybox ,没有杂七杂八的 lib, include ,很干净
liuxu
2021-11-25 12:33:18 +08:00
@programV2 还有一点,默认官方库只有 main ,其实还可以添加 testing ,根据我使用 swoole 来看,实际上 testing 只是帮你手动编译了而已
programV2
2021-11-25 12:38:26 +08:00
@joesonw 这个很少看到有人用啊。请问你使用过体验怎么样?
programV2
2021-11-25 12:48:05 +08:00
@liuxu 谢谢大佬。我贴一段论坛很多人提到的问题,想听听您的看法。: "Musl has different malloc, different libm, different pthreads. These things all will impact performance in some way (maybe better, maybe worse), and will hit implementation bugs in libraries at some point because someone coded too specifically against glibc. This + development time tradeoff risk doesn’t seem worthwhile, especially in data science where many libraries are needed and the library quality varies so wildly and often aren’t even portable beyond one specific version of one specific Linux distribution"
@liuxu
@liuxu
liuxu
2021-11-25 13:02:06 +08:00
@programV2

首先要说一下你的账号被降权了,你 at 人实际上别人是没有提醒的,我是重新点回了这个帖子看到你 at 我的楼层才回复你的

musl 可能是有兼容问题,但是你确定你会遇到么,实际上就算你用 glibc ,也是有 bug 的,但你遇到过么。
目前从 docker hub 看,基本上所有常用的服务类基础软件都会有基于 alpine 的镜像,nginx,php,mysql,redis ,既然都在基于 alpine 做镜像,你在担心什么
jellyspot
2021-11-25 13:30:07 +08:00
alpine 就一个 dns 问题,好多新手都能整蒙,因为大家用的其他系统,都是 glibc 的,但是 alpine 是 musl

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/817762

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX