Docker真的支持原生態(tài)Mac和Windows了嗎?
原創(chuàng)今天看新聞,突然有爆料說(shuō)docker已經(jīng)支持Mac和Windows了,這不禁讓我感慨發(fā)展之迅速。作為跟MFC,,Visual Studio, WinDBG,.Net打交道多年的我,甚是興奮。不過(guò),當(dāng)我仔細(xì)閱讀原文后,發(fā)現(xiàn)跟我們想的還相差甚遠(yuǎn)。
“Faster and more reliable: no more VirtualBox! The Docker engine is running in an Alpine Linux distribution on top of an xhyve Virtual Machine on Mac OS X or on a Hyper-V VM on Windows, and that VM is managed by the Docker application. You don’t need docker-machine to run Docker for Mac and Windows.”
僅憑這一句,我就頓感失望。Docker和VM的***區(qū)別就是,一個(gè)是操作系級(jí)虛擬化,一個(gè)是硬件級(jí)虛擬化。因此, Docker本身就是可以運(yùn)行在VM之上的。你不能說(shuō)在windows上裝個(gè)虛擬機(jī),然后再運(yùn)行一個(gè)Docker,就說(shuō)docker支持windows吧。為了讓docker能在VM上運(yùn)行,docker專門開發(fā)了Docker Toolbox和docker-machine,其核心都是通過(guò)虛擬機(jī)來(lái)運(yùn)行docker,只不過(guò)是幫用戶簡(jiǎn)化了中間的部署和配置流程。針對(duì)本次的Beta發(fā)布,更多的是優(yōu)化的工作。筆者也提交了試用申請(qǐng),然后進(jìn)入了長(zhǎng)長(zhǎng)的waiting-list,不過(guò)我猜測(cè),這次的版本改進(jìn)主要體現(xiàn)在以下幾個(gè)方面:
- 通過(guò)使用輕量級(jí)的linux發(fā)行版本,使VM更小,部署和安裝更快。Alpine linux是一個(gè)非常輕量級(jí)的發(fā)型版,而且docker也有計(jì)劃讓alpine作為默認(rèn)的基礎(chǔ)鏡像。
- 原生工具集支持。以前我們?cè)诜莑inux下運(yùn)行時(shí),都需要借助于類似MINGW的工具,模擬一下Shell。而這次Beta的退出,在這方面肯定是加強(qiáng)了,支持了原生態(tài)的命令。
- 更好的網(wǎng)絡(luò)支持??赡軙?huì)將Docker的網(wǎng)絡(luò)系統(tǒng)集成到Mac和Windows的原生網(wǎng)絡(luò)系統(tǒng)中,方便用戶配置。
- 更好的對(duì)系統(tǒng)沙盒的適配。OS X和Windows本身都是支持沙盒的,可能在這方面會(huì)有所加強(qiáng)。
這一系列的改進(jìn),不可謂不大??吹贸鰀ocker得到了Microsoft和Mac的很大幫助,同時(shí)也歸功于docker在Unikernal 領(lǐng)域的收購(gòu)。那么為什么原生態(tài)的windows和mac那么難支持呢?這必須從docker的基本原理說(shuō)起:
- CGroup技術(shù),這是用來(lái)控制CPU、內(nèi)存、網(wǎng)絡(luò)等資源限制的,這需要內(nèi)核的支持,而目前只有l(wèi)inux的支持比較好。
- lNamespace技術(shù),這是用來(lái)做用戶資源隔離的,注意這里是隔離,是讓一個(gè)進(jìn)程成為一個(gè)沙盒,擁有完全獨(dú)立的PID,網(wǎng)絡(luò)棧,主機(jī)名等,而這一技術(shù)目前也是只有l(wèi)inux支持比較好。
不過(guò)話說(shuō)回來(lái),Microsoft也不是吃素的,其實(shí)Windows Server 2016已經(jīng)支持了原生態(tài)的docker,不過(guò)它基本上是完全重寫了,連基礎(chǔ)鏡像都是windows server,這一點(diǎn)就很難融入docker的生態(tài)圈,畢竟Registry里面的基本都是運(yùn)行在linux下的鏡像。
作者介紹:晏?hào)|,精靈云(www.ghostcloud.cn)聯(lián)合創(chuàng)始人,20年編程經(jīng)驗(yàn),全棧工程師,曾任索貝數(shù)碼及賽門鐵克架構(gòu)師架構(gòu)師,一直從事SAN、NAS及對(duì)象存儲(chǔ)等分布式系統(tǒng)研發(fā)工作。2013年開始研究LXC和Docker相關(guān)技術(shù),目前主要從事容器云平臺(tái)鏡像及倉(cāng)庫(kù)方面研發(fā)工作。