1.2 爲什麼要使用Docker

Docker容器虛擬化的好處

 

Docker項目的發起人和Docker Inc.的CTO Solomon Hykes認爲,Docker在正確的地點、正確的時間順應了正確的趨勢—即高效地構建應用。現在開發者需要能方便地創建運行在雲平臺上的應用,也就是說應用必須能夠脫離底層機器,而且同時必須是“任何時間任何地點”可獲取的。因此,開發者們需要一種創建分佈式應用程序的方式,這也是Docker所能夠提供的。

 

舉個簡單的應用場景的例子。假設用戶試圖基於最常見的LAMP(Linux + Apache + MySQL + PHP)組合來運維一個網站。按照傳統的做法,首先,需要安裝Apache、MySQL 和PHP以及它們各自運行所依賴的環境;之後分別對它們進行配置(包括創建合適的用戶、配置參數等);經過大量的操作後,還需要進行功能測試,看是否工作正常;如果不正常,則意味着更多的時間代價和不可控的風險。可以想象,如果再加上更多的應用,事情會變得更加難以處理。

 

更爲可怕的是,一旦需要服務器遷移(例如從阿里雲遷移到騰訊雲),往往需要重新部署和調試。這些瑣碎而無趣的“體力活”,極大地降低了工作效率。

 

而Docker提供了一種更爲聰明的方式,通過容器來打包應用,意味着遷移只需要在新的服務器上啓動需要的容器就可以了。這無疑將節約大量的寶貴時間,並降低部署過程出現問題的風險。

 

Docker在開發和運維中的優勢

 

對開發和運維(DevOps)人員來說,可能最夢寐以求的就是一次性地創建或配置,可以在任意環境、任意時間讓應用正常地運行。而Docker恰恰是可以實現這一終極目標的瑞士×××。

 

具體說來,Docker在開發和運維過程中,具有如下幾個方面的優勢。

 

更快速的交付和部署。使用Docker,開發人員可以使用鏡像來快速構建一套標準的開發環境;開發完成之後,測試和運維人員可以直接使用相同環境來部署代碼。Docker可以快速創建和刪除容器,實現快速迭代,大量節約開發、測試、部署的時間。並且,各個步驟都有明確的配置和操作,整個過程全程可見,使團隊更容易理解應用的創建和工作過程。

 

更高效的資源利用。Docker容器的運行不需要額外的虛擬化管理程序(Virtual Machine Manager,VMM,以及Hypervisor)支持,它是內核級的虛擬化,可以實現更高的性能,同時對資源的額外需求很低。

 

更輕鬆的遷移和擴展。Docker容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、個人電腦、服務器等。這種兼容性讓用戶可以在不同平臺之間輕鬆地遷移應用。

 

更簡單的更新管理。使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。並且所有修改都以增量的方式進行分發和更新,從而實現自動化並且高效的容器管理。

Docker與虛擬機比較

作爲一種輕量級的虛擬化方式,Docker在運行應用上跟傳統的虛擬機方式相比具有顯著優勢:

 

Docker容器很快,啓動和停止可以在秒級實現,這相比傳統的虛擬機方式要快得多。

 

Docker容器對系統資源需求很少,一臺主機上可以同時運行數千個Docker容器。

 

Docker通過類似Git的操作來方便用戶獲取、分發和更新應用鏡像,指令簡明,學習成本較低。

 

Docker通過Dockerfile配置文件來支持靈活的自動化創建和部署機制,提高工作效率。

 

Docker容器除了運行其中的應用之外,基本不消耗額外的系統資源,保證應用性能的同時,儘量減小系統開銷。傳統虛擬機方式運行N個不同的應用就要啓動N個虛擬機(每個虛擬機需要單獨分配獨佔的內存、磁盤等資源),而Docker只需要啓動N個隔離的容器,並將應用放到容器內即可。

 

當然,在隔離性方面,傳統的虛擬機方式多了一層額外的隔離。但這並不意味着Docker就不安全。Docker利用Linux系統上的多種防護機制實現了嚴格可靠的隔離。從1.3版本開始,Docker引入了安全選項和鏡像簽名機制,極大地提高了使用Docker的安全性。

 

下表總結了使用Docker容器技術與傳統虛擬機技術的特性比較。

特性

容器

虛擬機

啓動速度

秒級

分鐘級

硬盤使用

一般爲MB

一般爲GB

性能

接近原生

弱於

系統支持量

單擊支持上千個容器

一般幾十個

隔離性

安全隔離

完全隔離


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章