我看到 docker 儲存庫中的許多 docker 映像都是基於 Ubuntu 製作的。
這意味著什麼?每個容器是否捆綁了 Linux 核心的精簡版本?
容器是否位於自己的核心之上?但我認為容器共享主機的核心(在某些情況下是 boot2docker,一個自訂的 Tiny Core Linux 版本,在其他情況下是 CoreOS)。
編輯:稍微澄清一下問題。是的,我知道 docker 是一個進程容器,而不是一個完整的虛擬機器。但由於官方 docker hub 註冊表和 CentOS 等其他作業系統中都有「Ubuntu」容器,那麼在容器中運行 Ubuntu 意味著什麼?
答:啊,我才恍然大悟。它是 Ubuntu 使用者登陸進程,包含 apt-get 和特定 Ubuntu 版本的其他配置進程。 CentOS 也是如此。 Docker 不是單一進程,只是單一入口。因此,對於這些發行版,入口點是某種產生其他流程的 init 流程。
答案1
Docker 使用主機作業系統內核,容器內沒有自訂或附加內核。在一台機器上運行的所有容器都共用這個「主機」核心。
維基百科說http://en.wikipedia.org/wiki/Docker_(軟體)那
Docker 使用 Linux 核心的資源隔離功能(例如 cgroup 和核心命名空間)來允許獨立的「容器」在單一 Linux 實例中運行,從而避免啟動虛擬機器的開銷。
cgroup、命名空間和 LXC 是 Linux 核心用於隔離進程組的功能;仍然只有單一核心、單一調度程序和一個核心記憶體管理器實例。
Boot2docker 和 CoreOS 只是帶有一些主機核心的輕量級 Linux 發行版;它們可用於載入 Docker 容器。
boot2docker 是一個基於 Tiny Core Linux 的輕量級 Linux 發行版,專門用於運行 Docker 容器。它完全從 RAM 運行,重約 27MB,啟動時間約 5 秒 (YMMV)。
http://en.wikipedia.org/wiki/CoreOS
單一控制主機(CoreOS 實例)運行多個獨立的 Linux 系統(容器),使用 Docker 作為 Linux 核心底層作業系統級虛擬化功能的附加抽象層和介面[14]。 ……這種方法依賴 Linux 核心的 cgroups 功能,該功能提供命名空間隔離以及限制、計算和隔離進程集合的資源使用(CPU、記憶體、磁碟 I/O 等)的能力。
答案2
在幾乎所有情況下,主機作業系統核心都是共享的。要運行不同的內核,您需要使用虛擬化。這種情況很少見,並且僅在由於性能下降而必要時使用。
「Docker Engine 容器僅包含應用程式及其相依性。它作為主機作業系統上使用者空間中的獨立進程運行,與其他容器共用核心。因此,它享有虛擬機器的資源隔離和分配優勢,但更便攜且高效。
這可能有助於解釋它是如何運作的:
答案3
所有 docker 容器都使用主機核心。
這也意味著主機核心和容器發行版之間的某些不相容可能會導致問題。理論上。例如,如果容器化軟體想要使用某些未編譯到主機核心中的核心功能,那麼它就無法運作。
實踐證明這種情況不會發生。 Docker 容器的主要問題來源是 Docker 本身的(通常無法解釋的)限制,而不是某些主機-來賓核心不相容。
(附註:這是因為幾乎所有 Linux 發行版都可以與任何 Linux 核心配合使用。)