2013-07-29 39 views
10

如果我的程序依賴於內核庫的某些功能,並且該函數又有一系列依賴關係,那麼docker如何保持小型和便攜性,而不需要創建所有的快照內核庫(以及在函數而不是庫級別管理依賴項問題)?換句話說,它是如何將內核庫中的更改從一個版本變爲另一個版本的,並且它是否在庫或函數格式化中這樣做?如果內核庫改變,Docker如何允許可移植容器

另外如果我的應用程序有一個軟件堆棧,例如一個函數與未來版本的內核庫A兼容,而另一個使用內核庫A的函數不再兼容。換句話說:

功能1 & 2都依賴於和內核庫與功能的工作版本1.0

功能1只適用於庫一個版本1.1 功能2個斷裂與庫一個版本1.1(功能2仍需要Lib A版本1.0)

我對Docker瞭解不多,所以這是一個新手問題。

回答

15

沒有「內核庫」這樣的東西。最接近的東西你描述是:

  • libc,這是容器形象的一部分,因此不會改變。

  • Linux內核ABI,大多是不變的。雖然偶爾會對內核ABI進行一些更改,但儘可能少地執行 - 內核開發人員盡一切可能來保持向後兼容性。在進行更改時,最常見的組件與運行在容器中的應用程序無關(例如,音頻/視頻輸出,動態設備管理等)。

+0

libc和Linux內核交織在一起你正在運行的內核是用特定的libc編譯的。你已經編譯的libc只支持特定版本以上的內核。如果你更新一個沒有另一個,你可以在一個痛苦的世界。 – Eloff

+2

我相信OP意味着不同版本的內核支持的系統調用。這些與libc高度相關。那麼容器是否會作弊並使用基本系統的libc?如果某些軟件試圖直接調用基本內核不支持的系統調用,您會遇到麻煩嗎? – Otheus

相關問題