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