隨著物聯網(IoT)的出現,該領域的先鋒公司現在正在尋找容器,以將DevOps的優勢擴展到嵌入式開發系統的獨特需求。隨著企業希望擴大其物聯網環境的能力,流行的容器技術如LXC或Linux容器和Docker位居榜首。
容器簡史
容器作為虛擬機(VMs)的輕量級替代品得到普及。虛擬機是虛擬化硬件服務器,允許用戶在現有主機操作系統上安裝和運行來賓操作系統(OS)。這意味著在任何操作系統環境中開發的應用程序都可以在任何系統上運行。
但是,虛擬機具有很高的開銷、維護成本和較大的映像大小,這可能會將資源過度分配給運行在虛擬機上的操作系統的每個實例。另一方面,容器是虛擬化的軟件環境,它將應用程序的代碼及其依賴項打包,以便應用程序可以在任何主機上單獨并行運行,并根據需要分配資源。
LXC和LXD–操作系統的容器化
容器技術于2001年通過Jacques Gélinas的LinuxVServer項目首次引入。這種早期形式的容器技術經歷了幾次重新設計,例如添加了cgroup功能,允許在不需要啟動任何虛擬機的情況下限制和優先排序資源(CPU、內存、塊I/O、網絡);以及名稱空間隔離功能,該功能允許完全隔離應用程序對操作環境的視圖,包括進程樹、網絡、用戶ID和裝載的文件系統和名稱空間。
2008年,IBM工程師添加了一層用戶空間工具,以使嵌入式開發人員更喜歡該技術。
2014年,LXC 1.0版本通過利用現有的Linux技術(如seccomp和SELinux)進一步解決了LXC的安全問題,以控制和防止惡意代碼從容器中溢出造成的DoS攻擊。
LXC容器的工作原理是采用操作系統級虛擬化,允許多個Linux虛擬環境在共享硬件和基于Linux的操作系統內核上同時運行。這節省了開銷成本,并允許構建應用程序以跨多種設備類型使用。本質上,LXC專注于系統和操作系統級的容器化,而這正是它們擅長的地方。
LXD–LXC容器的升級
LXD被描述為下一代系統容器。它通過可以連接到LXC庫的RESTAPI增強了系統級的容器化。它用Go編寫,創建了一個系統守護進程,應用程序通過HTTPS通過UNIX套接字訪問,進一步擴展了分布式系統可移植性的可能性。LXD構建在LXC之上,并通過內核擴展其功能,而不是獨立于操作系統。它的行為非常類似于帶有虛擬機監控程序的VM,但沒有資源開銷。
Docker–集裝箱化應用程序
雖然Linux容器主要在系統級,但Docker的重點是應用程序容器化。Docker于2013年推出,最初基于LXC,并添加了用戶友好的工具,以吸引嵌入式開發人員尋找大型虛擬機的替代品。最終,Docker通過開發自己的集裝箱化架構與LXC有所不同。
Docker和LXC共享類似的安全和進程隔離功能,確保運行的進程不會過度利用資源。然而,它們實際上是非常不同的技術——每個Docker容器運行單個虛擬化應用程序引擎,而LXC容器化系統或Linux操作系統用戶區的不同組件。
Docker容器打包單個應用程序或應用程序組件,而不是客戶操作系統,它有一個直接在主機操作系統上運行的Docker守護程序。此外,在嵌入式開發中,每個容器化應用程序都是獨立運行的,不會影響主機中同時運行的任何其他應用程序。