Docker數(shù)據(jù)管理(數(shù)據(jù)卷&數(shù)據(jù)卷容器)

參考https://www.cnblogs.com/wade-luffy/p/6542539.html

生產(chǎn)環(huán)境中使用Docker的過(guò)程中冯事,往往需要對(duì)數(shù)據(jù)進(jìn)行持久化铅碍,或者需要在多個(gè)容器之間進(jìn)行數(shù)據(jù)共享,這必然涉及容器的數(shù)據(jù)管理操作汛蝙。

容器中管理數(shù)據(jù)主要有兩種方式:

  1. 數(shù)據(jù)卷(Data Volumes):容器內(nèi)數(shù)據(jù)直接映射到本地主機(jī)環(huán)境;如何在容器內(nèi)創(chuàng)建數(shù)據(jù)卷,并且把本地的目錄或文件掛載到容器內(nèi)的數(shù)據(jù)卷中鹿驼。
  2. 數(shù)據(jù)卷容器(Data Volume Containers):使用特定容器維護(hù)數(shù)據(jù)卷。如何使用數(shù)據(jù)卷容器在容器和主機(jī)辕宏、容器和容器之間共享數(shù)據(jù)畜晰,并實(shí)現(xiàn)數(shù)據(jù)的備份和恢復(fù)。

數(shù)據(jù)卷

數(shù)據(jù)卷是一個(gè)可供容器使用的特殊目錄瑞筐,它將主機(jī)操作系統(tǒng)目錄直接映射進(jìn)容器凄鼻,類(lèi)似于Linux中的mount操作

數(shù)據(jù)卷可以提供很多有用的特性聚假,如下所示:

  • 數(shù)據(jù)卷可以在容器之間共享和重用块蚌,容器間傳遞數(shù)據(jù)將變得高效方便;
  • 對(duì)數(shù)據(jù)卷內(nèi)數(shù)據(jù)的修改會(huì)立馬生效膘格,無(wú)論是容器內(nèi)操作還是本地操作峭范;
  • 對(duì)數(shù)據(jù)卷的更新不會(huì)影響鏡像,解耦了應(yīng)用和數(shù)據(jù)瘪贱;
  • 卷會(huì)一直存在纱控,直到?jīng)]有容器使用,可以安全地卸載它菜秦。

1.在容器內(nèi)創(chuàng)建一個(gè)數(shù)據(jù)卷

在用docker run命令的時(shí)候甜害,使用-v標(biāo)記可以在容器內(nèi)創(chuàng)建一個(gè)數(shù)據(jù)卷。多次重復(fù)使用-v標(biāo)記可以創(chuàng)建多個(gè)數(shù)據(jù)卷喷户。

下面使用training/webapp鏡像創(chuàng)建一個(gè)web容器唾那,并創(chuàng)建一個(gè)數(shù)據(jù)卷掛載到容器的/webapp目錄:

$ docker run -d -P --name web -v /webapp training/webapp python app.py

-P是將容器服務(wù)暴露的端口,是自動(dòng)映射到本地主機(jī)的臨時(shí)端口。

2.掛載一個(gè)主機(jī)目錄作為數(shù)據(jù)卷

使用-v標(biāo)記也可以指定掛載一個(gè)本地的已有目錄到容器中去作為數(shù)據(jù)卷(推薦方式)闹获。

$ docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

上面的命令加載主機(jī)的/src/webapp目錄到容器的/opt/webapp目錄期犬。

這個(gè)功能在進(jìn)行測(cè)試的時(shí)候十分方便,比如用戶(hù)可以將一些程序或數(shù)據(jù)放到本地目錄中避诽,然后在容器內(nèi)運(yùn)行和使用龟虎。另外,本地目錄的路徑必須是絕對(duì)路徑沙庐,如果目錄不存在,Docker會(huì)自動(dòng)創(chuàng)建鲤妥。

Docker掛載數(shù)據(jù)卷的默認(rèn)權(quán)限是讀寫(xiě)(rw),用戶(hù)也可以通過(guò)ro指定為只讀:

$ docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py

加了:ro之后拱雏,容器內(nèi)對(duì)所掛載數(shù)據(jù)卷內(nèi)的數(shù)據(jù)就無(wú)法修改了棉安。

3.掛載一個(gè)本地主機(jī)文件作為數(shù)據(jù)卷

-v標(biāo)記也可以從主機(jī)掛載單個(gè)文件到容器中作為數(shù)據(jù)卷(不推薦)。

$ docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash

這樣就可以記錄在容器輸入過(guò)的命令歷史了铸抑。

如果直接掛載一個(gè)文件到容器辆它,使用文件編輯工具偿衰,包括vi或者sed--in-place的時(shí)候芯砸,可能會(huì)造成文件inode的改變州丹,從Docker 1.1.0起,這會(huì)導(dǎo)致報(bào)錯(cuò)誤信息刁憋。所以推薦的方式是直接掛載文件所在的目錄滥嘴。

數(shù)據(jù)卷容器

如果用戶(hù)需要在多個(gè)容器之間共享一些持續(xù)更新的數(shù)據(jù),最簡(jiǎn)單的方式是使用數(shù)據(jù)卷容器至耻。數(shù)據(jù)卷容器也是一個(gè)容器若皱,但是它的目的是專(zhuān)門(mén)用來(lái)提供數(shù)據(jù)卷供其他容器掛載。

首先有梆,創(chuàng)建一個(gè)數(shù)據(jù)卷容器dbdata是尖,并在其中創(chuàng)建一個(gè)數(shù)據(jù)卷掛載到/dbdata:

$ docker run -it -v /dbdata --name dbdata ubuntu
root@3ed94f279b6f:/#

查看/dbdata目錄:

root@3ed94f279b6f:/# ls
bin  boot  dbdata  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run sbin  srv  sys  tmp  usr  var

然后意系,可以在其他容器中使用--volumes-from來(lái)掛載dbdata容器中的數(shù)據(jù)卷.

例如創(chuàng)建db1和db2兩個(gè)容器泥耀,并從dbdata容器掛載數(shù)據(jù)卷:

$ docker run -it --volumes-from dbdata --name db1 ubuntu
$ docker run -it --volumes-from dbdata --name db2 ubuntu

此時(shí),容器db1和db2都掛載同一個(gè)數(shù)據(jù)卷到相同的/dbdata目錄蛔添。三個(gè)容器任何一方在該目錄下的寫(xiě)入痰催,其他容器都可以看到。

例如迎瞧,在dbdata容器中創(chuàng)建一個(gè)test文件夸溶,如下所示:

root@3ed94f279b6f:/# cd /dbdata
root@3ed94f279b6f:/dbdata# touch test
root@3ed94f279b6f:/dbdata# ls
test

在db1容器內(nèi)查看它:

$ docker run -it --volumes-from dbdata --name db1  ubuntu
root@4128d2d804b4:/# ls
bin  boot  dbdata  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@4128d2d804b4:/# ls dbdata/
test

可以多次使用--volumes-from參數(shù)來(lái)從多個(gè)容器掛載多個(gè)數(shù)據(jù)卷。還可以從其他已經(jīng)掛載了容器卷的容器來(lái)掛載數(shù)據(jù)卷凶硅。

使用--volumes-from參數(shù)所掛載數(shù)據(jù)卷的容器自身并不需要保持在運(yùn)行狀態(tài)缝裁。

如果刪除了掛載的容器(包括dbdata、db1和db2)足绅,數(shù)據(jù)卷并不會(huì)被自動(dòng)刪除捷绑。如果要?jiǎng)h除一個(gè)數(shù)據(jù)卷韩脑,必須在刪除最后一個(gè)還掛載著它的容器時(shí)顯式使用docker rm -v命令來(lái)指定同時(shí)刪除關(guān)聯(lián)的容器。

利用數(shù)據(jù)卷容器來(lái)遷移數(shù)據(jù)

可以利用數(shù)據(jù)卷容器對(duì)其中的數(shù)據(jù)卷進(jìn)行備份粹污、恢復(fù)段多,以實(shí)現(xiàn)數(shù)據(jù)的遷移。

下面介紹這兩個(gè)操作壮吩。

1.備份

使用下面的命令來(lái)備份dbdata數(shù)據(jù)卷容器內(nèi)的數(shù)據(jù)卷:

$ docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata

首先利用ubuntu鏡像創(chuàng)建了一個(gè)容器worker进苍。使用--volumes-from dbdata參數(shù)來(lái)讓worker容器掛載dbdata容器的數(shù)據(jù)卷(即dbdata數(shù)據(jù)卷),使用-v $(pwd):/backup參數(shù)來(lái)掛載本地的當(dāng)前目錄到worker容器的/backup目錄。worker容器啟動(dòng)后鸭叙,使用了tar cvf /backup/backup.tar /dbdata命令來(lái)將/dbdata下內(nèi)容備份為容器內(nèi)的/backup/backup.tar觉啊,即宿主主機(jī)當(dāng)前目錄下的backup.tar。

2.恢復(fù)

如果要將數(shù)據(jù)恢復(fù)到一個(gè)容器沈贝,可以按照下面的步驟操作柄延。

首先創(chuàng)建一個(gè)帶有數(shù)據(jù)卷的容器dbdata2:

docker run -v /dbdata --name dbdata2 ubuntu /bin/bash

然后創(chuàng)建另一個(gè)新的容器,掛載dbdata2的容器缀程,并使用untar解壓備份文件到所掛載的容器卷中:

docker run --volumes-from dbdata2 -v $(pwd):/backup --name worker ubuntu bash
cd /dbdata
tar xvf /backup/backup.tar
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末搜吧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子杨凑,更是在濱河造成了極大的恐慌滤奈,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撩满,死亡現(xiàn)場(chǎng)離奇詭異蜒程,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)伺帘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)昭躺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人伪嫁,你說(shuō)我怎么就攤上這事领炫。” “怎么了张咳?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵帝洪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我脚猾,道長(zhǎng)葱峡,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任龙助,我火速辦了婚禮砰奕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己军援,他們只是感情好常空,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著盖溺,像睡著了一般漓糙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上烘嘱,一...
    開(kāi)封第一講書(shū)人閱讀 51,231評(píng)論 1 299
  • 那天昆禽,我揣著相機(jī)與錄音,去河邊找鬼蝇庭。 笑死醉鳖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的哮内。 我是一名探鬼主播盗棵,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼北发!你這毒婦竟也來(lái)了纹因?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤琳拨,失蹤者是張志新(化名)和其女友劉穎瞭恰,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體狱庇,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惊畏,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了密任。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颜启。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖浪讳,靈堂內(nèi)的尸體忽然破棺而出缰盏,到底是詐尸還是另有隱情,我是刑警寧澤驻债,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布乳规,位于F島的核電站,受9級(jí)特大地震影響合呐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜笙以,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一淌实、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦拆祈、人聲如沸恨闪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)咙咽。三九已至,卻和暖如春淤年,著一層夾襖步出監(jiān)牢的瞬間钧敞,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工麸粮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留溉苛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓弄诲,卻偏偏與公主長(zhǎng)得像愚战,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子齐遵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

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

  • 用戶(hù)在使用docker的過(guò)程中寂玲,往往需要能查看容器內(nèi)應(yīng)用產(chǎn)生的數(shù)據(jù),或者需要把容器內(nèi)的數(shù)據(jù)進(jìn)行備份梗摇,甚至多個(gè)容器之...
    八目朱勇銘閱讀 402評(píng)論 0 1
  • 生產(chǎn)環(huán)境中使用 Docker 的過(guò)程中, 往往需要對(duì)數(shù)據(jù)進(jìn)行持久化, 或者需要在多個(gè)容器之間進(jìn)行數(shù)據(jù)共享, 這必然...
    我相信你愛(ài)過(guò)gg閱讀 494評(píng)論 0 0
  • 1.Docker volume使用 Docker中的數(shù)據(jù)可以存儲(chǔ)在類(lèi)似于虛擬機(jī)磁盤(pán)的介質(zhì)中敢茁,在Docker中稱(chēng)為數(shù)...
    MoonMonsterss閱讀 1,995評(píng)論 0 0
  • 五、Docker 端口映射 無(wú)論如何留美,這些 ip 是基于本地系統(tǒng)的并且容器的端口非本地主機(jī)是訪問(wèn)不到的彰檬。此外,除了...
    R_X閱讀 1,748評(píng)論 0 7
  • 今天谎砾,我去踢足球今天的二年級(jí)還是跟我們訓(xùn)練逢倍。我們先訓(xùn)練跟腳有關(guān)的動(dòng)作,然后我們就比賽比賽呢我們還是輸了因?yàn)槲?..
    歐陽(yáng)至俊閱讀 134評(píng)論 0 0