LXC(Linux Containers)是什麼?
LXC 於 2008 年首次引入,從其之前的 Solaris Containers(或 Solaris Zones)和 FreeBSD jail 中採用了其大部分功能。
LXC 無需創建完整的虛擬機,而是可以通過自己的進程和網絡空間來實現虛擬環境。
通過使用命名空間來強制執行進程隔離,並利用內核本身的控制組(cgroup)功能,該功能可以限制,說明和隔離一個或多個進程的 CPU,內存,磁盤 I / O 和網絡使用情況。將此用戶空間框架視爲的一種非常高級的形式 chroot。
注意:LXC 使用 Namespace(名稱空間) 來實現進程隔離,同時使用內核自己的 cgroup 來解決並限制一個或多個進程中的 CPU,內存,磁盤 I / O 和網絡使用情況。
但是容器到底是什麼?
簡短的答案是,容器使軟件應用程序與操作系統脫鉤,從而爲用戶提供了一個乾淨而最小的 Linux 環境,同時在一個或多個隔離的 “容器” 中運行其他所有內容。容器的目的是啓動一組有限的應用程序或服務(通常稱爲微服務),並使它們在獨立的沙盒環境中運行。
這種隔離可防止在給定容器中運行的進程監視或影響在另一個容器中運行的進程。同樣,這些容器化服務不會影響或干擾主機。能夠將分散在多個物理服務器上的許多服務整合爲一個的想法是數據中心選擇採用該技術的衆多原因之一。
容器功能包括:
-
安全性:網絡服務可以在容器中運行,從而限制了由於安全漏洞或違反而造成的損害。入侵者成功利用該容器中運行的一個應用程序上的安全漏洞,僅限於該容器中可能採取的一系列操作。
-
隔離:容器允許在同一臺物理計算機上部署一個或多個應用程序,即使這些應用程序必須在不同的域下運行,每個域都需要對其各自資源的獨佔訪問權。例如,在不同容器中運行的多個應用程序可以通過使用與每個容器關聯的不同 IP 地址綁定到同一物理網絡接口。
-
虛擬化和透明性:容器爲系統提供了虛擬化的環境,可以隱藏或限制其下的物理設備或系統配置的可見性。容器背後的一般原則是,除了解決安全性或隔離性問題之外,避免更改運行應用程序的環境。
Docker 主要致力於:
-
可移植性:Docker 提供了基於鏡像的部署模型。這種類型的可移植性提供了一種跨多個環境共享應用程序或服務集(及其所有依賴項)的簡便方法。
-
版本控制:單個 Docker 映像由一系列組合的層組成。每當更改圖像時,都會創建一個新層。例如,每次用戶指定命令(例如 run 或)時 ,都會創建一個新層 copy。Docker 將這些層重用於新的容器構建。與 Docker 分層是它自己的版本控制方法。
-
回滾:同樣,每個 Docker 映像都有層。如果您不想使用當前運行的圖層,則可以回滾到以前的版本。這種敏捷性使軟件開發人員可以更輕鬆地連續集成和部署他們的軟件技術。
-
快速部署:準備一個新的機器通常可能需要幾天的時間。而且,安裝和配置它的工作量和開銷非常重。使用 Docker,您可以通過將啓動和運行鏡像所需的時間減少到幾秒鐘來避免所有這些情況。用完容器後,就可以輕鬆銷燬它。
從根本上說,Docker 和 LXC 都非常相似。它們都是用戶空間和輕量級虛擬化平臺,它們實現 cgroup 和名稱空間來管理資源隔離。但是,兩者之間存在許多明顯的差異。
LXC 與 Docker 比較:
總結:
LXC 提供了 Linux 上 VE 的優勢,主要是能夠將您自己的私有工作負載相互隔離。與 VM 相比,它是一種更便宜、更快速的解決方案,但這樣做需要一些額外的學習和專業知識。
Docker 是對 LXC 能力的重大改進。它的明顯優勢是因爲它足夠簡單學習成本低並不依賴操作系統。
引用:
- https://www.upguard.com/blog/docker-vs-lxc
- https://www.section.io/engineering-education/lxc-vs-docker-what-is-the-difference-and-why-docker-is-better
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/flZeQi8lFnCZqRc8-Ls-tw