Docker技術概觀
https://mypoint.gitbooks.io/docker-rocker/content/ by 風鴿 ( [email protected] )
Docker是新一代虛擬化技術,它不只顛覆了開發者打造應用程式的思維,推翻了MIS舊有系統維運模式,新興的搶手職務DevOps因此得重新定義角色,雲端IaaS和PaaS市場版圖更瀰漫一股沒跟上就淘汰的洗牌壓力,不論是Google、Amazon、微軟、VMware都紛紛爭相擁抱加入這場顛覆性雲端架構大賽。它之所以受到如此大 的關注必然有因,Docker是一種以應用程式為中心的虛擬化技術,輕盈富彈性的特色,讓雲端平台設計得以效率的運算資源運用進而降低成本,同時立足在開 源技術之上,高互通性與標準化更是讓這些雲平台供應商趨之若鶩,Google用每周啟用20億Container的驚人數量昭告天下Microservices Architecture新IT架構變革的來臨。
不過Docker發展至今已形成一個相當複雜的生態圈,相關技術非常多,對初學者入門的門 檻不低,如果又是經年習慣在微軟平台討生活的IT人想跨入這一OSS(開源)陌生領域更是痛苦,不過隨著微軟近來逐漸也往開放與開源靠攏,趨勢明確!
其實Docker與傳統虛擬化技術VM非常的類似,從了解它們間的差異來理解Docker是不錯切入點,過去我們可以建立VM image,寄宿在異(同)質的的實體主機(Host)中,讓應用程式封裝在自己的作業環境獨立運行。Docker Image也是類似概念來打包應用程式,讓應用程式可以在Host主機中各自隔離獨立運行, 而每個生成的個體(Instance)稱之為Docker Container。但不同之處在於每個VM Instance都有各自獨立的完整OS(Guest OS)環境,但Docker Container卻是共享Host OS的資源(例如Container與外通訊時靠與Host間的port forward來達成),也因此當我們登入Docker Container時會發現其作業環境會與Host環境類似(如果說Docker與Host是母子般的血緣關係,那麼VM與Host就如同與代理孕母的微弱關連,前者產生自然有快感,但後者可能就得開膛剖 腹一點也不輕鬆~~),如果Host是Linux那麼Docker Container(LXC)內的環境也應該是Linux, 換言之,日後新版Windows server應該是無法直接運行現在已建好Docker Linux Image的。
現階段只有Linux已實現Docker Container實作,可以提供原生Docker Host的環境,那麼 如果是Windows或MAC怎麼辦?在Windiws內建立Linux的VM當Docker Host就能解決啦(參考boot2docker)!
但感覺這有點脫褲放屁?多一層VM虛擬層讓效能更差架構更複雜?其實還好,因為Type-1hypervisor虛擬技術效能損耗不大,但卻換來更具彈性的架構。那如果影響不大,那為何還要苦苦等待微 軟釋出新一代支援Docker的Win2016或Nano Server呢?別忘了先前提到的Docker Container特性,其環境是需與Host一致,除非現有的AP全都用.Net core或Mono改寫,不然很多原生的微軟AP或.Net AP都必須等新的Windows server發行後,有了Windows Container後才能夠封裝成Docker Image順利在這樣虛擬平台中運行,以後也許像如下這樣:(合理推論,VM技術不會因Docker出現而消失,反而會更完整壯大!)
不過跡象顯示,Nano server可能只能運行.Net Core的應用程式,不過Windows Container似乎會有Windows Core Container與Windows Nano Container兩種,.Net Framework的應用程式應該是可以運行在Windows Core Container,不過這些僅是猜測還無法證實。
Q&A
1. 若Docker Host還是VM而非實體Host,除了因應滿足Docker Container在不同OS的實體Host上可執行外,還有哪些好處?
現況只有Linux可當Docker Host,透過VM可以讓Windows/MAC好像也可運行(但其實是二房東)
現存Cloud Platform都已經對VM提供完善的支援,透過Docker-Machine機制可以要求他們供裝VM當Docker Host,比拿實體機省力很多
Multi-tenancy的運算單元配置,從以VM為單位,現在多一層細到更小的Docker Container為單位,運算單元調度更有效運與節省成本