- Docker技術入門與實戰(第3版)
- 楊保華 戴王劍 曹亞侖
- 1756字
- 2018-11-08 18:34:03
1.2 為什么要使用Docker
1. Docker容器虛擬化的好處
Docker項目的發起人、Docker公司CTO Solomon Hykes認為,Docker在正確的地點、正確的時間順應了正確的趨勢——如何正確地構建應用。
在云時代,開發者創建的應用必須要能很方便地在網絡上傳播,也就是說應用必須脫離底層物理硬件的限制;同時必須是“任何時間任何地點”可獲取的。因此,開發者們需要一種新型的創建分布式應用程序的方式,快速分發和部署,而這正是Docker所能夠提供的最大優勢。
舉個簡單的例子,假設用戶試圖基于最常見的LAMP(Linux+Apache+MySQL+PHP)組合來構建網站。按照傳統的做法,首先需要安裝Apache、MySQL和PHP以及它們各自運行所依賴的環境;之后分別對它們進行配置(包括創建合適的用戶、配置參數等);經過大量的操作后,還需要進行功能測試,看是否工作正常;如果不正常,則進行調試追蹤,意味著更多的時間代價和不可控的風險。可以想象,如果應用數目變多,事情會變得更加難以處理。
更為可怕的是,一旦需要服務器遷移(例如從亞馬遜云遷移到其他云),往往需要對每個應用都進行重新部署和調試。這些瑣碎而無趣的“體力活”,極大地降低了用戶的工作效率。究其根源,是這些應用直接運行在底層操作系統上,無法保證同一份應用在不同的環境中行為一致。
而Docker提供了一種更為聰明的方式,通過容器來打包應用、解耦應用和運行平臺。這意味著遷移的時候,只需要在新的服務器上啟動需要的容器就可以了,無論新舊服務器是否是同一類型的平臺。這無疑將幫助我們節約大量的寶貴時間,并降低部署過程出現問題的風險。
2. Docker在開發和運維中的優勢
對開發和運維(DevOps)人員來說,最夢寐以求的效果可能就是一次創建或配置,之后可以在任意地方、任意時間讓應用正常運行,而Docker恰恰是可以實現這一終極目標的“瑞士軍刀”。具體說來,在開發和運維過程中,Docker具有如下幾個方面的優勢:
? 更快速的交付和部署。使用Docker,開發人員可以使用鏡像來快速構建一套標準的開發環境;開發完成之后,測試和運維人員可以直接使用完全相同的環境來部署代碼。只要是開發測試過的代碼,就可以確保在生產環境無縫運行。Docker可以快速創建和刪除容器,實現快速迭代,節約開發、測試、部署的大量時間。并且,整個過程全程可見,使團隊更容易理解應用的創建和工作過程。
? 更高效的資源利用。運行Docker容器不需要額外的虛擬化管理程序(Virtual Machine Manager, VMM,以及Hypervisor)的支持,Docker是內核級的虛擬化,可以實現更高的性能,同時對資源的額外需求很低。與傳統虛擬機方式相比,Docker的性能要提高1~2個數量級。
? 更輕松的遷移和擴展。Docker容器幾乎可以在任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、個人電腦、服務器等,同時支持主流的操作系統發行版本。這種兼容性讓用戶可以在不同平臺之間輕松地遷移應用。
? 更簡單的更新管理。使用Dockerfile,只需要小小的配置修改,就可以替代以往大量的更新工作。所有修改都以增量的方式被分發和更新,從而實現自動化并且高效的容器管理。
3. Docker與虛擬機比較
作為一種輕量級的虛擬化方式,Docker在運行應用上跟傳統的虛擬機方式相比具有如下顯著優勢:
? Docker容器很快,啟動和停止可以在秒級實現,這相比傳統的虛擬機方式(數分鐘)要快得多;
? Docker容器對系統資源需求很少,一臺主機上可以同時運行數千個Docker容器(在IBM服務器上已經實現了同時運行10K量級的容器實例);
? Docker通過類似Git設計理念的操作來方便用戶獲取、分發和更新應用鏡像,存儲復用,增量更新;
? Docker通過Dockerfile支持靈活的自動化創建和部署機制,以提高工作效率,并標準化流程。
Docker容器除了運行其中的應用外,基本不消耗額外的系統資源,在保證應用性能的同時,盡量減小系統開銷。傳統虛擬機方式運行N個不同的應用就要啟用N個虛擬機(每個虛擬機需要單獨分配獨占的內存、磁盤等資源),而Docker只需要啟動N個隔離得“很薄的”容器,并將應用放進容器內即可。應用獲得的是接近原生的運行性能。
當然,在隔離性方面,傳統的虛擬機方式提供的是相對封閉的隔離。但這并不意味著Docker不安全。Docker利用Linux系統上的多種防護技術實現了嚴格的隔離可靠性,并且可以整合眾多安全工具。從1.3.0版本開始,Docker重點改善了容器的安全控制和鏡像的安全機制,極大地提高了使用Docker的安全性。在已知的大規模應用中,目前尚未出現值得擔憂的安全隱患。
表1-1比較了使用Docker容器技術與傳統虛擬機技術的各種特性,可見容器技術在很多應用場景下都具有巨大的優勢。
表1-1 Docker容器技術與傳統虛擬機技術的比較

- C++ Primer習題集(第5版)
- SQL Server 2016從入門到精通(視頻教學超值版)
- Mastering Entity Framework
- MongoDB for Java Developers
- Web開發的貴族:ASP.NET 3.5+SQL Server 2008
- OpenStack Cloud Computing Cookbook(Fourth Edition)
- Implementing Cisco Networking Solutions
- Learning Data Mining with R
- Learning Continuous Integration with TeamCity
- C/C++數據結構與算法速學速用大辭典
- .NET 4.0面向對象編程漫談:應用篇
- Julia High Performance(Second Edition)
- Python Digital Forensics Cookbook
- Instant GLEW
- Blender 3D Cookbook