天天看點

Linux容器LXC(Linux Container)概述容器和虛拟機的差別LXC的實作LXC和Docker的差別

概述

LXC為Linux Container的簡寫。可以提供輕量級的虛拟化,以便隔離程序和資源,而且不需要提供指令解釋機制以及全虛拟化的其他複雜性。相當于C++中的NameSpace。容器有效地将由單個作業系統管理的資源劃分到孤立的組中,以更好地在孤立的組之間平衡有沖突的資源使用需求。與傳統虛拟化技術相比,它的優勢在于:

  • 與主控端使用同一個核心,性能損耗小;
  • 不需要指令級模拟;
  • 不需要即時(Just-in-time)編譯;
  • 容器可以在CPU核心的本地運作指令,不需要任何專門的解釋機制;
  • 避免了準虛拟化和系統調用替換中的複雜性;
  • 輕量級隔離,在隔離的同時還提供共享機制,以實作容器與主控端的資源共享。

總結:Linux Container是一種輕量級的虛拟化的手段。Linux Container提供了在單一可控主機節點上支援多個互相隔離的server container同時執行的機制。Linux Container有點像chroot,提供了一個擁有自己程序和網絡空間的虛拟環境,但又有别于虛拟機,因為LXC是一種作業系統層次上的資源的虛拟化。

——摘自百度百科

容器和虛拟機的差別

從應用上看,容器和虛拟機都是為了給用于提供一個“獨立的機器”,但是實際上使用者是在同一台機器上運作操作的,隻不過從一開始就進行了資源劃分,各個使用者之間互不幹擾。兩者的不同點在于實作方法的不同,虛拟機是在主控端上面再跑一個作業系統,而最小系統就是我們說的核心,檔案系統等等。而容器隻是在主機核心就進行了資源的劃分,如使用者程序,網絡,檔案系統等。所有的容器都是跑在一個作業系統上。是以跟虛拟機相比,效率更高。

Linux容器LXC(Linux Container)概述容器和虛拟機的差別LXC的實作LXC和Docker的差別

LXC的實作

LXC項目本身隻是一個為使用者提供一個使用者空間的工具集,用來使用和管理LXC容器。LXC真正的實作則是靠Linux核心的相關特性,LXC項目隻是對此做了整合。基于容器的虛拟化技術起源于所謂的資源容器和安全容器。

LXC在資源管理方面依賴于Linux核心的cgroups子系統,cgroups子系統是Linux核心提供的一個基于程序組的資源管理的架構,可以為特定的程序組限定可以使用的資源。LXC在隔離控制方面依賴于Linux核心的namespace特性,具體而言就是在clone時加入相應的flag(NEWNS NEWPID等等)。

LXC和Docker的差別

Linux容器LXC(Linux Container)概述容器和虛拟機的差別LXC的實作LXC和Docker的差別
  • Docker也是應用Linux核心底層的cgroups和namespace特性,從原理上跟LXC是一樣的,但是兩者的側重點不一樣。LXC偏向于通過Linux核心構造出一個虛拟機,在虛拟上實作跟主控端的隔離,共享等。而Docker以應用為中心,側重于通過容器實作應用的部署,和特殊的環境配置。Docker在上層建構了一個更高層次的具備多個強大功能的工具集:
  • 以應用為中心。相對于機器而言,Docker被用于優化應用的部署過程。這可以從它的API、UI、設計理念還有文檔裡得到展現。反之,lxc的輔助腳本專注在把容器作為一個輕量級的機器使用 —— 基本上就是一堆啟動更快并且記憶體需求更小的伺服器。我們認為容器技術的内容遠遠不止這些。
  • 自動建構。Docker為開發人員引入了一個可以用來把他們的源代碼自動打包到容器裡的工具,并且他們能夠對于應用的依賴,建構工具,打包服務等有着完全的自主掌控能力。他們能夠自由的使用make、Maven、Chef、Puppet、salt、debian包、RPM包,源碼包,或者任意以上的結合,而無需關心機器本身的配置。

    版本化。Docker引入了一個類似git的特性來完成一個容器的連續版本追蹤,版本之間的差異diff,新的版本的送出,復原等。曆史記錄資訊裡也包含了容器的使用者資訊以及他是如何建構它的,是以生産環境的伺服器你都有充足的手段去一步步的定位到最上遊的開發人員。Docker也實作了一個增量上傳和下載下傳功能,類似于git pull,是以更換到新版本的容器隻需要傳輸增量部分就行。

  • 元件的重用。任意容器都能用作“基礎鏡像”來建立更特定的元件。這可以手工完成也可以做成自動建構的一部分。例如,你可以準備一個理想的Python環境,并且把它用作10個不同的應用的基礎鏡像。你所定義的标準PostgreSQL設定可以被将來你手上的所有項目重用。諸如此類。
  • 共享。Docker 有權通路一個公共的注冊中心而這裡有數以千計的業界人士上傳各種各樣有價值的容器:任一從Redis、Couchdb、Postgres到irc bouncers再到Rails應用伺服器,Hadoop甚至是多個發行版本的基礎鏡像。該注冊中心也包含了一個官方的“标準庫”,這裡提供了一些由Docker官方團隊維護的實用容器。注冊中心本身也是開源的,是以任何人都能部署他們自己的私有注冊中心來存儲和下發私有容器,例如用于内網伺服器的部署。
  • 工具生态圈。Docker定義了一個API來自動化和個性化的建立和部署容器。也是以催生了衆多的工具內建到Docker,為之提供一些擴充特性。類PaaS的部署(Dokku、Deis、Flynn),多節點編排(Maestro、Salt、Mesos、OpenStack Nova),管理看闆(Docker-UI、OpenStack Horizon、Shipyard),配置管理(Chef、Puppet),持續內建(Jenkins、Strider、Travis)等等。Docker正在迅速的建立以它本身為标準的基于容器的工具生态圈。
LXC