Docker在2013年一炮而紅,自那以后持續(xù)引起IT界的興奮。
Docker提供的應(yīng)用程序容器技術(shù)承諾將像幾年前的虛擬化技術(shù)一樣改變IT運(yùn)營的方式。
以下是與該技術(shù)相關(guān)的13個(gè)最常見問題的答案。
什么是容器以及你為什么需要它們?
當(dāng)從一個(gè)計(jì)算環(huán)境轉(zhuǎn)移到另一個(gè)計(jì)算環(huán)境時(shí),容器是如何使軟件可靠運(yùn)行的問題的解決方案。這可能是從開發(fā)者的筆記本電腦到測試環(huán)境,從預(yù)發(fā)布環(huán)境到產(chǎn)品,以及可能從數(shù)據(jù)中心的物理機(jī)到私有云或公共云中的虛擬機(jī)。
Docker的創(chuàng)始人Solomon Hykes說:“當(dāng)支持軟件的環(huán)境不相同時(shí),會出現(xiàn)問題。你將使用Python 2.7進(jìn)行測試,然后在生產(chǎn)中運(yùn)行Python 3,然后會發(fā)生奇怪的事情。或者你將依賴某個(gè)SSL庫的版本的行為,而后另一個(gè)版本將被安裝。你會在Debian中運(yùn)行測試,而在Red Hat上進(jìn)行生產(chǎn),然后各種怪異的事情發(fā)生了。”
他補(bǔ)充說:“不僅僅是不同的軟件可能會導(dǎo)致問題。網(wǎng)絡(luò)拓?fù)湟部赡懿煌?,或者安全策略和存儲可能不同,但軟件必須在它上面運(yùn)行。”
容器如何解決這個(gè)問題?
簡單地說,一個(gè)容器由整個(gè)運(yùn)行時(shí)環(huán)境構(gòu)成:一個(gè)應(yīng)用程序,加上它所有的依賴關(guān)系,庫和其它二進(jìn)制文件,以及運(yùn)行它所需的配置文件,統(tǒng)統(tǒng)捆綁在一個(gè)包中。通過對應(yīng)用程序平臺及其依賴關(guān)系容器化,OS(操作系統(tǒng))分布和底層架構(gòu)的差異被抽象了出來。
容器和虛擬化有什么區(qū)別?
有了虛擬化技術(shù),可傳遞的包可以是一個(gè)虛擬機(jī),它包含一個(gè)完整的操作系統(tǒng)以及應(yīng)用程序。運(yùn)行三個(gè)虛擬機(jī)的物理服務(wù)器將有一個(gè)管理程序并且在它上面運(yùn)行著三個(gè)獨(dú)立的操作系統(tǒng)。
相比之下,一個(gè)用Docker運(yùn)行三個(gè)容器化應(yīng)用程序的服務(wù)器運(yùn)行單個(gè)操作系統(tǒng),并且每個(gè)容器與其他容器共享操作系統(tǒng)內(nèi)核。操作系統(tǒng)的共享部分是只讀的,而每個(gè)容器都有自己的掛載方式(即訪問容器的方式)進(jìn)行寫入。這意味著容器更輕量級并且使用的資源遠(yuǎn)遠(yuǎn)少于虛擬機(jī)。
容器還有什么其它好處?
容器的大小可能只有幾十兆字節(jié),而具有自己的整個(gè)操作系統(tǒng)的虛擬機(jī)的大小可能是幾千兆字節(jié)。因此,單個(gè)服務(wù)器可以托管的容器數(shù)量遠(yuǎn)超虛擬機(jī)。
另一個(gè)主要好處是,虛擬機(jī)可能需要幾分鐘才能啟動其操作系統(tǒng),并開始運(yùn)行它們托管的應(yīng)用程序,而容器化的應(yīng)用程序幾乎可以立即啟動。這意味著容器可以在需要時(shí)以“即時(shí)”的方式實(shí)例化,并且在不再需要時(shí)可以消失,從而釋放其主機(jī)上的資源。
第三個(gè)好處是容器化兼顧了更大的模塊化。應(yīng)用程序可以拆分為模塊(如數(shù)據(jù)庫、應(yīng)用程序前端等等),而不是在單個(gè)容器內(nèi)運(yùn)行整個(gè)復(fù)雜的應(yīng)用程序。這就是所謂的微服務(wù)方法。以這種方式構(gòu)建的應(yīng)用程序更易于管理,因?yàn)槊總€(gè)模塊都相對簡單,并且可以對模塊進(jìn)行更改而無需重新構(gòu)建整個(gè)應(yīng)用程序。因?yàn)槿萜鞣浅]p便,所以只有在需要時(shí)單個(gè)模塊(或微服務(wù))才會被模塊化,并可立即使用。
Dockers和容器有什么區(qū)別?
Docker已經(jīng)成為容器技術(shù)的代名詞,因?yàn)樗谄占吧献畛晒Α5萜骷夹g(shù)并不新鮮; 它已經(jīng)以LXC的形式被集成到Linux超過10年了,并且FreeBSD監(jiān)獄(FreeBSD jail),AIX工作負(fù)載分區(qū)(AIX Workload Partitions)和Solaris容器也提供了類似的操作系統(tǒng)級虛擬化。
有標(biāo)準(zhǔn)的容器格式嗎?
早在2015年,一家叫做CoreOS的公司就制定了與Docker容器規(guī)范不同的App Container Image(ACI)規(guī)范,當(dāng)時(shí)有這樣一個(gè)風(fēng)險(xiǎn),就是新流行的容器運(yùn)動會與對手的Linux容器格式產(chǎn)生碎片化。
但同年晚些時(shí)候宣布了一項(xiàng)名為“開放容器項(xiàng)目(Open Container Project,OCP)”,后來更名為“開放容器計(jì)劃(OCI)”。在Linux基金會的支持下運(yùn)作,OCI的目的是為所有的平臺開發(fā)容器格式并制定容器運(yùn)行時(shí)軟件的行業(yè)標(biāo)準(zhǔn)。OCP標(biāo)準(zhǔn)的起點(diǎn)是Docker技術(shù),Docker向該項(xiàng)目貢獻(xiàn)出其代碼庫約5%的代碼,使項(xiàng)目可以順利展開。
該項(xiàng)目的贊助商包括AWS、谷歌、IBM、惠普、微軟、VMware、Red Hat、甲骨文、推特和HP以及Docker和CoreOS
為什么這些公司都要參與開放式容器計(jì)劃?
OCI的想法是確保容器技術(shù)(如容器格式)的基本構(gòu)成要素被標(biāo)準(zhǔn)化,以便每個(gè)人都可以利用它們。
這意味著組織可以專注于開發(fā)支持在企業(yè)或云環(huán)境中使用標(biāo)準(zhǔn)化容器所需的附加軟件,而不是耗費(fèi)資源開發(fā)競爭性容器技術(shù)。所需的軟件類型包括容器編排和管理系統(tǒng)以及容器安全系統(tǒng)。
有沒有免費(fèi)的開源容器管理系統(tǒng)?
有,最有名和使用最廣泛的免費(fèi)且開源的容器管理系統(tǒng)可能是Kubernetes,它是一個(gè)起源于谷歌的軟件項(xiàng)目。Kubernetes提供了部署、維護(hù)和擴(kuò)展容器化應(yīng)用程序的機(jī)制。
現(xiàn)存的有哪些商業(yè)容器管理解決方案?
Docker企業(yè)版也許是最有名的商業(yè)容器管理解決方案。它為在企業(yè)Linux或Windows操作系統(tǒng)和云提供商上運(yùn)行的應(yīng)用程序提供了一個(gè)集成的,經(jīng)過測試和認(rèn)證的平臺。
但還有很多其它的,有幾個(gè)值得注意的是以Kubernetes為核心的專有軟件層。這類管理軟件產(chǎn)品的例子有:
·CoreOS的Tectonic預(yù)封裝了構(gòu)建谷歌風(fēng)格的基礎(chǔ)設(shè)施所需的所有開源組件,并增加了其它商業(yè)功能,例如管理控制臺,企業(yè)SSO集成以及企業(yè)就緒的容器注冊服務(wù)(registry)Quay。
·Red Hat的OpenShift容器平臺(Open Shift Container Platform)是一種內(nèi)部部署的私有的平臺即服務(wù)產(chǎn)品,建立在由Docker支持的應(yīng)用程序容器核心,由Kubernetes在Red Hat Enterprise Linux的基礎(chǔ)上提供編排和管理。
·Rancher Labs的Rancher是一種商業(yè)開源解決方案,可以在任何基礎(chǔ)架構(gòu)上輕松部署和管理生產(chǎn)中的容器。
容器有多安全?
很多人認(rèn)為,容器比虛擬機(jī)安全性更低,因?yàn)槿绻萜髦鳈C(jī)內(nèi)核存在漏洞,那么它可以提供一種進(jìn)入共享它的容器的方法。管理程序也是如此,但由于管理程序提供遠(yuǎn)遠(yuǎn)少于Linux內(nèi)核(通常實(shí)現(xiàn)文件系統(tǒng),網(wǎng)絡(luò),應(yīng)用程序進(jìn)程控制等)的功能,因此它的攻擊面更小。
但是在過去的幾年里,為了增強(qiáng)容器的安全性開發(fā)了大量的軟件。
例如,Docker(和其它容器系統(tǒng))現(xiàn)在包括一個(gè)簽名的基礎(chǔ)架構(gòu),允許管理員簽署容器鏡像,以防止不可信的容器被部署。
然而,可信任的簽名容器不一定可以安全運(yùn)行,因?yàn)樵诤灻笕萜髦械囊恍┸浖赡軙话l(fā)現(xiàn)漏洞。因此,Docker和其它容器提供容器安全掃描方案,可以就容器鏡像是否有任何可被利用的漏洞而通知管理員。
更專業(yè)的容器安全軟件也被開發(fā)出來了。比如Twistlock,它提供的軟件可以配置容器的預(yù)期行為和“白名單”進(jìn)程,網(wǎng)絡(luò)活動(如源和目標(biāo)IP地址和端口),甚至是某些存儲實(shí)踐,以便可以標(biāo)記任何惡意的或意外的行為。
另一家專業(yè)的容器安全公司Polyverse采用了不同的方法。它利用了這樣一個(gè)事實(shí),容器可以在幾分之一秒內(nèi)啟動,以便每隔幾秒在已知的良好狀態(tài)中重新啟動容器化應(yīng)用程序,將黑客必須利用在容器中運(yùn)行的應(yīng)用程序的時(shí)間最小化。
哪一個(gè)Linux發(fā)行版適合用作容器主機(jī)?
如果Linux發(fā)行版的預(yù)期用途只是充當(dāng)容器主機(jī)來運(yùn)行容器,那么它們大多數(shù)都是功能上臃腫的。因此,很多Linux發(fā)行版本被設(shè)計(jì)為專門用于運(yùn)行容器。
一些例子包括:
·Container Linux(以前的CoreOS Linux)—為容器而構(gòu)建的第一個(gè)輕量級容器操作系統(tǒng)之一。
·RancherOS –由容器構(gòu)建的簡化的Linux發(fā)行版,專門用于運(yùn)行容器。
·Photon OS - 最小的Linux容器主機(jī),被優(yōu)化在VMware平臺上運(yùn)行。
·Project Atomic Host - Red Hat的輕量級容器操作系統(tǒng)擁有基于CentOS和Fedora的版本,Red Hat Enterprise Linux中還有一個(gè)下游企業(yè)版本。
·Ubuntu Core - 最小的Ubuntu版本,Ubuntu Core被設(shè)計(jì)為用于物聯(lián)網(wǎng)設(shè)備和大規(guī)模云端容器部署的主機(jī)操作系統(tǒng)
如果是Windows環(huán)境會怎么樣?
除了在任何運(yùn)行3.10(或更高版本)的Linux內(nèi)核的Linux發(fā)行版上運(yùn)行,Docker還可以在Windows上運(yùn)行。
這是因?yàn)樵?016年,微軟在Windows Server 2016和Windows 10中引入了運(yùn)行Windows容器的能力。這些是為Windows設(shè)計(jì)的Docker容器,并且它們可以在任何Docker客戶端或微軟的PowerShell中進(jìn)行管理。
(微軟還引入了Hyper-V容器,這些容器是運(yùn)行在Hyper-V虛擬機(jī)中的Windows容器,用于增加隔離度。)
Windows容器可以部署在Windows Server 2016的標(biāo)準(zhǔn)安裝中,精簡的Server Core安裝或Nano Server安裝選項(xiàng),專門用于在容器或虛擬機(jī)中運(yùn)行應(yīng)用程序。
除了Linux和Windows之外,Docker還在流行的云平臺上運(yùn)行,包括亞馬遜的EC2,谷歌的 Compute Engine,微軟的Azure和Rackspace。
容器最終會取代全面的服務(wù)器虛擬化嗎?
由于一些重要的原因,這在可預(yù)見的未來不太可能。
首先,仍然有廣泛的意見認(rèn)為虛擬機(jī)比容器提供了更高的安全性,因?yàn)樗鼈兲峁┝嗽鰪?qiáng)的隔離級別。
其次,可用于編排大量容器的管理工具還不如管理虛擬化基礎(chǔ)架構(gòu)的軟件(如VMware的 vCenter或微軟的System Center)全面。對這類軟件進(jìn)行了大量投資的公司在沒有充分理由的情況下不太可能放棄他們的虛擬化基礎(chǔ)架構(gòu)。
也許更重要的是,虛擬化和容器也開始被視為互補(bǔ)技術(shù)而不是敵對技術(shù)。這是因?yàn)槿萜骺梢栽谳p量級虛擬機(jī)中運(yùn)行,以增加隔離度,進(jìn)而提高安全性,并且因?yàn)橛布摂M化可以更輕松地管理支持容器所需的硬件基礎(chǔ)架構(gòu)(網(wǎng)絡(luò)、服務(wù)器和存儲)。
VMware鼓勵(lì)投資虛擬機(jī)管理基礎(chǔ)架構(gòu)的客戶在其輕量級虛擬機(jī)上的Photon OS容器Linux發(fā)行版上運(yùn)行容器,而這些輕量級的虛擬機(jī)可以在vCenter進(jìn)行管理。這是VMware的“VM中的容器”策略。
但是,VMware還引入了所謂的vSphere集成容器(vSphere Integrated Containers ,VIC)。這些容器可以被直接部署到獨(dú)立的ESXi主機(jī),也可以像虛擬機(jī)一樣被部署到vCenter Server。這是VMware的“容器作為虛擬機(jī)”策略。
這兩種方法都有其優(yōu)點(diǎn),但重要的是,能夠在虛擬化基礎(chǔ)架構(gòu)中使用容器而不是替換虛擬機(jī),這往往是很有用的。