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