Linux 容器技術史話:從 chroot 到未來

jopen 8年前發布 | 13K 次閱讀

Linux 容器技術史話:從 chroot 到未來

Linux 容器是一個在單一 Linux 主機上提供多個隔離的 Linux 環境的操作系統級虛擬技術。不像虛擬機(VM),容器并不需要運行專用的訪客guest操作系統。容器們共享宿主機的host操作系統內核,并使用訪客操作系統的系統庫來提供所需的功能。由于不需要專用的操作系統,因此容器要比虛擬器啟動快得多。

Linux 容器技術史話:從 chroot 到未來

(圖片來自: Docker Inc.)

容器借助 Linux 內核的 Namespaces、Apparmor、SELinux 情景模式profile、chroot 和 CGroup 等功能來提供類似于虛擬機的隔離環境。Linux 的安全模塊可以確保正確地控制容器對宿主機和內核的訪問,從而避免各種入侵活動。此外,在宿主機上可以運行不同的 Linux 發行版,只要它們運行在同樣的 CPU 架構下。

簡單來說,容器提供的是一種基于各種 Linux 發行版創建容器鏡像的方法、一套管理容器生命周期的 API、與該 API 交互的客戶端工具、保存快照的功能、在宿主機之間遷移容器實例的能力,等等。

容器歷史

以下是容器簡史,內容來自維基百科及其它來源:

1979 — chroot

容器的概念始于 1979 年的 UNIX  chroot,它是一個 UNIX 操作系統上的系統調用,用于將一個進程及其子進程的根目錄改變到文件系統中的一個新位置,讓這些進程只能訪問到該目錄。這個功能的想法是為每個進程提供獨立的磁盤空間。其后在 1982年,它被加入到了 BSD 系統中。

2000 — FreeBSD Jails

FreeBSD Jails 是最早的容器技術之一,它由 R&D Associates 公司的 Derrick T. Woolworth 在 2000 年為 FreeBSD 引入。這是一個類似 chroot 的操作系統級的系統調用,但是為文件系統、用戶、網絡等的隔離增加了進程沙盒功能。因此,它可以為每個 jail 指定 IP 地址、可以對軟件的安裝和配置進行定制,等等。

2001 — Linux VServer

Linux VServer 是另外一種 jail 機制,它用于對計算機系統上的資源(如文件系統、CPU 處理時間、網絡地址和內存等)進行安全地劃分。每個所劃分的分區叫做一個安全上下文security context,在其中的虛擬系統叫做虛擬私有服務器virtual private server,VPS

2004 — Solaris Containers

Solaris Containers 支持在 x86 和 SPARC 系統,首次出現在 2004 年 2 月發布的 Solaris 10 的 build 51 beta 上,其后完整發布在 2005 年的 Solaris 10 上。 Solaris Container 是由系統資源控制和通過 zones 提供的邊界分離boundary separation所組合而成的。zones 是一個單一操作系統實例中的完全隔離的虛擬服務器。

2005 — OpenVZ

OpenVZ 類似于 Solaris Containers,它通過對 Linux 內核進行補丁來提供虛擬化、隔離、資源管理和狀態檢查checkpointing。每個 OpenVZ 容器都有一套隔離的文件系統、用戶及用戶組、進程樹、網絡、設備和 IPC 對象。

2006 — Process Containers

Process Containers 是由 Google 在 2006 年實現的,用于對一組進程進行限制、記賬、隔離資源使用(CPU、內存、磁盤 I/O、網絡等)。后來為了避免和 Linux 內核上下文中的“容器”一詞混淆而改名為 Control Groups。它被合并到了 2.6.24 內核中。這表明 Google 很早就參與了容器技術的開發,以及它們是如何回饋到社區的。

2007 — Control Groups

如上面所述,Control Groups (即  cgroups)是由 Google 實現的,并于 2007 年加到了 Linux 內核中。

2008 — LXC

LXC 的意思是 LinuX Containers,它是第一個最完善的 Linux 容器管理器的實現方案,是通過 cgroups 和 Linux 名字空間namespace實現的。LXC 存在于 liblxc 庫中,提供了各種編程語言的 API 實現,包括 Python3、Python2、Lua、Go、Ruby 和 Haskell。與其它容器技術不同的是, LXC 可以工作在普通的 Linux 內核上,而不需要增加補丁。現在 LXC project 是由 Canonical 公司贊助并托管的。

2011 — Warden

Warden 是由 CloudFoundry 在 2011 年開發的,開始階段是使用的 LXC,之后替換為他們自己的實現方案。不像 LXC,Warden 并不緊密耦合到 Linux 上,而是可以工作在任何可以提供隔離環境的操作系統上。它以后臺守護進程的方式運行,為容器管理提供了 API。請參考 Warden 文檔這個博客文章了解更多。

2013 — LMCTFY

lmctfy 的意思是“讓我為你包含Let Me Contain That For You”。這是一個 Google 容器技術的開源版本,提供 Linux 應用容器。Google 啟動這個項目旨在提供性能可保證的、高資源利用率的、資源共享的、可超售的、接近零消耗的容器(參考自:lmctfy 演講稿)。現在為 Kubernetes 所用的 cAdvisor 工具就是從 lmctfy 項目的成果開始的。lmctfy 首次發布于 2013 年10月,在 2015 年 Google 決定貢獻核心的 lmctfy 概念,并抽象成 libcontainer,因此,lmctfy 現在已經沒有活躍的開發了。

lincontainer 項目最初由  Docker 發起,現在已經被移交給了開放容器基金會Open Container Foundation

2013 — Docker

Docker 是到現在為止最流行和使用廣泛的容器管理系統。它最初是一個叫做 dotCloud 的 PaaS 服務公司的內部項目,后來該公司改名為 Docker。類似 Warden,Docker 開始階段使用的也是 LXC ,之后采用自己開發的 libcontainer 替代了它。不像其它的容器平臺,Docker 引入了一整個管理容器的生態系統,這包括高效、分層的容器鏡像模型、全局和本地的容器注冊庫、清晰的 REST API、命令行等等。稍后的階段, Docker 推動實現了一個叫做 Docker Swarm 的容器集群管理方案。

2014 — Rocket

Rocket 是由 CoreOS 所啟動的項目,非常類似于 Docker,但是修復了一些 Docker 中發現的問題。CoreOS 說他們的目的是提供一個比 Docker 更嚴格的安全性和產品需求。更重要的是,它是在一個更加開放的標準 App Container 規范上實現的。在 Rocket 之外,CoreOS 也開發了其它幾個可以用于 Docker 和 Kubernetes的容器相關的產品,如:CoreOS 操作系統etcd 和 flannel

2016 — Windows Containers

微軟 2015 年也在 Windows Server 上為基于 Windows 的應用添加了容器支持,它稱之為 Windows Containers。它與 Windows Server 2016 一同發布。通過該實現, Docker 可以原生地在 Windows 上運行 Docker 容器,而不需要啟動一個虛擬機來運行 Docker( Windows 上早期運行 Docker 需要使用 Linux 虛擬機)。

容器的未來

截止到今天(2016年1月),在行業內有一個顯著趨勢,部署軟件應用從虛擬機逐漸移到了容器。其主要的原因是容器相比于虛擬機而言更加靈活和低消耗。Google 已經使用容器技術好多年了,它在 Borg 和 Omega 容器集群管理平臺上可以成規模地運行 Google 應用。更重要的是,Google 為容器領域貢獻了 cgroups 的實現和參與了 libcontainer 項目。Google 也在過去這些年借助容器在性能、資源利用和整體效率方面取得了巨大收益。最近,一直沒有操作系統級的虛擬化技術的微軟,也在 Window Server 上迅速采取動作實現了對容器的原生支持。

Docker 、Rocket 以及其它的容器平臺并不能以一個單一主機運行在產品環境中,原因是這樣面臨著單點故障。當一組容器運行在一個單一宿主機時,如果宿主機失效,所有運行在該宿主機上的容器也會失效。要避免這個問題,應該使用容器宿主機集群。Google 借助其在 Borg 中取得的經驗,開發了一個叫做  Kubernetes 的開源容器集群管理系統。Docker 也啟動了一個叫做  Docker Swarm 的解決方案。目前這些解決方案還都處于相當早期的階段,也許需要幾個月或來年才實現完整的功能集合,才能變得穩定,從而廣泛應用于行業內的產品環境中。

微服務Microservices 是另一個突破性技術,在軟件架構上可以將容器用于部署。微服務并不是一個新東西,只是一個相比標準的 Web 服務超快的輕量級 Web 服務。這是通過將功能單元(也許是一個單一服務或 API 方法)打包到一個服務中,并內嵌其到一個輕量級 Web 服務器軟件中實現的。

通過對上面的介紹,我們可以預測接下來幾年,容器也許會替代虛擬機,某些情況下也許會全部取代。去年我為一些企業在 POC 層面上實現了基于容器的解決方案。也有人想要在產品環境中嘗試它們,這一天也許在容器集群管理系統進一步成熟后很快到來。

來自: https://linux.cn/article-6975-1.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!