本節書摘來自華章計算機《docker技術入門與實戰》一書中的第1章,第1.2節,作者:楊保華,戴王劍,曹亞侖著, 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
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容器技術與傳統虛拟機技術的特性比較。