基于容器运行程序使用不同的基础镜像有什么本质上的区别吗

2022-12-19 14:09:42 +08:00
 dzdh

已知内核是和宿主机共用。那那些依托于高内核或特定内核版本才支持的 OS 层的特性就不用考虑也不用想了这没得说。

疑问是 比如像 java 程序,依赖的 jdk 版本比如都是 11, 那 ubuntu 和 11jdk 和 rhel 的 11jdk 一样么?比如在安全和稳定性上。记得有过暴什么漏洞 rhel 没发布补丁,ubuntu 发布了,是因为 rhel 在发行 11jdk 之初就做过修改么?规避了?一句话就是 rhel 的部分软件包是有做过修改后才发布的 rpm ?

再比如 libc 就不是和内核公用的了吧?有没有啥说法是 rhel 的 ubi 镜像使用 rhel 的 repo 然后某些软件包可能更安全稳定的?

比如要搞 tensorflow ,那 docker 里就跑 ubuntu 。要搞 java 的那就用 rhel-ubi 。要搞 php 那就用 debian ?

1300 次点击
所在节点    Docker
4 条回复
julyclyde
2022-12-19 17:55:15 +08:00
你问的这些其实和泛泛的镜像这个词没什么关系啊
和里面的内容有关啊
dzdh
2022-12-19 20:16:56 +08:00
@julyclyde

因为运行不同的程序一定要基于某一个 base 镜像,直接基于 scratch 或者 busybox 自己编译 jdk 显然不现实。

那现成可选的无非就是几大发行版,譬如 rhel/ubuntu/debian/opensuse 等。用到这些发行版作为 base image 的同时,势必要依赖其的包管理器,也势必依赖自带的包内容和质量。

再加上软件依赖如 tensorflow 官方软件包支持 Ubuntu 、Windows 和 macOS 。那就必然只能选择 ubuntu 作为 base image 。

所以问题是,针对不同的程序(按语言分 java/go/rust/php/python 等等),是否存在某个发行版作为 BaseImage 更契合的说法呢?

再比如是否 rhel/ubuntu/debian/opensuse 在某些方向上会更加专注和擅长?比如 rhel 可能更专注 java 这种所谓企业级语言的基础环境包的更新和安全维护所以 java 系尽量选 rhel ,ubuntu 在 python 方面更频繁的更新和安全维护所以 python 程序就选 ubuntu (只是假设)?

存在如上这种说法吗?
wangwcq
2022-12-19 21:30:53 +08:00
不同的 base image 最明显的体验就是系统大小和包管理器吧。比如 nodejs ,如果就一个 node 的服务就选 alpine 的 image ,因为小,编译快传输快。如果复杂一点,一个服务节点上还需要安装 nginx ,tensorflow ,python ,imagemagik ,那就要上 ubuntu 的 image 了。然后有的时候还要调整时区,或者调用系统的 shell ,每个系统的命令写法都不太一样,业务系统的逻辑就和操作系统强关联了。各大语言在 docker hub 的官方 image 都尽可能给了不同的操作系统也是说明都能支持,同时考虑到了各自的历史习惯和包管理器的依赖吧
julyclyde
2022-12-20 09:47:05 +08:00
@dzdh 并不一定要基于一个
想想世界上第一个镜像是基于谁呢

一般容器的生命周期就几天,所以你其实不必关心镜像 base 里那个操作系统的发展,只需要关注“这个版本的镜像”能否满足当下的需求即可

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

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

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

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

© 2021 V2EX