看似docker主要的OS級虛擬化操做是藉助LXC, AUFS只是錦上添花。那麼確定會有人好奇docker到底比LXC多了些什麼。無心中發現 stackoverflow 上正好有人問這個問題,python
除了內核特性的底層基礎以外,Docker還提供了一個具備如下強大功能的高級工具:git
跨機器的便攜式部署。 Docker定義了一種將應用程序及其全部依賴綁定到一個單獨對象中的格式,該對象能夠被傳輸到任何啓用docker的機器上,並在那裏執行,保證暴露給應用程序的執行環境是相同的。 Lxc實現了流程沙盒,這是便攜式部署的重要先決條件,但單靠這一點對於便攜式部署來講是不夠的。若是您向我發送了一個安裝在自定義lxc配置中的應用程序的副本,那麼它幾乎確定不會像咱們的機器那樣在您的機器上運行,由於它與您計算機的特定配置有關:網絡,存儲,日誌記錄,發行版,等等。Docker爲這些特定於機器的設置定義了一個抽象,以便徹底相同的docker容器能夠在許多不一樣的機器上運行 - 不變 - 具備許多不一樣的配置。redis
以應用爲中心。 Docker針對應用程序的部署進行了優化,而不是機器。這反映在其API,用戶界面,設計理念和文檔。相比之下,lxc助手腳本將容器做爲輕量級的機器 - 基本上是啓動速度更快,內存更少的服務器。咱們認爲容器不止於此。
自動構建。 Docker包含一個工具,供開發人員自動從源代碼中組裝一個容器,徹底控制應用程序的依賴關係,構建工具,打包等。他們能夠自由使用make,maven,chef,puppet,salt,debian包,rpms,source tarballs,或上述的任何組合,而無論機器的配置如何。sql
版本。Docker包括用於跟蹤容器的連續版本,檢查版本之間的差別,提交新版本,回滾等相似git的功能。歷史記錄還包括如何組裝一個容器以及由誰來完成,所以您能夠從生產服務器一路回到上游開發商。 Docker也實現增量上傳和下載,相似於「git pull」,因此新版本的容器只能經過發送差別來傳輸。docker
組件重用。任何容器均可以用做「基礎圖像」來建立更專業的組件。這能夠手動完成或做爲自動構建的一部分。例如,您能夠準備理想的python環境,並將其用做10個不一樣應用程序的基礎。您理想的postgresql設置能夠從新用於您全部的將來項目。等等。服務器
共享。 Docker能夠訪問一個公共註冊表(http://index.docker.io),成千上萬的用戶上傳了有用的容器:從redis,couchdb,postgres到irc保險箱到rails應用服務器,以便爲各類發行版本建立基礎映像。登記處還包括由碼頭工做組維護的有用容器的官方「標準庫」。註冊表自己是開源的,因此任何人均可以部署他們本身的註冊表來存儲和傳輸私有容器,例如用於內部服務器部署。網絡
工具生態系統Docker定義了一個用於自動化和自定義容器的建立和部署的API。有大量的工具與docker集成來擴展其功能。 (Dokku,Deis,Flynn),多節點編排(maestro,salt,mesos,openstack nova),管理儀表板(docker-ui,OpenStack Horizon,造船廠),配置管理(廚師,puppet),持續集成(jenkins,strider,travis)等。Docker正在迅速將本身定位爲基於容器的工具的標準。maven