淺析Docker容器的應用場景

過去幾年開源界以OpenStack爲表明的雲計算持續火了很久,這兩年忽然又冒出一個叫Docker的容器技術,其發展之迅猛遠超預料。

網上介紹Docker容器的文章已經不少了,用一句話歸納:Docker是一種輕量虛擬化的容器技術,提供相似虛擬機的隔離功能,並使用了一種分層的聯合文件系統技術管理鏡像,能極大簡化環境運維過程。

Docker容器雲則是使用Docker技術打造的一站式容器雲服務平臺,即CaaS(Containers as a Service)——容器即服務;能夠將它簡單看做爲PaaS的升級版,使用Docker容器技術的CaaS平臺功能更強大,使用靈活,部署更方便。

Docker容器做爲一個全新的概念雖然廣受關注,可是對於如何使用Docker,將容器技術真正落地用起來,目前估計不少人尚未很是清晰的思路。寫這篇文章主要目的就是根據Docker容器的特色,描述Docker容器到底能用來幹什麼,達到拋磚引玉的目的。

能夠認爲容器雲是處於IaaS和PaaS之間的位置,容器編排集成度越高越像PaaS,反之越像IaaS,據此這裏簡單地將Docker容器的使用分兩大類:主機和服務。html

 

1. 做爲雲主機使用

相比虛擬機來講,容器使用的是一系列很是輕量級的虛擬化技術,使得其啓動、部署、升級跟管理進程同樣迅速,用起來靈活又感受跟虛擬機同樣沒什麼區別,因此有些人直接使用Docker的Ubuntu等鏡像建立容器,看成輕量的虛擬機來使用。

特別是如今隨着系統、軟件愈來愈多,開發測試環境愈來愈複雜,僅僅靠多用戶共享的這種方式節省資源帶來的後果就是環境徹底不可控。Docker容器的出現讓每一個人僅僅經過一個幾KB的Dockerfile文件就能構建一個自定義的系統鏡像,進而啓動一個完整系統容器,讓人人都能成爲 DevOps。

容器雲主機也徹底能像普通主機同樣隨意啓動、穩定運行、關機、重啓,因此在上面隨意搭建博客、小網站等徹底不在話下。除了經常使用的託管服務業務,你徹底能夠自定義任何用法,包括在上面使用任何雲服務提供商的雲硬盤、雲數據庫,部署各類你須要的服務。

目前Docker容器管理服務器在Windows下運行須要藉助Toolbox工具,雖然微軟在2014年末就計劃提供Windows Server容器鏡像但目前尚未發佈,因此想在Docker裏跑Windows系統的容器的人還須要等待,但願到時候微軟能裁剪出一種輕巧的Windows基礎鏡像,畢竟容器自己就是一種更輕量級的系統。前端

 

2. 做爲服務使用

若是你僅僅把Docker容器看成一個輕量的固定虛擬機用,那其實只能算是另類用法,Docker容器最重要價值在於提供一整套平臺無關的標準化技術,簡化服務的部署、升級、維護,只要把須要運維的各類服務打包成標準的集裝箱,就能夠在任何能運行Docker的環境下跑起來,達到開箱即用的效果,這個特色纔是Docker容器風靡全球的根本緣由。

下面重點列舉幾個使用Docker容器部署服務的場景。git

 

1. Web應用服務

Web應用服務是使用最普遍的一類服務,典型的架構是前端一個Tomcat + Java服務,後端MySQl數據庫。

前端的Java Web服務器是最適合使用Docker容器的,先將; font-family:" helvetica="" background-color:="" />
由於web應用程序通常是無狀態的,隨着業務訪問量增減,用一樣的鏡像新建、銷燬容器便可輕鬆實現伸縮(前面還需配上DNS域名或者負載均衡的服務),例以下圖所示。web

Docker容器的Web服務docker

 

2. 持續集成和持續部署

互聯網行業倡導敏捷開發,持續集成部署CI/CD即是最典型的開發模式。
使用Docker容器雲平臺,就能實現從代碼編寫完成推送到git/svn後,自動觸發後端CaaS平臺將代碼下載、編譯並構建成測試Docker鏡像,再替換測試環境容器服務,自動在Jenkins或者Hudson中運行單元/集成測試,最後測試經過後,立刻就能自動將新版本鏡像更新到線上,完成服務升級。整個過程全自動化,一鼓作氣,最大程度地簡化了運維成本,並且保證線上、線下環境徹底一致,線上服務版本與git/svn發佈分支也實現統一。數據庫

Docker的持續集成持續部署流程後端

 

3. 微服務架構使用

若是說上面兩種應用場景還不足以體現出與傳統的PaaS平臺相比的巨大優點的話,那麼對微服務的架構這種複雜又靈活的使用場景的無縫支持絕對具備革命意義。

微服務架構將傳統分佈式服務繼續拆分解耦,造成一些更小服務模塊,服務模塊之間獨立部署升級,這些特性與容器的輕量、高效部署不謀而合。

以下圖所示,每一個容器裏可使用徹底不一樣環境的鏡像服務,容器啓動即產生了一個獨立的微服務主機節點(獨立的網絡IP),上層服務與下層服務之間服務發現經過環境變量注入、配置文件掛載等多種方式靈活解決,並且還能夠直接將雲平臺提供的各類雲服務與自定義的微服務整合組成一個強大的服務集羣。

更重要的是,擁有如此多服務的集羣環境遷移、複製也很是輕鬆,只需選擇好各服務對應的Docker服務鏡像、配置好相互之間訪問地址就能很快搭建出一份徹底同樣的新集羣。服務器

Docker容器搭建微服務架構例子網絡

 

4. 其餘應用場景

跑一次性/定時任務架構

有些狀況下用戶只是須要執行一次性的任務,例如計算出某個結果便可,若是採用傳統的服務模式,服務器須要一直運行,形成的極大的資源浪費。而容器的快速建立、銷燬能很靈活知足這種徹底按需付費的場景。只要製做好一次性程序運行的Docker鏡像,當須要運行的時候實時經過鏡像建立出容器來執行任務,程序執行完成容器自動退出釋放資源。

固然,容器自己只包含靜態的鏡像和上層的臨時可讀寫層,運行的數據是不會持久化的,因此任務相關數據能夠從雲存儲、雲硬盤或者雲端數據庫裏讀寫。

科學計算服務

在信息化的今天,除了計算機領域,天然科學等領域也愈來愈須要藉助一些複雜的程序軟件來作計算分析,若是還要求他們學習繁雜的服務運維部署就太麻煩了,國外就有科研人員用Docker自行部署IPython Notebook服務器開展數據科學研究的例子。

遊戲和網聯網等

騰訊曾宣稱他們已經將Docker容器用在遊戲服務端使用Docker,由於對遊戲不瞭解,具體怎麼用的沒太關注,有須要的人能夠參考下他們的使用思路。

 

來源:http://www.youruncloud.com/docker/1_84.html

相關文章
相關標籤/搜索