14

如果我的程序依赖于内核库的某个函数,而该函数又具有一系列依赖关系,那么 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 了解不多,所以这是一个新手问题。

4

1 回答 1

18

没有“内核库”之类的东西。与您所描述的最接近的是:

  • libc,它是容器镜像的一部分,因此不会改变。

  • Linux 内核 ABI,基本上是不变的。虽然偶尔会对内核 ABI 进行一些更改,但尽可能少地这样做——内核开发人员尽一切可能保持向后兼容性。在进行更改的地方,最常见的是与容器中运行的应用程序无关的组件(例如,音频/视频输出、动态设备管理等)。

于 2013-07-29T21:42:41.050 回答