Docker項目的發起人、Docker Inc .的CTO所羅門·海克斯(Solomon Hykes)認為,Docker在正確的地點和正確的時間順應了正確的趨勢——即高效地構建應用。現在開發者需要能夠輕松地創建運行在雲平臺上的應用,也就是說,應用必須能夠離開底層機器,同時必須隨時隨地可用。因此,開發者需要壹種創建分布式應用的方法,Docker可以提供這種方法。
舉壹個簡單的應用場景的例子。假設壹個用戶試圖基於最常見的LAMP(Linux+Apache+MySQL+PHP)組合來運營壹個網站。按照傳統的做法,首先需要安裝Apache、MySQL和PHP,以及它們所依賴的環境。然後分別配置(包括創建合適的用戶,配置參數等。);大量操作後,需要進行功能測試,看是否正常工作;如果不正常,就意味著更多的時間成本和不可控的風險。可以想象,如果增加更多的應用,事情會變得更加難以處理。
更可怕的是,服務器壹旦需要遷移(比如從阿裏雲遷移到騰訊雲),往往需要重新部署和調試。這些瑣碎枯燥的“體力勞動”大大降低了工作效率。
Docker提供了壹種更智能的方法,通過容器打包應用程序,這意味著遷移只需要在新的服務器上啟動所需的容器。這無疑會節省大量寶貴的時間,降低部署過程中出現問題的風險。
Docker在開發和運維方面的優勢
對於開發和運維(DevOps)人員來說,最大的夢想就是壹次性創建或配置好應用,讓應用在任何環境、任何時間都能正常運行。Docker就是能達到這個終極目的的瑞士軍刀。
具體來說,Docker在開發和運維過程中有以下優勢。
更快的交付和部署。使用Docker,開發人員可以使用鏡像快速構建標準開發環境。開發完成後,測試人員和操作人員可以使用相同的環境直接部署代碼。Docker可以快速創建和刪除容器,實現快速叠代,節省大量開發、測試和部署時間。而且每壹步都有清晰的配置和操作,整個過程都是可見的,更便於團隊了解應用的創建和工作過程。
更有效地利用資源。Docker容器的運行不需要額外的虛擬機管理器(VMM和管理程序)的支持。它是內核級虛擬化,可以實現更高的性能,對資源的額外要求低。
更容易遷移和擴展。Docker容器幾乎可以運行在任何平臺上,包括物理機、虛擬機、公有雲、私有雲、個人電腦、服務器等等。這種兼容性允許用戶輕松地在不同平臺之間遷移應用程序。
更簡單的更新管理。使用Dockerfile,只需要對配置進行很小的修改,就可以取代過去大量的更新工作。並且所有的修改都以增量的方式分發和更新,從而實現自動化和高效的容器管理。
Docker和虛擬機比較
Docker作為壹種輕量級的虛擬化方法,在運行應用程序方面相比傳統的虛擬機方法有著明顯的優勢:
Docker容器速度很快,啟動和停止都可以秒級實現,比傳統的虛擬機方式快很多。
Docker容器需要的系統資源很少,數千個Docker容器可以同時在壹臺主機上運行。
Docker方便用戶通過類似Git的操作獲取、分發和更新應用映像,指令簡潔,學習成本低。
Docker通過Dockerfile配置文件支持靈活的自動創建和部署機制,提高工作效率。
Docker容器除了運行其中的應用程序之外,基本不消耗額外的系統資源,保證了應用程序的性能,最小化了系統開銷。在傳統的虛擬機模式下運行n個不同的應用程序,需要啟動n個虛擬機(每個虛擬機需要單獨分配獨占的內存、磁盤等資源),而Docker只需要啟動n個隔離的容器,將應用程序放入容器中。
當然,在隔離方面,傳統的虛擬機方式多了壹層隔離。但這並不意味著Docker不安全。Docker在Linux系統上使用各種保護機制來實現嚴格可靠的隔離。從1.3版本開始,Docker引入了安全選項和鏡像簽名機制,大大提高了使用Docker的安全性。