從四個(gè)問(wèn)題出發(fā)去探索Docker這項(xiàng)技術(shù)

小編去了解一項(xiàng)技術(shù)時(shí),總是喜歡朝著四個(gè)方面去做研究:這個(gè)技術(shù)為什么會(huì)出現(xiàn)?這個(gè)技術(shù)是什么?這個(gè)技術(shù)如何運(yùn)用?有沒有類似功能的技術(shù),區(qū)別在哪?

首先了解這個(gè)技術(shù)為什么會(huì)出現(xiàn)?主要目的就是了解當(dāng)前這項(xiàng)技術(shù)的發(fā)展契機(jī),是為了解決什么問(wèn)題出現(xiàn)的,這樣有利于在我們接觸的技術(shù)越來(lái)越多時(shí),知道每項(xiàng)技術(shù)是解決什么問(wèn)題的,從根源上懂得衡量該怎么去選擇。

其次就是了解這個(gè)技術(shù)是什么,要真正的掌握一門技術(shù),最主要的還是掌握這項(xiàng)技術(shù)的核心原理,甚至能從底層代碼角度給出分析并展開。

再者,就是實(shí)戰(zhàn)的運(yùn)用,技術(shù)本身不是孤立的,在了解了原理之后,就是需要?jiǎng)邮植倬殻瑢?shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),在多門技術(shù)的融合使用中,加深對(duì)當(dāng)前技術(shù)的深入了解。小編在面試中接觸過(guò)四類人:第一種是理解深入并且實(shí)戰(zhàn)經(jīng)驗(yàn)也很豐富;第二種是實(shí)戰(zhàn)經(jīng)驗(yàn)豐富,但理解不夠深入,表現(xiàn)比如表達(dá)不出來(lái)關(guān)鍵點(diǎn),對(duì)一些核心名詞理解較差;第三種是理解有了,但是沒有過(guò)實(shí)戰(zhàn),表現(xiàn)是能侃侃而談,但一問(wèn)實(shí)際使用,比如需要引入什么jar包、如何處理異常、怎么部署等等就是一問(wèn)三不知;第四種就是兩者都沒有掌握的。我們?cè)谶x擇的時(shí)候一般也只會(huì)選擇前兩種。

最后,就是了解類似的技術(shù),在一個(gè)領(lǐng)域,如果只是掌握一門技術(shù),在運(yùn)用上當(dāng)然沒有問(wèn)題,但是現(xiàn)在技術(shù)日新月異,需要不斷學(xué)習(xí)新的技術(shù),拓寬我們的知識(shí)面,并且有比較才知道區(qū)別,了解同一個(gè)領(lǐng)域不同的技術(shù),也能從側(cè)面加深我們對(duì)當(dāng)前技術(shù)的理解,這也是相輔相成的。

今天,我們就從這四個(gè)角度來(lái)談?wù)凞ocker這么技術(shù)。

一、Docker為什么會(huì)出現(xiàn)

作為程序員來(lái)說(shuō)。軟件開發(fā)部署最讓人頭痛的事情是需要重復(fù)在不同的操作系統(tǒng)或者不同的環(huán)境下搭建同樣的環(huán)境。環(huán)境搭建需要添加各種依賴,可能還需要配置各種環(huán)境變量,有時(shí)候在一臺(tái)機(jī)器上正常運(yùn)行,卻不能保證在另外一臺(tái)機(jī)器也能正常運(yùn)行,費(fèi)時(shí)費(fèi)力,還容易出錯(cuò)。有沒有一種辦法,能不能從根本上解決問(wèn)題,軟件可以帶環(huán)境安裝?也就是說(shuō),安裝的時(shí)候,把原始環(huán)境一模一樣地復(fù)制過(guò)來(lái)。

1、虛擬機(jī)

虛擬機(jī)(virtual machine)就是帶環(huán)境安裝的一種解決方案。它可以在一種操作系統(tǒng)里面運(yùn)行另一種操作系統(tǒng),比如在Windows系統(tǒng)里面運(yùn)行Linux系統(tǒng)。應(yīng)用程序?qū)Υ撕翢o(wú)感知,因?yàn)樘摂M機(jī)看上去跟真實(shí)系統(tǒng)一模一樣,而對(duì)于底層系統(tǒng)來(lái)說(shuō),虛擬機(jī)就是一個(gè)普通文件,不需要了就刪掉,對(duì)其他部分毫無(wú)影響。雖然用戶可以通過(guò)虛擬機(jī)還原軟件的原始環(huán)境。但是,這個(gè)方案有幾個(gè)缺點(diǎn)。

資源占用多:虛擬機(jī)會(huì)獨(dú)占一部分內(nèi)存和硬盤空間。它運(yùn)行的時(shí)候,其他程序就不能使用這些資源了。哪怕虛擬機(jī)里面的應(yīng)用程序,真正使用的內(nèi)存只有1MB,虛擬機(jī)依然需要幾百M(fèi)B的內(nèi)存才能運(yùn)行。

冗余步驟多:虛擬機(jī)是完整的操作系統(tǒng),一些系統(tǒng)級(jí)別的操作步驟,往往無(wú)法跳過(guò),比如用戶登錄。

啟動(dòng)慢:啟動(dòng)操作系統(tǒng)需要多久,啟動(dòng)虛擬機(jī)就需要多久。可能要等幾分鐘,應(yīng)用程序才能真正運(yùn)行。

2、Linux容器

由于虛擬機(jī)存在諸多缺點(diǎn),Linux發(fā)展出了另一種虛擬化技術(shù):Linux容器(Linux Containers,縮寫為L(zhǎng)XC)。Linux容器不是模擬一個(gè)完整的操作系統(tǒng),而是對(duì)進(jìn)程進(jìn)行隔離。或者說(shuō),在正常進(jìn)程的外面套了一個(gè)保護(hù)層。對(duì)于容器里面的進(jìn)程來(lái)說(shuō),它接觸到的各種資源都是虛擬的,從而實(shí)現(xiàn)與底層系統(tǒng)的隔離。

由于容器是進(jìn)程級(jí)別的,相比虛擬機(jī)有很多優(yōu)勢(shì)。

啟動(dòng)快:容器里面的應(yīng)用,直接就是底層系統(tǒng)的一個(gè)進(jìn)程,而不是虛擬機(jī)內(nèi)部的進(jìn)程。所以,啟動(dòng)容器相當(dāng)于啟動(dòng)本機(jī)的一個(gè)進(jìn)程,而不是啟動(dòng)一個(gè)操作系統(tǒng),速度就快很多。

資源占用少:容器只占用需要的資源,不占用那些沒有用到的資源;虛擬機(jī)由于是完整的操作系統(tǒng),不可避免要占用所有資源。另外,多個(gè)容器可以共享資源,虛擬機(jī)都是獨(dú)享資源。

體積小:容器只要包含用到的組件即可,而虛擬機(jī)是整個(gè)操作系統(tǒng)的打包,所以容器文件比虛擬機(jī)文件要小很多。

總之,容器有點(diǎn)像輕量級(jí)的虛擬機(jī),能夠提供虛擬化的環(huán)境,但是成本開銷小得多。

這個(gè)時(shí)候Docker出現(xiàn)了,Docker屬于Linux容器的一種封裝。先來(lái)看一下Docker的發(fā)展歷史。

2010年,幾個(gè)搞IT的大胡子年輕人在舊金山成立了一家做PaaS平臺(tái)(平臺(tái)即服務(wù))的公司,公司起名為“dotCloud”。

這家公司主要提供基于PaaS的云計(jì)算技術(shù)服務(wù)。什么是PaaS?PaaS的全稱是Platform as a Service,也就是平臺(tái)即服務(wù),它是描述作為集成租用或交付的計(jì)算平臺(tái)的概念解決方案,解決方案堆棧可以是一組組件或軟件用于開發(fā)功能齊全的產(chǎn)品或服務(wù)的子系統(tǒng),例如使用OS,Web服務(wù)器,數(shù)據(jù)庫(kù)和編程語(yǔ)言的Web應(yīng)用程序等。

dotCloud不僅支持諸如PHP、MySql等傳統(tǒng)技術(shù)框架,還包括Node.js、MongoDB等新興技術(shù)。基于dotCloud提供的開發(fā)工具和技術(shù)框架,你可以直接使用dotCloud的SDK編寫代碼和構(gòu)建業(yè)務(wù)服務(wù),并在聯(lián)網(wǎng)的時(shí)候把這些代碼推送到云端,實(shí)現(xiàn)自動(dòng)部署和測(cè)試。

Docker技術(shù)誕生之后,并沒有引起行業(yè)的關(guān)注。而dotCloud公司,當(dāng)時(shí)兩面夾擊。前有IBM的藍(lán)云,微軟的Azure,Amazon的EC2,Google的GAE,VMware的Cloud Foundry等等大牌企業(yè)攪局,后方大本營(yíng)資金短缺,難以為繼。在他們快要堅(jiān)持不下去的時(shí)候,提出了“開源”Docker。開源,也就是意味著開放源代碼,將原來(lái)內(nèi)部保密的程序源代碼開放給所有人,然后讓大家一起參與進(jìn)來(lái),貢獻(xiàn)代碼和意見。Docker開源之后,受到廣大程序員的青睞,越來(lái)越多的人加入了Docker開源社區(qū),也將Docker這門技術(shù)不斷向前推進(jìn),不久之后的2013年發(fā)行面世。

二、Docker是什么

Docker是一種Linux容器技術(shù),容器有效的將由單個(gè)操作系統(tǒng)掛管理的資源劃分到孤立的組中,以便更好的在組之間平衡有沖突的資源使用需求。可簡(jiǎn)單理解為一種沙盒。每個(gè)容器內(nèi)運(yùn)行一個(gè)應(yīng)用,不同的容器之間相互隔離,容器之間也可以建立通信機(jī)制。容器的創(chuàng)建和停止都十分快速,資源需求遠(yuǎn)遠(yuǎn)低于虛擬機(jī)。

Docker屬于Linux容器(Linux容器在上一小節(jié)提到)的一種封裝,提供簡(jiǎn)單易用的容器使用接口,它是一個(gè)開源的應(yīng)用容器引擎,基于Go語(yǔ)言并遵從Apache2.0協(xié)議開源。Docker可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級(jí)、可移植的容器中,然后發(fā)布到任何流行的Linux機(jī)器上,也可以實(shí)現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會(huì)有任何接口,更重要的是容器性能開銷極低。有了Docker,就不用擔(dān)心環(huán)境問(wèn)題。

Docker技術(shù)使用Linux內(nèi)核和內(nèi)核功能來(lái)分隔進(jìn)程,以便各進(jìn)程相互獨(dú)立運(yùn)行。這種獨(dú)立性正是采用容器的目的所在;它可以獨(dú)立運(yùn)行多種進(jìn)程、多個(gè)應(yīng)用程序,更加充分地發(fā)揮基礎(chǔ)設(shè)施的作用,同時(shí)保持各個(gè)獨(dú)立系統(tǒng)的安全性。

此外,由于這些工具基于Linux容器構(gòu)建,使得Docker既易于使用,又別具一格 , 它可為用戶提供前所未有的高度應(yīng)用程訪問(wèn)權(quán)限、快速部署以及版本控制和分發(fā)能力。

總體來(lái)說(shuō),Docker的接口相當(dāng)簡(jiǎn)單,用戶可以方便地創(chuàng)建和使用容器,把自己的應(yīng)用放入容器。容器還可以進(jìn)行版本管理、復(fù)制、分享、修改,就像管理普通的代碼一樣。

接下來(lái)介紹Docker的三大核心概念:鏡像、容器、倉(cāng)庫(kù),以及他們的關(guān)系。

(1)Docker鏡像(image)

鏡像是創(chuàng)建Docker容器的基礎(chǔ),Docker鏡像類似于虛擬機(jī)鏡像,可以把Docker鏡像理解成一個(gè)特殊的文件系統(tǒng),除了提供容器運(yùn)行時(shí)所需的程序、庫(kù)、資源、配置等文件外,還包含了一些為運(yùn)行時(shí)準(zhǔn)備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)。鏡像不包含任何動(dòng)態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會(huì)被改變(只讀)。

Docker提供了一套十分簡(jiǎn)單的機(jī)制來(lái)創(chuàng)建和更新現(xiàn)有的鏡像。用戶可以從網(wǎng)上下載一個(gè)已經(jīng)做好的應(yīng)用鏡像,并通過(guò)命令直接使用。總之,應(yīng)用運(yùn)行是需要環(huán)境的,而鏡像就是來(lái)提供這種環(huán)境。

例如:一個(gè)鏡像可以完全包含了Ubuntu操作系統(tǒng)環(huán)境,可以把它稱作一個(gè)Ubuntu鏡像。鏡像也可以安裝了Apache應(yīng)用程序(或其他軟件),可以把它稱為一個(gè)Apache鏡像。

(2)Docker容器(Container)

鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計(jì)中的類和實(shí)例一樣,鏡像是靜態(tài)的定義,容器是鏡像運(yùn)行時(shí)的實(shí)體。容器可以被創(chuàng)建、啟動(dòng)、停止、刪除、暫停等。并且這些容器都是相互隔離、互不可見的。

Docker容器(Container)類似于一個(gè)輕量級(jí)的沙箱子(因?yàn)镈ocker是基于Linux內(nèi)核的虛擬技術(shù),所以消耗資源十分少),可以把每個(gè)容器看作一個(gè)簡(jiǎn)易版的Linux系統(tǒng)環(huán)境(包括了root用戶權(quán)限、進(jìn)程空間、用戶空間和網(wǎng)絡(luò)空間),以及與運(yùn)行在其中的應(yīng)用程序打包而成的應(yīng)用盒子。Docker利用容器來(lái)運(yùn)行和隔離應(yīng)用。容器內(nèi)的進(jìn)程是運(yùn)行在一個(gè)隔離的環(huán)境里,使用起來(lái),就好像是在一個(gè)獨(dú)立于宿主的系統(tǒng)下操作一樣。這種特性使得容器封裝的應(yīng)用比直接在宿主運(yùn)行更加安全。

鏡像自身是只讀的。容器從鏡像啟動(dòng)的時(shí)候,Docker會(huì)在鏡像的最上層創(chuàng)建一個(gè)可寫層,鏡像本身將保持不變。就像用ISO裝系統(tǒng)之后,ISO并沒有什么變化一樣。

(3)Docker倉(cāng)庫(kù)(Repository)

Docker倉(cāng)庫(kù)(Repository)類似于代碼倉(cāng)庫(kù),是Docker集中存放鏡像文件的場(chǎng)所。每個(gè)倉(cāng)庫(kù)集中存放某一類鏡像,往往包括多個(gè)鏡像文件,通過(guò)不同的標(biāo)簽(tag)來(lái)進(jìn)行區(qū)分。例如存放Ubuntu操作系統(tǒng)鏡像的倉(cāng)庫(kù),稱為Ubuntu倉(cāng)庫(kù),其中可能包括14.04,12.04等不同版本的鏡像。但是,如果需要在其它服務(wù)器上使用這個(gè)鏡像,我們就需要一個(gè)集中的存儲(chǔ)、分發(fā)鏡像的服務(wù),Docker Registry就是這樣的服務(wù)。理解這個(gè)關(guān)系就是:一個(gè)Docker Registry中可以包含多個(gè)倉(cāng)庫(kù)(Repository);每個(gè)倉(cāng)庫(kù)可以包含多個(gè)標(biāo)簽(Tag);每個(gè)標(biāo)簽對(duì)應(yīng)一個(gè)鏡像。

根據(jù)存儲(chǔ)的鏡像公開分享與否,Docker倉(cāng)庫(kù)分為公開倉(cāng)庫(kù)(Public)和私有倉(cāng)庫(kù)(Private)兩種形式。

目前,最大的公開倉(cāng)庫(kù)是Docker Hub,存放了數(shù)量龐大的鏡像供用戶下載。國(guó)內(nèi)的公開倉(cāng)庫(kù)包括Docker Pool等,可以提供穩(wěn)定的國(guó)內(nèi)訪問(wèn)。如果用戶不希望公開分享自己的鏡像文件,Docker也支持用戶在本地網(wǎng)絡(luò)內(nèi)創(chuàng)建一個(gè)只能自己訪問(wèn)的私有倉(cāng)庫(kù)。

當(dāng)用戶創(chuàng)建了自己的鏡像之后就可以使用push將它上傳到指定的公有或則私有倉(cāng)庫(kù)。這樣用戶下次在另一臺(tái)機(jī)器上使用該鏡像時(shí),只需將其從倉(cāng)庫(kù)pull下來(lái)就可以了。

三、Docker如何使用

在沒有用docker之前,我們需要在本地、測(cè)試、演示、線上部署相同的環(huán)境,相同的軟件每個(gè)環(huán)境都要安裝一次,并且每來(lái)一個(gè)新同事,相同的環(huán)境有要重新安裝一遍,很麻煩且過(guò)于重復(fù)。docker可以完美的解決這個(gè)問(wèn)題。

用docker之后我們只需要在本地、測(cè)試、演示、線上分別安裝相同的docker,然后在本地搭建環(huán)境,將搭建好的環(huán)境容器生成docker鏡像,只要將這個(gè)docker鏡像提供給測(cè)試、演示和線上即可構(gòu)建出相同的環(huán)境,在代碼部署上我們可以利用docker數(shù)據(jù)卷將本地項(xiàng)目目錄文件直接掛載到測(cè)試環(huán)境中。

1、Docker的安裝

Docker是一個(gè)開源的商業(yè)產(chǎn)品,有兩個(gè)版本:社區(qū)版(Community Edition,縮寫為CE)和企業(yè)版(Enterprise Edition,縮寫為EE)。企業(yè)版包含了一些收費(fèi)服務(wù),個(gè)人開發(fā)者一般用不到。

目前網(wǎng)絡(luò)上有很多的安裝教程,大家可以自行搜索一下。特別注意的是:如果你在windows操作系統(tǒng)上安裝Docker,注意在任務(wù)管理中查看本機(jī)虛擬化是否已啟用,如果虛擬化是已禁用,那么你需要重啟電腦進(jìn)入bios開啟虛擬化。

?

2、使用docker搭建服務(wù)

使用docker搭建服務(wù),一般分為幾個(gè)步驟:

(1)搜索鏡像:docker search +鏡像名字+標(biāo)簽名字(鏡像名字和標(biāo)簽名字之間沒有空格,不加標(biāo)簽?zāi)J(rèn)最新的鏡像,也就是 latest 標(biāo)簽的鏡像),從Docker Hub中搜索符合條件的鏡像

#docker search myql

?

#docker search myql5.7

?

注意:如果不是root用戶,并且當(dāng)前用戶沒有添加到docker用戶組(可以用whoami && id查看當(dāng)前用戶id和組id),會(huì)提示連接拒絕:

?

(2)下載鏡像命令 docker pull [IMAGE_NAME]:[TAG],默認(rèn)從Docker Hub官方的倉(cāng)庫(kù)中下載需要搭建服務(wù)的鏡像文件,如果沒有指定版本(即沒有輸入標(biāo)簽TAG),默認(rèn)會(huì)獲取倉(cāng)庫(kù)中最新版本的鏡像(latest 標(biāo)簽的鏡像)。(注意是Docker Hub官方倉(cāng)庫(kù)中最新的鏡像,而不是軟件本身最新的鏡像);

使用示例:

#docker pull mysql # 拉取最新版mysql鏡像

#docker pull mysql:5.7 # 拉取 指定標(biāo)簽版本mysql 5.7

(3)查看下載的鏡像命令,docker images 或者docker image ls ?查看有沒有剛剛下載的鏡像;

表頭REPOSITORY、TAG、IMAGE ID、CREATED、SIZE 名詞解釋:

REPOSITORY: 來(lái)自于哪個(gè)倉(cāng)庫(kù);

TAG: 鏡像的標(biāo)簽信息,比如 5.7、latest 表示不同的版本信息;

IMAGE ID: 鏡像的 ID, 如果您看到兩個(gè) ID 完全相同,那么實(shí)際上,它們指向的是同一個(gè)鏡像,只是標(biāo)簽名稱不同罷了;

CREATED: 鏡像最后的更新時(shí)間;

SIZE: 鏡像的大小,優(yōu)秀的鏡像一般體積都比較小,這也是我更傾向于使用輕量級(jí)的 alpine 版本的原因;

(4)創(chuàng)建一個(gè)新的容器并運(yùn)行一個(gè)命令: docker run [options] 鏡像名 [向啟動(dòng)容器中傳入的命令]

OPTIONS參數(shù)說(shuō)明:

使用示例:

示例1:使用鏡像nginx:latest以交互模式啟動(dòng)一個(gè)容器,在容器內(nèi)執(zhí)行/bin/bash命令。(/bin/bash的作用是因?yàn)閐ocker后臺(tái)必須運(yùn)行一個(gè)進(jìn)程,否則容器就會(huì)退出,在這里表示啟動(dòng)容器后啟動(dòng)bash)

#docker run?-it nginx:latest?/bin/bash

示例2:使用docker鏡像nginx:latest以后臺(tái)模式啟動(dòng)一個(gè)容器,并將容器命名為mynginx。

#docker run --name mynginx -d nginx:latest

示例3:使用nginx鏡像運(yùn)行容器

#docker run --name nginx-test -p 8080:80 -d nginx

--name nginx-test:容器名稱。

-p 8080:80: 端口進(jìn)行映射,將本地 8080 端口映射到容器內(nèi)部的 80 端口。

-d nginx: 設(shè)置容器在在后臺(tái)一直運(yùn)行。

示例4:使用鏡像mysql運(yùn)行容器

#docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

-p 3306:3306 :映射容器服務(wù)的3306端口到宿主機(jī)的3306端口,外部主機(jī)可以直接通過(guò) 宿主機(jī)ip:3306訪問(wèn)到MySQL的服務(wù)。

MYSQL_ROOT_PASSWORD=123456:設(shè)置MySQL服務(wù)root用戶的密碼。

示例5:使用 tomcat 鏡像運(yùn)行容器

#docker run --name tomcat -p 8080:8080 -v $PWD/test:/usr/local/tomcat/webapps/test -d tomcat

-p 8080:8080:將主機(jī)的 8080 端口映射到容器的 8080 端口。

-v $PWD/test:/usr/local/tomcat/webapps/test:將主機(jī)中當(dāng)前目錄下的test掛載到容器的/test。

示例6:使用redis鏡像運(yùn)行容器

#docker run -itd --name redis-test -p 6379:6379 redis

-p 6379:6379:映射容器服務(wù)的6379端口到宿主機(jī)的6379端口。外部可以直接通過(guò)宿主機(jī)ip:6379訪問(wèn)到Redis的服務(wù)。

(5)查看是否安裝成功,docker ps [options] 命令查看是否安裝成功。

?

?

表頭字段分析:

CONTAINER ID(container id ) :容器ID,可以通過(guò)這id找到唯一的對(duì)應(yīng)容器

IMAGE (image):該容器所使用的鏡像

COMMAND (command):?jiǎn)?dòng)容器時(shí)運(yùn)行的命令

CREATED (created):容器的創(chuàng)建時(shí)間

STATUS (status):容器現(xiàn)在的狀態(tài),狀態(tài)有7種:created(已創(chuàng)建)|restarting(重啟中)|running(運(yùn)行中)|removing(遷移中)|paused(暫停)|exited(停止)|dead,up表示運(yùn)行中

PORTS (ports):容器的端口信息和使用的連接類型(tcp\udp)

NAMES (names):鏡像自動(dòng)為容器創(chuàng)建的名字,也唯一代表一個(gè)容器

(6)查看容器詳細(xì)信息

#docker inspect 容器id

?

(7)進(jìn)入容器,使用docker exec進(jìn)入Docker容器

#docker exec -it 容器ID /bin/bash ?

?

四、與Docker類似功能的技術(shù)有哪些,他們有何區(qū)別?

自從Docker在2013年發(fā)行以來(lái),一直是容器市場(chǎng)青睞的對(duì)象,不過(guò)最近幾年,也有不少容器開始嶄露頭角,并且開始占據(jù)容器市場(chǎng)。比如CoreOS rkt、Mesos容器引擎、LXC容器、Containerd等。

(1)CoreOS rkt:支持兩種不同的鏡像類型:Docker和appc。rkt最大的優(yōu)勢(shì)就是可以直接兼容kubernets。另外rkt還支持 TPM(可信平臺(tái)模塊),提供了非常好的安全性支持。它對(duì)應(yīng)用容器也做了很多優(yōu)化處理。同Docker相比rkt還是缺少一些可整合的第三方接口。

(2)Mesos 容器引擎:它是Apache 的開源項(xiàng)目,Mesos提供了非常好的性能參數(shù)。同 rkt 類似,它也支持Docker和appc 兩種鏡像。而且參考Docker對(duì)OCI的兼容方式。不過(guò)Mesos容器引擎必須通過(guò)Mesos框架來(lái)運(yùn)行這些容器,而不能像其它容器那樣可以單獨(dú)運(yùn)行。

(3)LXC容器:它仿真了一個(gè)類似虛擬機(jī)的操作體驗(yàn),并避免了虛擬機(jī)額外的系統(tǒng)負(fù)載。而且Windows 跟MacOS用戶都可以訪問(wèn)lxd進(jìn)程。不過(guò)LXC容器目前還不能同kubernetes進(jìn)行整合,也沒有實(shí)現(xiàn)對(duì)OCI標(biāo)準(zhǔn)的支持。

(4)Containerd:它是一個(gè)符合工業(yè)標(biāo)準(zhǔn)的容器運(yùn)行時(shí),注重簡(jiǎn)潔、健壯性以及可移植性。它目前是CNCF(云原生計(jì)算基金會(huì))的孵化項(xiàng)目。Containerd可以以守護(hù)進(jìn)程的方式在Linux和Windows上運(yùn)行。Containerd支持OCI鏡像文件,與gRPC天然嵌合,而且具有完善的容器生命周期管理功能。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容