docker持久化存儲(chǔ)

Build, Ship, and Run Any App, Anywhere

可見容器技術(shù)的使用給我們帶來了效率上的提升,將一個(gè)應(yīng)用直接打包成一個(gè)容器就能在各種平臺(tái)運(yùn)行践樱,但是废封,當(dāng)一個(gè)應(yīng)用帶有狀態(tài)屬性的話倚搬,使用的時(shí)候肯定也需要將狀態(tài)數(shù)據(jù)帶上防泵。

出于對(duì)應(yīng)用數(shù)據(jù)對(duì)安全尿瞭,可用性闽烙,共享,性能等方面的要求和Root Image的要求完全不一樣声搁,所以Docker并不推薦采用Root Image的存儲(chǔ)方式來存儲(chǔ)應(yīng)用數(shù)據(jù)黑竞,而是采用了Volume這樣一個(gè)獨(dú)立的數(shù)據(jù)訪問接口。通過Volume機(jī)制疏旨,Docker可以輕易地將主機(jī)目錄掛載到容器中很魂;通過Docker的Volume Plugin機(jī)制,使Docker能夠方便地整合第三方存儲(chǔ)充石,為Docker提供Volume莫换。

volume是如何被使用的呢?

WX20170706-155801@2x.png

Volume是個(gè)interface骤铃,docker daemon通過調(diào)用這個(gè)接口完成volume的操作拉岁;Docker實(shí)現(xiàn)兩種Volume:基于主機(jī)文件系統(tǒng)《枧溃基于Volume Plugin喊暖。

  • 基于本地文件系統(tǒng)的Volume

    可以在執(zhí)行Docker create或Docker run時(shí),通過-v參數(shù)將主機(jī)的目錄作為容器的數(shù)據(jù)卷撕瞧。這部分功能便是基于本地文件系統(tǒng)的volume管理陵叽。

  • 基于Plugin的Volume

    Docker為了支持第三方存儲(chǔ)方案狞尔,在1.8版本引入Volume Plugin機(jī)制。

如何去編寫一個(gè)docker volume plugin呢巩掺?

官方文檔中給我們列取了許多第三發(fā)的編寫的plugin

docker volume plugins.png

docker plugin其實(shí)就是一個(gè)RPC/JSON的接口偏序,docker daemon直接通過HTTP協(xié)議直接與該接口通訊;

  • docker daemon如何發(fā)現(xiàn)這個(gè)接口:
  1. 接口生成通訊的sock文件
  2. 在/etc/docker/plugins/目錄下新建一個(gè)spec文件胖替,spec文件內(nèi)描述了接口的sock文件的地址
{
  "Name": "plugin-example",
  "Addr": "https://example.com/docker/plugin",
  "TLSConfig": {
    "InsecureSkipVerify": false,
    "CAFile": "/usr/shared/docker/certs/example-ca.pem",
    "CertFile": "/usr/shared/docker/certs/example-cert.pem",
    "KeyFile": "/usr/shared/docker/certs/example-key.pem"
  }
}
  • 這個(gè)接口需要實(shí)現(xiàn)如下一些方法:

    可參見:https://docs.docker.com/engine/extend/plugins_volume/#volumedriver

    • /VolumeDriver.Create: 創(chuàng)建一個(gè)卷研儒,Docker會(huì)發(fā)送卷名稱和參數(shù)發(fā)送給插件,卷插件會(huì)根據(jù)Docker發(fā)送過來的參數(shù)創(chuàng)建一個(gè)卷独令,并和這個(gè)卷名稱關(guān)聯(lián)端朵。
    • /VolumeDriver.Remove:刪掉特定的卷時(shí)調(diào)用,當(dāng)運(yùn)行”docker rm -v”命令時(shí)燃箭,Docker會(huì)調(diào)用該API發(fā)送請(qǐng)求給插件冲呢。
    • /VolumeDriver.Mount: 掛載一個(gè)卷到本機(jī),Docker會(huì)把卷名稱和參數(shù)發(fā)送給參數(shù)招狸。插件會(huì)返回一個(gè)本地路徑給Docker敬拓,這個(gè)路徑就是卷所在的位置。Docker在創(chuàng)建容器的時(shí)候裙戏,會(huì)將這個(gè)路徑掛載到容器中恩尾。
    • /VolumeDriver.Path:一個(gè)卷創(chuàng)建成功后,Docker會(huì)調(diào)用Path API來獲取這個(gè)卷的路徑挽懦,隨后Docker通過調(diào)用Mount API翰意,讓插件將這個(gè)卷掛載到本機(jī)。
    • /VolumeDriver.Unmount:當(dāng)容器退出時(shí)信柿,Docker daemon會(huì)發(fā)送Umount API給插件冀偶,通知插件這個(gè)卷不再被使用,插件可以對(duì)該卷做些清理工作(比如引用計(jì)數(shù)減一渔嚷,不同的插件行為不同)进鸠。
    • /VolumeDriver.Get: 獲取Plugin Volume的詳細(xì)信息。
    • /VolumeDriver.List: 執(zhí)行docker volume ls命令時(shí)形病,會(huì)向plugin發(fā)送該請(qǐng)求客年,獲取volume list。
    • /VolumeDriver.Capabilities

    docker官方提供了一個(gè)編寫接口的SDK漠吻,docker/go-plugins-helpers, 在編寫volume plugin的時(shí)候量瓜,我們只需要實(shí)現(xiàn)Driver interface中的方法就可以了。

    image

  • 下面我們一起來看一個(gè)第三方的plugin, docker-volume-glusterfs

    其中一個(gè)Mount方法

    WX20170706-154238@2x.png

    其實(shí)就是在先在容器的宿主機(jī)將gluster存儲(chǔ)掛載至本地途乃,然后再提供給容器使用

    WX20170706-154303@2x.png

總結(jié)

從上面可以看出绍傲,無論使用volume還是volume plugin來實(shí)現(xiàn)容器的持久化存儲(chǔ),本質(zhì)上都是將容器所在宿主機(jī)上都文件系統(tǒng)掛在至容器內(nèi)使用,使用volume plugin就是完成了兩個(gè)動(dòng)作:1. 首先將存儲(chǔ)掛在至本地文件系統(tǒng)烫饼;2. 在將本地文件系統(tǒng)掛載至容器使用猎塞,完成了容器與共享存儲(chǔ)的解耦合,在大型的容器使用環(huán)境還是非常有必要的杠纵!

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荠耽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子比藻,更是在濱河造成了極大的恐慌骇塘,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件韩容,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡唐瀑,警方通過查閱死者的電腦和手機(jī)群凶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哄辣,“玉大人请梢,你說我怎么就攤上這事×λ耄” “怎么了毅弧?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長当窗。 經(jīng)常有香客問我够坐,道長,這世上最難降的妖魔是什么崖面? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任元咙,我火速辦了婚禮,結(jié)果婚禮上巫员,老公的妹妹穿的比我還像新娘庶香。我一直安慰自己,他們只是感情好简识,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布赶掖。 她就那樣靜靜地躺著,像睡著了一般七扰。 火紅的嫁衣襯著肌膚如雪奢赂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天颈走,我揣著相機(jī)與錄音呈驶,去河邊找鬼。 笑死疫鹊,一個(gè)胖子當(dāng)著我的面吹牛袖瞻,可吹牛的內(nèi)容都是我干的司致。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼聋迎,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼脂矫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起霉晕,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤庭再,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后牺堰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拄轻,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年伟葫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恨搓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筏养,死狀恐怖斧抱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情渐溶,我是刑警寧澤辉浦,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站茎辐,受9級(jí)特大地震影響宪郊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拖陆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一废膘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧慕蔚,春花似錦丐黄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坏瞄,卻和暖如春桂对,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鸠匀。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國打工蕉斜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓宅此,卻偏偏與公主長得像机错,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子父腕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理弱匪,服務(wù)發(fā)現(xiàn),斷路器璧亮,智...
    卡卡羅2017閱讀 134,664評(píng)論 18 139
  • 轉(zhuǎn)載自 http://blog.opskumu.com/docker.html 一萧诫、Docker 簡介 Docke...
    極客圈閱讀 10,501評(píng)論 0 120
  • 一、Docker 簡介 Docker 兩個(gè)主要部件:Docker: 開源的容器虛擬化平臺(tái)Docker Hub: 用...
    R_X閱讀 4,389評(píng)論 0 27
  • 以下原文轉(zhuǎn)載于(https://docs.docker.com/docker-for-mac/)(想找中文版的最新...
    Veekend閱讀 7,570評(píng)論 0 17
  • 《一步之遙》這部電影看了有一星期了枝嘶×比模總想提筆寫點(diǎn)東西,事至臨頭群扶,總是有事耽誤了及刻,或許這只是我構(gòu)思這篇影評(píng)的想法,還...
    紫草茵茵閱讀 1,137評(píng)論 1 4