如果我的程序依赖于内核库的某些功能,并且该函数又具有一系列依赖关系,那么docker如何保持小型和可移植性而无需获取所有内核库的快照(以及管理函数的依赖性问题)而不是图书馆水平)?换句话说,它是如何将内核库中的更改从一个版本隔离到另一个版本,并且它是在库或函数粒度下进行的吗?
此外,如果我的应用程序有一个软件堆栈,例如一个函数与未来版本的内核库A兼容,而另一个使用内核库A的函数不再兼容。换句话说:
函数1和2都依赖于并使用内核Lib A版本1.0中的函数
函数1适用于Lib A 1.1版 功能2打破Lib A版本1.1(功能2仍然需要Lib A版本1.0)
我对Docker了解不多,所以这是一个新手问题。
答案 0 :(得分:17)
没有“内核库”这样的东西。与您描述的最接近的是:
libc
,它是容器图像的一部分,因此不会更改。
Linux内核ABI,它基本上是不变的。虽然偶尔会对内核ABI进行一些更改,但这是尽可能少地完成的 - 内核开发人员尽一切可能保持向后兼容性。在进行更改的地方,最常见的是与容器中运行的应用程序无关的组件(例如,音频/视频输出,动态设备管理等)。