容器和虛擬機(jī)最根本的區(qū)別是一個(gè)用于應(yīng)用程序,另一個(gè)是為整個(gè)操作系統(tǒng)設(shè)計(jì)的。自從Linux上的容器變得流行以來(lái),找出容器和虛擬機(jī)之間的區(qū)別變得更加棘手??梢粤私馊萜骱吞摂M機(jī)之間的差異。
容器和
虛擬機(jī)最根本的區(qū)別是一個(gè)用于應(yīng)用程序,另一個(gè)是為整個(gè)操作系統(tǒng)設(shè)計(jì)的。自從Linux上的容器變得流行以來(lái),找出容器和虛擬機(jī)之間的區(qū)別變得更加棘手??梢粤私馊萜骱吞摂M機(jī)之間的差異。
容器vs虛擬機(jī)——應(yīng)用程序與操作系統(tǒng)
首先要了解的有關(guān)容器和虛擬機(jī)的一個(gè)區(qū)別是,一個(gè)用于應(yīng)用程序,另一個(gè)是為整個(gè)操作系統(tǒng)設(shè)計(jì)的。這就是為什么你經(jīng)常會(huì)看到一些企業(yè)應(yīng)用程序運(yùn)行在容器而不是自己的虛擬機(jī)上的原因。
在虛擬機(jī)上使用容器有一些有意思的優(yōu)點(diǎn)。
容器最大的優(yōu)點(diǎn)之一是可以預(yù)留比虛擬機(jī)更少的資源。請(qǐng)記住,容器本質(zhì)上是單個(gè)應(yīng)用程序,而虛擬機(jī)需要資源來(lái)運(yùn)行整個(gè)操作系統(tǒng)。
更簡(jiǎn)單地說(shuō),請(qǐng)考慮以下內(nèi)容:如果你需要運(yùn)行MySQL、NGINX或其他服務(wù)的多個(gè)實(shí)例,使用容器是非常有意義的。
但是,如果你需要在自己的服務(wù)器上運(yùn)行完整的LAMP堆棧,運(yùn)行虛擬機(jī)就很不錯(cuò)。
虛擬機(jī)為你提供更大的靈活性來(lái)選擇操作系統(tǒng),并在你認(rèn)為合適的情況下進(jìn)行升級(jí)。相比之下,容器意味著運(yùn)行已配置應(yīng)用程序的容器在操作系統(tǒng)升級(jí)方面與
主機(jī)是隔離的。
容器vs虛擬機(jī)——用例場(chǎng)景
筆者最喜歡使用容器最有意義的例子之一就是Linux庫(kù)版本。
例如,假設(shè)你有一個(gè)需要特定版本Python的關(guān)鍵任務(wù)應(yīng)用程序。然后你在運(yùn)行應(yīng)用程序的盒子上進(jìn)行更新,突然發(fā)現(xiàn)Python版本發(fā)生了變化,導(dǎo)致應(yīng)用程序無(wú)法正常工作。
使用容器的另一個(gè)關(guān)鍵好處是你可以把一個(gè)應(yīng)用程序放到一個(gè)容器中,然后在任何支持該容器類型的操作系統(tǒng)上運(yùn)行它。
其中一個(gè)例子就是,當(dāng)你想在不同的Linux發(fā)行版上構(gòu)建類似的應(yīng)用程序環(huán)境。通過(guò)使用容器,你就可以實(shí)現(xiàn)。
容器提供了可移動(dòng)性。
甚至可以認(rèn)為,容器對(duì)于快速的跨發(fā)行版部署更有意義,而虛擬機(jī)在像運(yùn)行LAMP堆棧這樣的單一應(yīng)用程序使用情況下是有意義的。
容器vs虛擬機(jī)——安全
普遍認(rèn)為,與容器相比,虛擬機(jī)提供了更多的安全性。這并不是說(shuō)容器不安全,而是指默認(rèn)情況下虛擬機(jī)提供了更強(qiáng)的隔離。請(qǐng)記住,容器共享系統(tǒng)資源,而虛擬機(jī)不支持這么做。
在運(yùn)行容器時(shí),可以采取一些措施來(lái)降低風(fēng)險(xiǎn),包括避免超級(jí)用戶權(quán)限,確保從可信源獲取容器,并且保持最新?tīng)顟B(tài)。謝天謝地,有些容器是數(shù)字簽名的,這有助于確定你從可信源獲取容器。
最后,你需要保持一個(gè)容器的單一職能。一旦你開(kāi)始在一個(gè)容器下結(jié)合了其他的軟件職能,你會(huì)發(fā)現(xiàn)你最好用虛擬機(jī)代替。重申一次,容器是為了單一用途的應(yīng)用程序,虛擬機(jī)是為了多用途的應(yīng)用程序。堅(jiān)持這種方法,你將在安全性和總體功能方面處于更好的狀況。
容器vs虛擬機(jī)——選擇合適的工具
無(wú)論虛擬機(jī)或容器類型如何,選擇適合需求的關(guān)鍵都?xì)w結(jié)于研究每個(gè)選項(xiàng)的能力。在容器領(lǐng)域,Docker提供了強(qiáng)大的企業(yè)解決方案。這吸引了一些關(guān)注Docker容器的公司,因?yàn)楣局廊绻霈F(xiàn)任何問(wèn)題,他們可以得到所需要的支持。Docker也被認(rèn)為是企業(yè)用戶友好的選擇,特別是在Docker Swarms中。將Docker Swarms與Kubernetes相比,Kubernetes在高級(jí)環(huán)境中的設(shè)置要復(fù)雜得多。
回到虛擬機(jī),筆者總是發(fā)現(xiàn)Virtualbox可以提供更好的面向桌面的虛擬機(jī)環(huán)境,而VMware在服務(wù)器方面做了各種各樣的產(chǎn)品。
VMware擁有從存儲(chǔ)到
云服務(wù)器解決方案的各種虛擬機(jī)解決方案。還有其他選擇(各種管理程序等),但筆者認(rèn)為VirtualBox和VMware很好地代表了桌面到
服務(wù)器虛擬化的兩個(gè)領(lǐng)域。
容器vs虛擬機(jī)——贏家是?
在試著決定是容器還是虛擬機(jī)之前,請(qǐng)考慮以下事項(xiàng)。你可以在虛擬機(jī)上運(yùn)行容器。了解這一點(diǎn)很重要,因?yàn)闆](méi)有明顯的贏家或輸家。事實(shí)上,這兩種技術(shù)滿足完全不同的需求。
容器將繼續(xù)在媒體中引起關(guān)注,因?yàn)樗鼈冊(cè)试S用戶以更少的硬件更高效地運(yùn)行。另一方面,虛擬機(jī)仍然是服務(wù)器和云領(lǐng)域的主要部分??梢赃@么說(shuō),虛擬化哪兒也不會(huì)缺,并且會(huì)和容器一樣火。
筆者認(rèn)為值得一看的是Kubernetes和Docker Swarms這兩種容器管理技術(shù)是如何發(fā)揮作用的。
現(xiàn)在,我們從Kubernetes陣營(yíng)中能看到更多信息。隨著時(shí)間的推移,我們將開(kāi)始看到Kubernetes成為頭條新聞,成為容器領(lǐng)域的焦點(diǎn)。
你怎么看?你相信容器正在超越虛擬機(jī)嗎?