Docker提高了軟件測試的速度,毫無疑問,任何研發團隊都應該選擇它。下面我來告訴你爲何。linux
一直以來,部署測試環境是一個耗時而且繁雜的工做。即使測試環境中運行正確,開發、測試和生產環境的差異也會致使生產環境中出現問題。虛擬機經過拷貝一份操做系統數據解決了這個問題,代價是運行效率的下降和數Gb的磁盤空間。git
Docker,做爲一個輕量、快速的Linux虛擬化工具,應運而生。github
首先,任何一個技術人員均可以幾秒內在本地搭建一個測試環境。容器取代了虛擬機,事實上做爲一個進程運行在操做系統之上,因此可以秒間啓動。鏡像取代了虛擬機文件,但具備更多特性,若是本地存儲了一個鏡像,在下次構建或者拉取時只會加載差別的部分。web
對於採用Docker的團隊,搭建測試環境是很經常使用的,簡化這類操做帶來的效率也更明顯。若是軟件架構延伸到staging和production,那麼在staging和production環境交付也能夠這麼簡單。docker
另外一個特性是它賦予你建立全新的虛擬設施的能力,你能夠把虛擬設施添加到你的服務器集羣中,通常稱之爲」green」 build。」green」 build環境是生產環境的拷貝,最後一輪迴歸測試在這個環境下進行。測試完成之後,經過部署腳本修改服務器爲production模式。以前的production服務器,通常稱之爲」blue」 build,被下線,以備代碼回滾。上述的構建和部署過程,咱們稱之爲」green/blue deployment」,咱們也能夠經過其餘技術實現,Docker使這些操做更爲簡單。數據庫
基於windows的軟件編譯成一個單獨的安裝程序時,web軟件有一個不一樣的交付:建立運行在一臺服務器上。傳統的網站發佈管理包含創造3-4個不一樣的層:開發、測試、生產,有時候還有運行時環境。這種模式裏,至少每層有一臺服務器以及一系列的運行規則。當軟件以及爲下一個操做準備好時,構建可能部署到下一層服務器。windows
虛擬機改變了這一切,服務器容下每一個團隊成員建立一個不一樣的服務。這容許每一個分支能夠獨立測試,在最後階段合併到主線,而不須要在新硬件上花費成千上萬美圓。每人一個虛擬機,這也使得當測試人員在秒級機器上重複測試產品補丁時,開發者在本地機上排除產品bug成爲可能。一部分測試人員對pre-release版本進行迴歸測試,其餘測試人員能夠測試下一版本,同時研發人員能夠在新分支上開發新特性。服務器
虛擬機的問題是大小和速度。每一個虛擬機包含一整個host操做系統(簡稱OS),建立一個虛擬機就意味着佔據數GB的空間,建立一整個新運行系統,而後安裝「構建」在操做系統裏。更糟糕的是,操做系統在應用空間裏運行——這就像在宿主OS裏還有一個OS。虛擬機的boot/ install進程可能須要幾分鐘到1小時,這對於中斷流而言非常夠了。在不影響性能的狀況下技術人員可能會在筆記本上啓動host 1-2個虛擬機;試着在網絡上按需取得虛擬機的建立,這徹底是「私有云」項目。網絡
Docker在OS內核而不是應用空間運行,換句話說,它是OS的一部分。做爲OS的一部分運行限制了Docker只能在比較新的linux內核上運行,包括host機和容器,可是這樣也很大程度上簡化了OS的進程管理。Docker在內核裏運行減小了不少冗餘。舉個例子,一個宿主機上的全部Docker容器共享一個內核,而每一個vm都須要一個內核。這意味着Docker容器不須要操做系統式的「boot」(啓動),由於容器基於的內核一直在運行。架構
全部這些特性使得Docker可以快速地建立機器,全部進入生產環境的機器都是基於鏡像的拷貝,而不是一個現有的服務器的補丁。
這種在broken state狀況下中止和保存一個容器的能力,使得在Docker環境下調試更爲容易。若是調試破壞了環境條件,或者在某些方式下「弄髒」環境,從新恢復broken state是很是簡單的。Docker對於任何應用在任何Linux服務器上都是可用或者運行着的;容器的快啓動和可丟棄性對於批處理等任務特別方便。
Docker容器有一些工具幫助你配置甚至模擬完整的基礎設施,這樣團隊生活更happy。其中最受歡迎的是Docker Compose,以前部署配置複雜的多個程序,如今僅僅一條命令就ok了。
本地的Docker和雲服務器上的docker並無區別,但確保應用到production就徹底不同了。Docker早起像是Wild West,當它開始進入生產的時候。共同的挑戰是 容器編排,即將Docker化的應用和服務,規劃到計算機資源的集羣中。這意味着企業不在意容器在哪裏運行,只在意它們在運行並可以正確地處理請求,不論是應用是網站交互,內部服務、數據庫,仍是消息隊列。
編排領域領域的大玩家有AWS EC2 Container Service,,Docke Swarm 和Mesos.。編排的服務能夠很好地管理容器,同時面臨着一些關鍵問題,好比blue/green部署,容器恢復,負載均衡,服務恢復和容器網絡互聯。
當評估Docker在生產環境下的應用時,固然其餘的挑戰好比日誌、環境變量系統配置。看你是否準備遷移到Docker最好的標誌就是看你離12 Factor App有多近。
Don Taylor在CodeMash的Docker教程讓觀衆瞭解了Linux上安裝Docker、建立容器和在容器中執行命令。要深刻了解,github是最好的選擇。
安裝一個Linux虛擬機、安裝Docker、建立容器,而後本身去決定是否在你的組織裏使用Docker技術。
本文由趙帥龍編譯整理,原文連接:http://blog.tenxcloud.com/?p=742