本文來自網易雲社區
作者:婁超
過去幾年開源界以openstack為代表的雲計算持續火了好久,這兩年突然又冒出一個叫Docker的容器技術,其發展之迅猛遠超預料。網上介紹Docker容器的文章已經很多了,用一句話概括:Docker是一種輕量虛擬化的容器技術,提供類似虛擬機的隔離功能,並使用了一種分層的聯合文件系統技術管理鏡像,能極大簡化環境運維過程。
Docker容器雲則是使用Docker技術打造的一站式容器雲服務平台,即CaaS(Containers as a Service)-容器即服務;可以將它簡單看作為PaaS的升級版,使用Docker容器技術的CaaS平台功能更強大,使用靈活,部署更方便。
Docker容器作為一個全新的概念雖然廣受關注,但是對於如何使用Docker,將容器技術真正落地用起來,目前估計很多人還沒有非常清晰的思路。寫這篇文章主要目的就是根據Docker容器的特點,描述Docker容器到底能用來干什么,達到拋磚引玉的目的。
可以認為容器雲是處於IaaS和PaaS之間的位置,容器編排集成度越高越像PaaS,反之越像IaaS,據此這里簡單地將Docker容器的使用分兩大類:主機和服務。
一、作為雲主機使用
相比虛擬機來說,容器使用的是一系列非常輕量級的虛擬化技術,使得其啟動、部署、升級跟管理進程一樣迅速,用起來靈活又感覺跟虛擬機一樣沒什么區別,所以有些人直接使用Docker的Ubuntu等鏡像創建容器,當作輕量的虛擬機來使用。
特別是現在隨着系統、軟件越來越多,開發測試環境越來越復雜,僅僅靠多用戶共享的這種方式節省資源帶來的后果就是環境完全不可控。Docker容器的出現讓每個人僅僅通過一個幾KB的Dockerfile文件就能構建一個自定義的系統鏡像,進而啟動一個完整系統容器,讓人人都能成為 DevOps。
容器雲主機也完全能像普通主機一樣隨意啟動、穩定運行、關機、重啟,所以在上面隨意搭建博客,小網站,VPN代理服務器等也完全不在話下。除了常用的托管服務業務,你完全可以自定義任何用法,包括在上面使用任何雲服務提供商的雲硬盤、雲數據庫,部署各種你需要的服務。
目前docker容器管理服務器在windows下運行需要借助Toolbox工具,雖然微軟在2014年底就計划提供Windows Server容器鏡像但目前還沒有發布,所以想在docker里跑windows系統的容器的人還需要等待,希望到時候微軟能裁剪出一種輕巧的windows基礎鏡像,畢竟容器本身就是一種更輕量級的系統。
二、作為服務使用
如果你僅僅把docker容器當作一個輕量的固定虛擬機用,那其實只能算是另類用法,Docker容器最重要價值在於提供一整套平台無關的標准化技術,簡化服務的部署、升級、維護,只要把需要運維的各種服務打包成標准的集裝箱,就可以在任何能運行docker的環境下跑起來,達到開箱即用的效果,這個特點才是Docker容器風靡全球的根本原因。下面重點列舉幾個使用docker容器部署服務的場景
1、Web應用服務
Web應用服務是使用最廣泛的一類服務,典型的架構是前端一個Tomcat + Java服務,后端mysql數據庫。前端的Java web服務器是最適合使用Docker容器的,先將Java運行環境、web服務器直接打包成一個通用的基礎docker鏡像,之后再將自定義應用代碼或編譯程序包加入到該基礎鏡像中就能產生一個新的應用鏡像,最后通過docker服務立馬就能以容器的形式啟動web應用服務。因為web應用程序一般是無狀態的,隨着業務訪問量增減,用同樣的鏡像新建、銷毀容器即可輕松實現伸縮(前面還需配上DNS域名或者負載均衡的服務),例如下圖所示。
Docker容器的web服務
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,因為對游戲不了解,具體怎么用的沒太關注,有需要的人可以參考下他們的使用思路。
關於物聯網的應用,這里有一篇介紹如何使用 Docker 容器快速開發物聯網應用程序(IoT)的翻譯文章。
網易雲計算基礎服務是一個為開發者打造的基於Docker的容器雲,提供安全靈活的容器即服務,兼具應用引擎類PaaS服務的便利性和IaaS服務的靈活性,是虛擬主機的進化版本。為滿足不同用戶需求,如上文所述,目前同時提供容器(主機)和服務兩種使用方式,容器可看成是一個獨立的主機節點,提供ssh客戶端登錄實現自由操作;服務則是一組無狀態的可隨時伸縮的服務組,對外通過網易的負載均衡暴漏統一服務入口提供服務。
網易雲計算基礎服務的docker鏡像倉庫里包含最常用的一些公有鏡像供大家直接使用,用戶還可以在上面管理自定義的私有鏡像,通過偏平的用戶私有網絡實現內部容器之間的互通。對無狀態容器服務提供可靠、可伸縮的在線數據庫服務(RDS),前端還能配置負載均衡服務NLB方便按需擴容和縮容。此外,還可以在平台上配置的監控服務,提供郵件、短信報警提醒。
對於無法自行維護一整套容器服務的小公司、個人用戶,通過雲計算基礎服務也可以很方便就能嘗試體驗docker容器的魅力,網易雲計算基礎服務已經全面開放注冊,最近還打出初次充值1元即可返30元的優惠活動,歡迎試用!
本文來自網易雲社區,經作者婁超授權發布
相關文章:
【推薦】 搜索湊單頁大促顯示延遲方案設計