已知内核是和宿主机共用。那那些依托于高内核或特定内核版本才支持的 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 ?
1
julyclyde 2022-12-19 17:55:15 +08:00
你问的这些其实和泛泛的镜像这个词没什么关系啊
和里面的内容有关啊 |
2
dzdh OP @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 (只是假设)? 存在如上这种说法吗? |
3
wangwcq 2022-12-19 21:30:53 +08:00 1
不同的 base image 最明显的体验就是系统大小和包管理器吧。比如 nodejs ,如果就一个 node 的服务就选 alpine 的 image ,因为小,编译快传输快。如果复杂一点,一个服务节点上还需要安装 nginx ,tensorflow ,python ,imagemagik ,那就要上 ubuntu 的 image 了。然后有的时候还要调整时区,或者调用系统的 shell ,每个系统的命令写法都不太一样,业务系统的逻辑就和操作系统强关联了。各大语言在 docker hub 的官方 image 都尽可能给了不同的操作系统也是说明都能支持,同时考虑到了各自的历史习惯和包管理器的依赖吧
|