Docker(3)Volume與綁定掛載(bind mount)機(jī)制

1. 問題背景

Docker項(xiàng)目使用了mount namespace和rootfs的文件鏡像來實(shí)現(xiàn)了容器鏡像文件系統(tǒng)和宿主機(jī)系統(tǒng)的隔離。但是诉字,以下兩個(gè)容器和宿主機(jī)的文件交互問題怎么解決多糠?

  • 容器中新建的文件累舷,宿主機(jī)怎么獲取到?
  • 宿主機(jī)上的文件和目錄夹孔,容器內(nèi)部進(jìn)程怎么獲缺挥?

2. 使用方式

可以通過以下兩種起Docker容器的方式搭伤,把宿主機(jī)目錄掛載進(jìn)入容器的對(duì)應(yīng)目錄:

$ docker run -v /docker_dir ...
$ docker run -v /home:/docker_dir ...

當(dāng)不指明宿主機(jī)目錄時(shí)只怎,Docker會(huì)默認(rèn)在宿主機(jī)上創(chuàng)建一個(gè)臨時(shí)目錄: /var/lib/docker/volumes/[VOLUME_ID]/_data作為宿主機(jī)上的被掛載目錄。

3. 原理

3.1 Docker容器原理

回憶《Docker(2)容器技術(shù)基本概念理解》中的Docker容器的核心原理:

  • 啟動(dòng)Linux Namespace配置
  • 設(shè)置指定的Cgroups參數(shù)
  • 切換進(jìn)程的根目錄(change root, 配合namespace mount)
    而在第三步執(zhí)行chroot和pivot_root之前怜俐,容器進(jìn)程是可以一直看到宿主機(jī)上的整個(gè)文件系統(tǒng)的身堡。所以可以在這里做點(diǎn)文章。

3.2 綁定掛載(bind mount)機(jī)制

當(dāng)我們宿主機(jī)上已經(jīng)存在了一個(gè)容器鏡像時(shí)拍鲤,鏡像的各個(gè)層贴谎,都被保存在/var/lib/docker/aufs/diff目錄下,容器啟動(dòng)之后季稳,會(huì)被聯(lián)合掛載在/var/lib/docker/aufs/mnt下赴精,這時(shí)候容器所需要的rootfs就準(zhǔn)備好了。
因此绞幌,對(duì)于 2. 使用方式 中的場(chǎng)景,我們只需要在rootfs準(zhǔn)備好一忱,chroot執(zhí)行之前莲蜘,吧Volume指定的宿主機(jī)目錄(比如/home目錄)谭确,掛載到指定的容器目錄(如/test目錄)在宿主機(jī)上對(duì)應(yīng)的目錄(/var/lib/docker/aufs/mnt/[可讀可寫層ID]/test)上,這個(gè)Volume掛載工作就完成了票渠。
同時(shí)逐哈,因?yàn)閳?zhí)行掛載時(shí),“容器進(jìn)程”已經(jīng)完成了創(chuàng)建问顷,所以這時(shí)Mount Namespace已經(jīng)開啟昂秃,所以這個(gè)掛載點(diǎn),只能在容器中看見杜窄,宿主機(jī)是看不到的肠骆。保證了容器的隔離性不會(huì)被Volume打破
上面提到的掛載操作塞耕,使用的就是Linux的綁定掛載(bind mount)機(jī)制蚀腿。

綁定掛載
允許用戶將一個(gè)目錄或者文件,掛載到一個(gè)指定的目錄上扫外,并且莉钙,之后在這個(gè)掛載點(diǎn)上的操作,只發(fā)生在被掛載的目錄或者文件上筛谚,而原來掛載點(diǎn)的內(nèi)容會(huì)被隱藏起來不受影響磁玉。

該去學(xué)習(xí)一下Linux內(nèi)核了
綁定掛載其實(shí)是一個(gè)inode替換的過程,在Linux操作系統(tǒng)中驾讲,inode可以理解為存放文件內(nèi)容的對(duì)象蚊伞,而dentry,也叫目錄項(xiàng)蝎毡,就是訪問這個(gè)inode所使用的“指針”厚柳。
在下圖中,mount --bind /home /test 沐兵,會(huì)把/home掛載到/test上别垮,實(shí)際上相當(dāng)于吧/test的/dentry,指向修改為/home的inode扎谎,這樣修改/test碳想,實(shí)際上修改的是/home對(duì)應(yīng)的inode。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末毁靶,一起剝皮案震驚了整個(gè)濱河市胧奔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌预吆,老刑警劉巖龙填,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡岩遗,警方通過查閱死者的電腦和手機(jī)扇商,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宿礁,“玉大人案铺,你說我怎么就攤上這事“鹁福” “怎么了控汉?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長返吻。 經(jīng)常有香客問我姑子,道長,這世上最難降的妖魔是什么思喊? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任壁酬,我火速辦了婚禮,結(jié)果婚禮上恨课,老公的妹妹穿的比我還像新娘舆乔。我一直安慰自己,他們只是感情好剂公,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布希俩。 她就那樣靜靜地躺著,像睡著了一般纲辽。 火紅的嫁衣襯著肌膚如雪颜武。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天拖吼,我揣著相機(jī)與錄音鳞上,去河邊找鬼。 笑死吊档,一個(gè)胖子當(dāng)著我的面吹牛篙议,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播怠硼,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼鬼贱,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了香璃?” 一聲冷哼從身側(cè)響起这难,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎葡秒,沒想到半個(gè)月后姻乓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嵌溢,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年糖权,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了堵腹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡星澳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出旱易,到底是詐尸還是另有隱情禁偎,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布阀坏,位于F島的核電站如暖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏忌堂。R本人自食惡果不足惜盒至,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望士修。 院中可真熱鬧枷遂,春花似錦、人聲如沸棋嘲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沸移。三九已至痪伦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間雹锣,已是汗流浹背网沾。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蕊爵,地道東北人辉哥。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像在辆,于是被迫代替她去往敵國和親证薇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345