2015-10-13 144 views
15

一直在努力學習Docker,讓我感到困惑的是一種不同的Linux(對於主機操作系統)實際上在Docker容器中運行的方式。在Docker容器中運行不同的Linux操作系統?

如果我們假設我的碼頭工人主機正在運行RedHat和我從Ubuntu的鏡像啓動的容器則有以下幾種真?:

  • 從邏輯上說,如果Ubuntu的圖像佔用大約550MB然後將泊塢窗守護進程實際上是下載(從映像註冊表)550MB的Ubuntu映像,以創建容器?
  • 是在容器中運行的Ubuntu實例,與我手動下載並安裝相同版本的實例沒有區別。

我知道Docker容器共享主機操作系統使用的相同內核,並且Docker的基本要點之一就是它使用底層操作系統的容器的效率提升。因此,當你啓動一個不同於主機的Linux版本創建的容器時,實際發生的情況我有點困惑。

+4

投票結果應該有一個強制的匿名評論,這樣至少像我這樣的新手可以評估爲什麼這個問題應該是不好的。即。不適合所以? – JamieP

回答

28

我認爲這個以前的帖子可能會幫助你更多地理解它 - Docker container isolation, does it care about underlying Linux OS?

問題的關鍵在於,如果主機操作系統是RedHat,那麼它就是RedHat內核,它將用於您在Docker容器中運行的任何Linux版本。在你的例子中Ubuntu。

這歸結爲了解有什麼區別一個Linux OS和Linux的圖片之間。您不會在Docker Container中運行完整的Ubuntu操作系統,而是運行Ubuntu的映像。

對於你的問題想到的目的: -

OS =內核+文件系統/庫
圖片 =文件系統/庫

Ubuntu的圖像您泊塢窗內運行容器只是Ubuntu文件系統/庫(不是隨Ubuntu OS提供的內核)。在容器中運行的Ubuntu鏡像將使用Redhat內核。這部分解釋了您從Docker容器獲得的效率,該容器利用底層主機的內核(等等)。

+1

感謝您的解釋。這已經清理了一下。我只是需要更多地瞭解Linux。 – JamieP

+0

您是否有使用RHEL6(或Centos6)映像運行RHEL7(或Centos7)OS的經驗?你認爲這方面可能存在問題嗎? – Voltaire

+0

^^^ [我懷疑例如在RHEL7和RHEL6之間的3.10.x和2.6.x內核之間可能存在ABI兼容性問題] – Voltaire

0

在Docker容器內部運行的Ubuntu鏡像在所謂的該容器的用戶空間中運行。該映像可以對RedHat主機操作系統內核進行內核系統調用(作爲從用戶空間向某些用戶操作的內核空間傳輸控制的一部分)。由於核心內​​核是通用技術,因此即使從Ubuntu用戶空間代碼到Redhat內核代碼進行調用,系統調用也是兼容的。這種兼容性使得可以在可能都具有不同的基本OS映像的容器之間共享內核。

相關問題