什麼是容器和為什麼選擇容器?
容器從根本上改變了我們部署,分發和運作軟體的基礎。開發者可以開發本地的軟體,然後知道了這個軟體可以運作,而不用考慮主機環境在哪裡。運維工程師則可以集中精力在網絡資源和上線時間上,進而花費更少的時間配置環境和擔心系統的依賴關系。使用容器的人數目前正在快速增長階段,從剛起步的創業公司到大規模的企業。開發者和運維工程師有望于在下面的幾年裡繼續的使用容器。
容器是一個應用和它的依賴關系的封裝。在偶然一瞥下,你會以為它是一個輕量級的虛拟機,就像VM,一個隔離作業系統的執行個體,可以用于運作應用。
然而容器有幾個優勢,傳統的VM根本無法實作
- 容器和主機OS共享資源,這使得他們有更高的效率。容器可以啟動和停止在1s之内。應用運作在容器之中并不會引發過度消耗相比于運作在本地主機之中。
- 容器的便攜性,在運作的環境中,有消除的細微改變引起的bug的潛力。它也可以放到一個年齡很大的開發者手中來制止他們說,"這在我的機器上運作的很好"。
- 容器的輕量級特效意味着開發者可以同時運作許多的容器,這使得可以仿真分布式系統。運維工程師也可以運作更多的容器在一個單主機的機器上而不是簡單的使用一個VM。
- 容器對于終端用和遠離部署環境之外的人有好處。使用者可以下載下傳和運作複雜的應用,而不需要花費大量時間在配置和安裝問題上或者擔心系統改變的需求。總之,這個應用的開發者可以避免擔心使用者環境的不同而導緻依賴關系的可靠性。
更重要的是,VM和容器的目的是不同的,VM的目的是完全的仿真外部的環境,而容器的目的是為了讓外部應用更加便攜和自給自足。
容器VS虛拟機(VMs)
盡管容器和VM看起來有很多相似的地方,它們也有很多不同的地方,用圖表就很容易的解釋它們。
圖表1-1顯示了三種應用運作在獨立的虛拟機上在一個主機上。超級管理者(Hypervisor)被要求用來建立和運作VMs,控制通路底層的OS和硬體,同時在需要的時候解釋系統調用。每一個VM都需要一個完全的OS副本,和運作在上面的應用和提供支援的庫。

相比之下,圖表1-2顯示了,同樣的三種應用可以運作在容器化的系統上。不像VMs,主機核心是被運作的容器所共享的。這就意味着容器一直被強制運作在與主機相同的核心上。應用Y和Z使用相同的庫和可以共享這些資料,而不需要有備援的拷貝。容器引擎負責用來啟動和停止容器,類似于在VM上面的超級管理者(Hypervisor)。然而一個程序運作在容器内部等價于運作與本地程序,而不會引發多餘的開支。
容器和VMs都可用于隔離運作在相同主機上的應用。VMs從超級管理者哪裡增加了一定程度的隔離,VM是一種成熟的技術進而可以被信任。容器則是相對較新的,很多組織都在猶豫是否完全信任容器的隔離特性,在容器特性得到了良好的證明。由于這個原因,很容易發現,在虛拟機裡面運作容器的混合系統會占據了兩者的優勢。
Docker和容器(Containers)
容器是一個很老的概念了,在過去幾十年,UNIX作業系統使用chroot指令提供簡單的檔案系統形式的隔離。從1998年開始,FreeBSD有了jail工具,進而擴充了chroot沙盒到程序中。 Solaris Zone相對來說,在2001年則提供了完全的容器化技術,但是受限于Solaris的系統。在2001年,Parrallels Inc(後來的SWsoft)為linux釋出了金融版本的Virtuozzo容器技術,後來在2005年,開放源碼成了OpenVZ的核心技術。然後Google為Linux核心開始了Cgroups的開發,然後移動它的基礎設施到容器上。Linux Containers(LXC)項目啟動與2008年,然後與CGroups,Kernel namaspaces和chroot技術放在一起,來提供一個完全的容器方案。最後在2013年,Docker帶來了最後的集裝箱難題,技術開始進入主流。
Docker采用了Linux container技術,封裝它然後從不同的方式擴充它——主要是通過便攜的鏡像和使用者友好的接口——來為容器的建立和分發提供完全的解決方案。Docker平台有兩個主要的元件: Docker Engine負責建立和運作容器。 Docker Hub負責分發容器的雲服務。
Docker Engine提供了快速的和友善的借口來運作容器。在這之前,使用LXC技術運作容器需要很多專業知識和手工。Docker Hub提供了大量的公共容器鏡像以便下載下傳,允許使用者快速的開始和避免了備援的工作。通過Docker開發的更深入的工具,包括叢集管理工具Swarm,,為Docker提供圖形借口的Kitematic,為Docker主機提供指令行工具的Machine。
Docker Engine的開放源碼,Docker以經成長為一個大的Docker社群,通過公衆的幫助來修複bug和進行加強。Docker快速的增長意味着它以及高效的成為了de facto标準,到2015年,這已經到達頂峰,為了建立(Open Container Initiative),一個Docker,Microsoft,CoreOS和許多其它重要的組織贊助的政府的組織,它的使命是為了發展出标準的Docker 容器格式和運作形式。