什麼是容器技術

把應用程式與執行所需的函式庫和設定封裝在一起,在共用主機作業系統核心的同時,與其他行程隔離執行的技術;這樣執行的單位稱為容器。在 Linux 上以區隔行程ID、網路、掛載等樣貌的命名空間,以及限制CPU與記憶體使用量的 cgroups 實現。比啟動整個作業系統的虛擬機器輕巧、啟動也快,但因共用核心,無法執行與主機不同種類作業系統的核心。容器由容器映像檔建立,並以 Docker、Kubernetes 等工具建立與管理。

日文名稱: コンテナ

「容器技術」出現在2領域的2道練習題中(作業系統與硬體, 雲端與容器基礎等)。

這個名詞所屬的領域: 雲端與容器基礎

與虛擬機器的差異

虛擬機器在超管理器(hypervisor)上各自執行包含核心的作業系統。容器不啟動作業系統,而是以隔離的行程在主機核心上運作,因此啟動多半在1秒以內,1台機器上也能放入許多容器。相對地,隔離依賴核心的功能,不如虛擬機器那麼強。需要強隔離的情況下,也會採用在輕量虛擬機器中執行容器的方式。

容器的檔案系統

容器的檔案系統,是在唯讀的映像檔層之上疊加每個容器的可寫入層。修改映像檔中的檔案時,該檔案會先複製到可寫入層再變更(寫入時複製)。可寫入層會在刪除容器時消失,因此想保留的資料要放在磁碟區等外部儲存空間。

用完即丟的設計

容器的設計前提是:壞了不修,而是從映像檔重新建立並替換。設定以環境變數等從外部提供,日誌寫到標準輸出交由平台收集,狀態放在資料庫或儲存空間。這樣一來,增減數量或換成新版本都很簡單。

練習容器技術的題目

關於容器(container)與虛擬機器的差異,下列何者正確?

  1. A容器各自擁有獨立的作業系統核心,虛擬機器則共用核心
  2. B容器在虛擬機器監視器上運作,虛擬機器則只靠作業系統的功能運作
  3. C容器共用核心,虛擬機器則執行各自獨立的作業系統
查看答案與解析

正確答案:C. 容器共用核心,虛擬機器則執行各自獨立的作業系統

容器是在共用同一個作業系統核心的情況下,依群組隔離檔案的呈現、行程、網路與可用資源等的方式。由於不必啟動整個作業系統,所以輕量,啟動也很快。虛擬機器則是在虛擬機器監視器上,各自執行包含獨立核心的作業系統,雖然較為沉重,但隔離性強,也能執行不同種類的作業系統。共用核心的是容器這一方,請注意說明顛倒的選項。

在實現 Linux 容器技術的核心功能中,命名空間(namespaces)與 cgroups(控制群組)的角色組合,下列何者正確?

  1. A命名空間:區隔行程看得到的東西(行程ID、網路、掛載等),cgroups:限制並計量CPU與記憶體等資源的使用量
  2. B命名空間:限制並計量CPU與記憶體等資源的使用量,cgroups:區隔行程看得到的東西(行程ID、網路、掛載等)
  3. C命名空間:為每個容器啟動另一個核心以互相隔離,cgroups:為每個容器建立虛擬的CPU並模擬硬體
查看答案與解析

正確答案:A. 命名空間:區隔行程看得到的東西(行程ID、網路、掛載等),cgroups:限制並計量CPU與記憶體等資源的使用量

容器是在主機核心上運作的一般行程,再以兩種機制加上隔離。命名空間把行程ID、網路、掛載(檔案系統的樣貌)、主機名稱等依群組區隔,讓容器內的行程只看得到自己的部分。cgroups 限制一群行程可使用的CPU時間與記憶體量,並計量其使用量。兩者都是核心的功能,因此容器既不會啟動另一個核心,也不會模擬硬體。

常見問題

容器內可以使用與主機不同的 Linux 發行版嗎?

可以。映像檔中放的是指令與函式庫等使用者空間的檔案,因此可以使用其他發行版的檔案。不過核心是共用主機的,所以 uname -r 會顯示主機的核心,主機核心沒有的功能也無法使用。

為什麼在 Windows 或 macOS 上能執行 Linux 容器?

因為 Docker Desktop 等工具在其中執行一個小型的 Linux 虛擬機器,並在上面執行 Linux 容器。Linux 容器一定需要某處有 Linux 的核心。

出現「容器技術」的題目(2題)

  1. 關於容器(container)與虛擬機器的差異,下列何者正確?
  2. 在實現 Linux 容器技術的核心功能中,命名空間(namespaces)與 cgroups(控制群組)的角色組合,下列何者正確?

相關名詞

虛擬機器監視器(Hypervisor) CPU 時間(CPU time) 不可變基礎設施 可用區域 可觀測性 共同責任模型 自動擴展 物件儲存 金絲雀部署 容器映像檔

前往名詞解釋列表