LXC是歷史上第一個試圖普及容器化技術的工具。和Linux容器生態(tài)系統(tǒng)的其他工具一起,LXC成為了容器化系統(tǒng)中被廣泛采用的工具。它完成了一套系統(tǒng)API讓Linux內(nèi)核的容器特征能夠被用戶層使用:在不脫離Linux標準下通過共享內(nèi)核,LXC在chroots和虛擬機之間構建了一個體系結構。
Docker
Docker是最具有吸引力的一種容器技術,它易于理解,可快速啟動,運行方式簡單,同時帶來了容器編排工具的一個巨大生態(tài)系統(tǒng)。
從工程角度,Docker通過API實現(xiàn),它有自己的服務端(daemon),命令行客戶端以及從注冊中心到精美UI界面等大量可以使用的工具。
Docker的強大在于之前提到的chroot、進程分組、進程隔離等功能都可以通過它的一些命令來實現(xiàn)。在其他容器化技術中開發(fā)人員或者管理人員需要頻繁手動操作的一些事情,例如拉取補丁、工具與部署等,在Docker中已經(jīng)不在需要,因為所有的操作都封裝在了命令行客戶端工具 docker 中。
客戶端和REST API都是與Docker服務端進行交互,它是可以遠程訪問的一個標準可接入守護進程,用來接收和處理所有的請求。這個守護進程負責在Docker宿主機之上操控鏡像和容器,并已經(jīng)通過IANA官方確認,將端口綁定到tcp/2375和tcp/2376。
Docker最初基于LXC,但現(xiàn)在放棄了LXC,而使用Libcontainer。Libcontainer通過GO完全重寫了用來抽象Linux內(nèi)核虛擬化機制的基礎庫和API。
Open Container Initiative的細節(jié)
隨著Docker的成功,引發(fā)了更多類似產(chǎn)品的出現(xiàn):CoreOS的 Rkt、亞馬遜的容器服務(Amazon Container Service)、Apcera的Kurma等等。這種分化發(fā)展不由讓人擔心容器技術領域的分裂,好在通過今年在舊金山舉辦的DockerCon15,這些組織已經(jīng)開始共同努力,期望為容器創(chuàng)建統(tǒng)一的格式。這就是Open Container Initiative的由來,它基于Linux基金會,致力于為容器鏡像和容器的運行制定標準化。通過Open Container規(guī)定格式創(chuàng)建的容器可以在不同的生態(tài)環(huán)境中共存。Open Container Initiative的成員包括了所有的容器參與者,例如亞馬遜(Amazon)、CoreOS、谷歌、Oracle等等,當然也包括Docker。
Open Container的規(guī)格說明書(github地址為https://github.com/opencontainers/specs)還在制定過程中,鼓勵所有的組織或者個人都可以參與其中。到目前為止依據(jù)不同平臺和內(nèi)容、工業(yè)級別交付流程以及自動化最小需求,規(guī)格說明書已經(jīng)定義了一些容器的統(tǒng)一接口和標準。支持Open Container的所有企業(yè)將完全依賴這些規(guī)格說明書來制作容器。
同時,開發(fā)RunC運行庫(github地址為https://github.com/opencontainers/runc)也是為了給各種容器提供統(tǒng)一運行庫命令行工具的頂級封裝器(而不是使用專有的命令,例如Docker的 docker 或者Rocket的 rkt)。
微服務
隨著云計算的不斷發(fā)展該利用容器做什么?在云計算中我們能看到的的微服務的不斷發(fā)展。
在云上,整體的應用程序開發(fā)已經(jīng)是過去的事情了,新的范例稱為微服務體系結構。利用微服務,龐大的應用程序可以根據(jù)其諸多的功能進行解耦,分成多個微小且只有單一目的的服務,這些服務之間通過規(guī)定的接口進行通信,例如API。微服務被稱為云計算中的樂高積木玩具。
在許多方面,容器都是實現(xiàn)微服務的一種杰出的技術:每一個容器化的微服務具有唯一的角色(數(shù)據(jù)庫、隊列、web服務器),然后使用容器編排工具(在許多容器開發(fā)生態(tài)系統(tǒng)中是非常有用的)使所有的容器相互通信來組裝成整個應用程序。
上述方式有很多好處:可組合性、更快的工作流、功能的分離、可維護性和可升級性。進一步來講,對微服務框架進行擴容變得更加容易。在不影響系統(tǒng)其他功能的前提下,微服務能夠更加快速、更加容易地置換到更加高效的對等服務上,或者是當遇到問題時進行回滾處理。多種不同的技術都可以用來分離微服務,不同的團隊可以根據(jù)自身手頭上的任務來選擇更加合適的技術。
一些大公司,像Amazon或者Netflix,在生產(chǎn)環(huán)境中已經(jīng)有了一些基于微服務的應用程序。
因此,我們所具備的是借助容器技術能夠在云環(huán)境上實現(xiàn)一種完美的程序設計范式,即微服務。
總結
對于軟件程序和依賴關系來說,容器是一種輕量的可移植的工具。這么說看起來有些繁瑣,但是容器真的改變了我們開發(fā)、部署和運行軟件程序的方式。
Docker的發(fā)展是令人驚訝的,容器與云基礎架構的結合也受到越來越多的關注。事實上,OpenStack有三個工程的核心組件都和容器有著密切關系:Kolla使用容器化服務來部署OpenStack、Murano使用Kubernetes提供一種簡單的方式來部署容器化應用程序以及 Magnum為容器或者“容器即服務”提供了完整的編排系統(tǒng)。