一尘不染

Docker如何处理不同的内核版本?

docker

假设我为使用版本10内核的OS制作了一个映像,如果我在运行版本9内核的主机OS上为该映像运行一个容器,那么Doc​​ker会表现出什么行为?那版本11呢?

版本的向后兼容性重要吗?我出于好奇而问,因为文档仅讨论“最低Linux内核版本”等。这听起来像主机运行的内核版本超出该最低值无关紧要。这是真的?有警告吗?


阅读 1978

收藏
2020-06-17

共1个答案

一尘不染

假设我为使用版本10内核的操作系统制作映像。

我认为这是一个误解,除非您正在谈论依赖于Docker映像内较新内核功能的特定软件,这种情况很少见。一般而言,Docker映像只是一个自定义文件/目录结构,通过一个或多个命令FROMRUN指令以层的形式进行组装Dockerfiles,并带有一些元数据,例如打开哪个端口或在容器启动时执行哪个文件。这就是全部。Docker的基本原理与经典的chroot监狱非常相似,只是更现代一些,顶部还有一些糖果。

如果我在运行版本9内核的主机OS上为该映像运行一个容器,Docker会表现出什么行为?那版本11呢?

如果内核可以运行Docker守护程序,则它应该可以运行任何映像。

有警告吗?

如上所述,包含依赖于最新内核功能的软件的Docker映像将无法在不具有这些功能的内核上运行,这不足为奇。Docker不会阻止您在较旧的内核上运行这样的映像,因为它根本不在乎映像中的内容,也不知道使用了哪个内核来创建映像。

我唯一能想到的是针对特定的CPU(例如Intel或Amd)手动进行积极的优化编译软件。这样的映像将在具有不同cpu的主机上失败。

2020-06-17