原文作者:尼克格拉斯馬托斯,F(xiàn)ICO 云服務(wù)工程高級(jí)總監(jiān),致力如何為Docker卷和數(shù)據(jù)容器缺乏持久化存儲(chǔ)提供解決方案。
在容器內(nèi)運(yùn)行應(yīng)用的想法并不新穎。是的,這是一個(gè)趨勢(shì),無(wú)數(shù)人研究容器這一熱門主題,似乎發(fā)現(xiàn)了解決問(wèn)題的方法。容器將解決一切。
容器的起源實(shí)際上能追溯到大型機(jī)時(shí)代,這并不是一個(gè)新技術(shù),這一技術(shù)最終開(kāi)始成熟并以驚人的速度獲得用戶關(guān)注和認(rèn)可。容器使多個(gè)應(yīng)用并行運(yùn)行在單個(gè)操作系統(tǒng)之上,不管其是直接部署在物理服務(wù)器還是虛擬實(shí)例之上。這個(gè)是通過(guò)提供在“用戶空間”(即應(yīng)用運(yùn)行的平臺(tái)、系統(tǒng)或運(yùn)行在內(nèi)核上的代碼)上執(zhí)行多次拷貝的功能來(lái)實(shí)現(xiàn)的。
容器的當(dāng)前反饋來(lái)自于運(yùn)行虛擬實(shí)例相關(guān)的問(wèn)題和開(kāi)銷,每個(gè)實(shí)例必須有專用的內(nèi)存和存儲(chǔ)資源。它們通常過(guò)大或不夠,當(dāng)對(duì)這些資源需求迅速擴(kuò)展時(shí),它運(yùn)行會(huì)變得緩慢。
虛擬實(shí)例的設(shè)計(jì)提供隔離和獨(dú)立升級(jí)每個(gè)實(shí)例的能力,但在運(yùn)行類似或相同版本的操作系統(tǒng)的大環(huán)境中,每個(gè)虛擬實(shí)例都運(yùn)行相同的進(jìn)程,內(nèi)存占用和一個(gè)近似的啟動(dòng)卷。
面向一個(gè)基于Web可擴(kuò)展的網(wǎng)絡(luò)計(jì)算架構(gòu)目標(biāo)時(shí),傳統(tǒng)的虛擬化可以說(shuō)是很低效的,浪費(fèi)誓如內(nèi)存、處理器、存儲(chǔ)、機(jī)架空間、電力、冷卻系統(tǒng)和通用資源(如管理系統(tǒng)、IP地址)等的物理資源。
容器提供一定程度的分離,因?yàn)樗仟?dú)立于它的臨近容器存在的,所以它看起來(lái)似乎自擁有整個(gè)操作系統(tǒng)。這種隔離允許它們與外部進(jìn)行交互。
在2014年指數(shù)級(jí)的增長(zhǎng)趨勢(shì)下,2015年容器和整個(gè)生態(tài)系統(tǒng)在企業(yè)環(huán)境中獲得巨大發(fā)展,但是它仍然遠(yuǎn)未普及。雖然有極少的備份軟件供應(yīng)商能夠提供容器備份的支持,但是有沒(méi)有辦法能實(shí)現(xiàn)任何備份軟件都能備份容器呢?
相比而言虛擬實(shí)例這種方式預(yù)計(jì)是短暫的。它應(yīng)用于更好的存儲(chǔ)分配,容器使用的功能被稱為一個(gè)覆蓋文件系統(tǒng)來(lái)實(shí)現(xiàn)一個(gè)寫副本的過(guò)程中,與存儲(chǔ)任何更新信息的主文件系統(tǒng)的容器相比,它是基于原始鏡像。如果容器被刪除,這些更改通常會(huì)丟失。因此容器默認(rèn)不具有持久存儲(chǔ)能力。
然而,類似Docker這種分布式方案提供兩種特性用于訪問(wèn)持久化存儲(chǔ)資源:Docker卷和數(shù)據(jù)容器。
一個(gè)Docker卷允許數(shù)據(jù)被存儲(chǔ)在啟動(dòng)卷之外的容器中,在主文件系統(tǒng)中可以在幾方面實(shí)現(xiàn)。一個(gè)容器可以通過(guò)提供一個(gè)共享名傳給“-v”切換參數(shù)創(chuàng)建一個(gè)或多個(gè)卷。
Docker配置文件夾(/var/lib/docker)中創(chuàng)建一個(gè)實(shí)體代表該卷的內(nèi)容。卷上的配置數(shù)據(jù)存儲(chǔ)在/var/lib/docker/volumes文件夾,每個(gè)子目錄代表一個(gè)基于通用唯一標(biāo)識(shí)符(UUID)卷名。數(shù)據(jù)本身存儲(chǔ)在/var/lib/docker/vfs/dir基于UUID命名的文件夾。
任何卷中的數(shù)據(jù)都能在主機(jī)操作系統(tǒng)中瀏覽和編輯及標(biāo)準(zhǔn)權(quán)限應(yīng)用。然而,卷的使用有利有弊。由于數(shù)據(jù)存儲(chǔ)在標(biāo)準(zhǔn)的文件系統(tǒng)中,它能被操作系統(tǒng)備份、復(fù)制、導(dǎo)入和導(dǎo)出。缺點(diǎn)還有卷的命名遵循UUID規(guī)范,這使它很難與容器名稱聯(lián)系在一起。Docker通過(guò)提供 “docker cp”命令解決了這個(gè)問(wèn)題,通過(guò)指定容器的名稱,即可將文件和文件夾從主機(jī)目錄中拷貝到該容器目錄中。這與rsync類似。
它將可能通過(guò)提供外部共享存儲(chǔ)在一個(gè)NFS共享或LUN并通過(guò)提供卷選項(xiàng)來(lái)訪問(wèn)外部存儲(chǔ)上創(chuàng)建的主機(jī)共享,雖然這是不推薦的。
一個(gè)Docker卷也可以與主機(jī)目錄有關(guān)。這里要再次用到“-v”切換,格式如下:“-v /host:/container”。這種方法允許容器訪問(wèn)主機(jī)上的持久數(shù)據(jù)。
它將可能通過(guò)提供外部共享存儲(chǔ)在一個(gè)NFS共享或LUN,并通過(guò)提供卷選項(xiàng)來(lái)訪問(wèn)外部存儲(chǔ)上創(chuàng)建的主機(jī)共享。這種方法也可以用來(lái)備份由容器訪問(wèn)的數(shù)據(jù)。
Docker中管理數(shù)據(jù)的另一選擇是Docker數(shù)據(jù)容器。這個(gè)概念是指一個(gè)或多個(gè)卷在內(nèi)的一個(gè)休眠容器。這些卷可以導(dǎo)出到一個(gè)或多個(gè)其它容器中,當(dāng)啟動(dòng)附加的容器時(shí),使用‘-volumes-from’切換。數(shù)據(jù)卷容器就像是內(nèi)部的Docker NFS服務(wù)器,從中心點(diǎn)提供訪問(wèn)容器的支持。
這種方式的優(yōu)點(diǎn)是它從原始數(shù)據(jù)的位置抽象出來(lái),讓數(shù)據(jù)容器變?yōu)橐粋€(gè)邏輯中心點(diǎn)。它還允許應(yīng)用程序容器訪問(wèn)數(shù)據(jù)容器卷以在專用容器中保存數(shù)據(jù)持久性,并將其銷毀。
在使用卷和數(shù)據(jù)容器中有一些問(wèn)題需要了解。
獨(dú)立存儲(chǔ)
目前在沒(méi)有刪除相關(guān)卷的情況下是可以刪除容器的。事實(shí)上,這是默認(rèn)的行為,除非重寫。最終它可以很容易地清楚沒(méi)有相關(guān)引用容器中的獨(dú)立卷。
清除獨(dú)立存儲(chǔ)是一項(xiàng)很艱巨的任務(wù),因?yàn)樗枰ㄟ^(guò)在容器配置文件去對(duì)容器及其相關(guān)的卷進(jìn)行匹配。
安全
對(duì)于容器卷和數(shù)據(jù),除了標(biāo)準(zhǔn)文件權(quán)限和配置“只讀”或者“讀寫”訪問(wèn),沒(méi)有其他別的安全性問(wèn)題。這意味著用戶在容器上的文件訪問(wèn)權(quán)限需要匹配主機(jī)設(shè)置。
數(shù)據(jù)完整性
使用卷和數(shù)據(jù)容器共享數(shù)據(jù),能夠保護(hù)數(shù)據(jù)的完整性。如文件鎖定需要容器本身的管理功能。這是一個(gè)額外的開(kāi)銷,必須添加到應(yīng)用程序中。
容器沒(méi)有提供數(shù)據(jù)保護(hù)設(shè)施,如快照或復(fù)制,因此數(shù)據(jù)管理必須由主機(jī)或容器來(lái)處理。
外部存儲(chǔ)也缺乏支持。除了系統(tǒng)操作系統(tǒng)中提供的功能外,Docker并沒(méi)有在外部存儲(chǔ)中提供特定的支持。
容器卷默認(rèn)存儲(chǔ)在/var/lib/dockerdirectory目錄中,這可能會(huì)成為一個(gè)性能瓶頸。然而,在Docker啟動(dòng)進(jìn)程中轉(zhuǎn)換容器卷默認(rèn)存儲(chǔ)位置是可行的。
最后一個(gè)點(diǎn)突出了當(dāng)前容器存儲(chǔ)的問(wèn)題:無(wú)法管理在單獨(dú)的物理主機(jī)上運(yùn)行的容器之間的數(shù)據(jù)共享。
數(shù)據(jù)卷可以置于外部存儲(chǔ)中,但是當(dāng)前的設(shè)計(jì)不具備使用卷從一臺(tái)主機(jī)轉(zhuǎn)移到另一臺(tái)主機(jī)的能力。為了解決這個(gè)問(wèn)題,F(xiàn)locker提供的解決方案從ClusterHQ正在嘗試解決卷移植帶來(lái)的地址問(wèn)題。也有提出改變類似Docker這種分布式方案中增加更多卷管理功能。