Docker的數(shù)據(jù)管理-創(chuàng)新互聯(lián)

Docker鏡像是由多個(gè)文件系統(tǒng)(只讀層)疊加而成。當(dāng)我們啟動(dòng)一個(gè)容器的時(shí)候,Docker會(huì)加載只讀鏡像層并在其上(即鏡像棧頂部)添加一個(gè)讀寫層。如果運(yùn)行中的容器修改了現(xiàn)有的一個(gè)已經(jīng)存在的文件,那該文件將會(huì)從讀寫層下面的只讀層復(fù)制到讀寫層,該文件的只讀版本仍然存在,只是已經(jīng)被讀寫層中該文件的副本所隱藏。當(dāng)刪除Docker容器,并通過該鏡像重新啟動(dòng)時(shí),之前的更改將會(huì)丟失。
在Docker中,只讀層及在頂部的讀寫層的組合被稱為Union File System(聯(lián)合文件系統(tǒng))。
為了能夠保存(持久化)數(shù)據(jù)以及共享容器間的數(shù)據(jù),Docker提出了Volume的概念。
簡(jiǎn)單來說,Volume就是目錄或者文件,它可以繞過默認(rèn)的聯(lián)合文件系統(tǒng),而以正常的文件或者目錄的形式存在于宿主機(jī)上。

10余年的溫江網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營銷型網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整溫江建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“溫江網(wǎng)站設(shè)計(jì)”,“溫江網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

總結(jié):Volume可以將容器以及容器產(chǎn)生的數(shù)據(jù)分離開來,當(dāng)你使用docker rm
my_container刪除容器時(shí),不會(huì)影響相關(guān)的數(shù)據(jù)。
我們可以通過兩種方式來初始化Volume,這兩種方式有些細(xì)小而又重要的差別。我們
可以在運(yùn)行時(shí)使用-v來聲明Volume:
docker管理數(shù)據(jù)的方式有兩種:
? 數(shù)據(jù)卷(Data Volumes)
? 數(shù)據(jù)卷容器(Data Volumes Containers)

數(shù)據(jù)卷:
數(shù)據(jù)卷是為一個(gè)或多個(gè)容器專門指定繞過Union File System的目錄,位于容器中,可將
宿主機(jī)的目錄掛載到數(shù)據(jù)卷上,對(duì)數(shù)據(jù)卷的修改操作立刻可見,并且更新數(shù)據(jù)不會(huì)影響鏡
像,從而實(shí)現(xiàn)數(shù)據(jù)在宿主機(jī)與容器之間的遷移,為持續(xù)性或共享數(shù)據(jù)提供一些有用的功能,
數(shù)據(jù)卷的使用,類似于Linux下對(duì)目錄進(jìn)行的mount操作
? 數(shù)據(jù)卷可以在容器間共享和重用
? 數(shù)據(jù)卷數(shù)據(jù)改變是直接修改的
? 數(shù)據(jù)卷數(shù)據(jù)改變不會(huì)被包括在容器中
? 數(shù)據(jù)卷是持續(xù)性的,直到?jīng)]有容器使用它

1、創(chuàng)建數(shù)據(jù)卷
在docker run 命令中使用-v選項(xiàng)可以在容器中創(chuàng)建數(shù)據(jù)卷。多次使用-v選項(xiàng)可以創(chuàng)建多個(gè)
數(shù)據(jù)卷。例如:
[root@docker01 ~]# docker run -itd -v /data1 -v /date2 --name web003 centos:httpv1
90030942574d6b47b6be2922a86b38f7483956f6231ab5e30fccc9d4431f61ec

進(jìn)入容器web003,可以看到兩個(gè)數(shù)據(jù)卷已經(jīng)創(chuàng)建成功并分別掛載到/data1與/date2上
Docker的數(shù)據(jù)管理
可以使用docker inspect web003查看到掛載的數(shù)據(jù)卷
[root@docker01 ~]# docker inspect web003
Docker的數(shù)據(jù)管理
用戶也可以在Dockerfile中指定數(shù)據(jù)卷:
例如:

FROM debian:wheezy
VOLUME /data
注1:Docker 掛載數(shù)據(jù)卷的默認(rèn)權(quán)限是讀寫,用戶也可以通過 :ro 指定為只讀。
例如:
Docker的數(shù)據(jù)管理
2、掛載主機(jī)目錄作為數(shù)據(jù)卷
如果想在容器中使用主機(jī)上的某個(gè)目錄,你可以通過-v參數(shù)來指定(注:注意冒號(hào)前面的
和后面的內(nèi)容):
docker run -v /host/path:/some/path ...
這明確地告訴Docker使用指定的主機(jī)路徑來代替Docker自己創(chuàng)建的根路徑并掛載到容器內(nèi)
指定的路徑(以上例子為/some/path)。需要注意的是,宿主機(jī)本地目錄上的路徑必須使
用絕對(duì)路徑,如果主機(jī)上的路徑不存在,目錄將自動(dòng)在給定的路徑中創(chuàng)建。
在用 docker run 命令的時(shí)候,可以指定掛載一個(gè)本地主機(jī)的目錄到容器中去,可以使用多
次-v選項(xiàng)為一個(gè) docker 容器運(yùn)行掛載多個(gè)本地主機(jī)目錄。
實(shí)例:1、在宿主機(jī)上創(chuàng)建/web/webapp1目錄,并創(chuàng)建一個(gè)index.html文件,內(nèi)容如下:
[root@docker01 ~]# mkdir /web/webapp1 -p
[root@docker01 ~]# cd /web/webapp1/
[root@docker01 webapp1]# echo "<h2> hello world</h2>" >> index.html
[root@docker01 webapp1]# cat index.html
<h2> hello world</h2>
[root@docker01 webapp1]#
2、使用帶有apache服務(wù)的一個(gè)鏡像,生成容器
[root@docker01 ~]# docker run -itd -v /web/webapp1/:/var/www/html/ -p 8000:80 --name web005
centos:httpv1

Docker的數(shù)據(jù)管理
3、訪問容器的網(wǎng)站服務(wù):
Docker的數(shù)據(jù)管理
上面的命令加載主機(jī)的 /web/webapp1 目錄到容器的 /var/www/html 目錄。這個(gè)功
能在進(jìn)行測(cè)試的時(shí)候十分方便,比如用戶可以放置一些程序到本地目錄中,來查看容器是否
正常工作。本地目錄的路徑必須是絕對(duì)路徑,如果目錄不存在 Docker 會(huì)自動(dòng)為你創(chuàng)建
它。/web/webapp1目錄的文件都將會(huì)出現(xiàn)在容器內(nèi)。這對(duì)于在主機(jī)和容器之間共享文件
是非常有幫助的,例如掛載需要編譯的源代碼。為了保證可移植性(并不是所有的系統(tǒng)的主
機(jī)目錄都是可以用的),掛載主機(jī)目錄不需要從Dockerfile指定。

數(shù)據(jù)卷容器:
如果需要在容器之間共享一些數(shù)據(jù),最簡(jiǎn)單的方法就是使用數(shù)據(jù)卷容器。數(shù)據(jù)卷容器
就是一個(gè)普通的容器,專門提供數(shù)據(jù)卷給其它容器掛載使用。
使用方法如下:首先,需要?jiǎng)?chuàng)建一個(gè)容器作為數(shù)據(jù)卷容器,之后在其它容器創(chuàng)建時(shí)用-
-volumes-from掛載數(shù)據(jù)卷容器中的數(shù)據(jù)卷使用。
常見的使用場(chǎng)景是使用純數(shù)據(jù)卷容器來持久化數(shù)據(jù)庫、配置文件或者數(shù)據(jù)文件等。
例如:docker run --name dbdata postgres echo "Data-only container for postgres"
該命令將會(huì)使用一個(gè)已經(jīng)包含在Dockerfile里定義過Volume的postgres鏡像來生成一個(gè)容
器dbdata(如:VOLUME /var/lib/postgresql/data),運(yùn)行echo命令然后退出。當(dāng)我
們運(yùn)行docker ps命令時(shí),echo可以幫助我們識(shí)別某鏡像的用途。我們可以用--volumesfrom命令來識(shí)別其它容器的Volume:
docker run -d --volumes-from dbdata --name db1 postgres

實(shí)例:
現(xiàn)在就來創(chuàng)建一個(gè)命名的數(shù)據(jù)卷容器:
#docker run -dit -v /test --name data 鏡像
Docker的數(shù)據(jù)管理
使用--volumes-from選項(xiàng)在另一個(gè)容器中掛載/test卷。不管data容器是否運(yùn)行,其它容器
都可以掛載該容器數(shù)據(jù)卷,當(dāng)然如果只是單獨(dú)的數(shù)據(jù)卷是沒必要運(yùn)行容器的。
然后,你可以在其他容器中使用 --volumes-from 來掛載/test卷

#docker run -dit --volumes-from data --name test1 鏡像
Docker的數(shù)據(jù)管理
再添加一個(gè)容器:
Docker的數(shù)據(jù)管理
注:還可以使用多個(gè) --volumes-from 參數(shù)來從多個(gè)容器掛載多個(gè)數(shù)據(jù)卷
執(zhí)行docker ps查看
Docker的數(shù)據(jù)管理
進(jìn)入test1、test2容器,執(zhí)行df查看
Docker的數(shù)據(jù)管理
也可以繼承其它掛載有 /test 卷的容器
#docker run -dit --volumes-from test1 --name test3 鏡像
如果刪除了掛載的容器(包括 data、db1 和 db2),數(shù)據(jù)卷并不會(huì)被自動(dòng)刪除。如果要?jiǎng)h
除一個(gè)數(shù)據(jù)卷,必須在刪除最后一個(gè)還掛載著它的容器時(shí)使用 docker rm -v 命令來指定
同時(shí)刪除關(guān)聯(lián)的容器。利用 Data Volume Container來備份、恢復(fù)、移動(dòng)數(shù)據(jù)

備份
數(shù)據(jù)卷另外一個(gè)功能是使用他們來備份、恢復(fù)、移動(dòng)數(shù)據(jù),如果你在用數(shù)據(jù)容器,那做備
份是相當(dāng)容易的。使用 --volume 標(biāo)記來創(chuàng)建一個(gè)加載了卷的新的容器,命令如下:
該示例應(yīng)該會(huì)將Volume里所有的東西壓縮為一個(gè)tar包
[root@docker01 ~]# docker run --rm --volumes-from data -v $(pwd):/backup centos:httpv1 tar cvf /backup/backup.tar /test
Docker的數(shù)據(jù)管理
這里我們創(chuàng)建了一個(gè)容器,先從data容器來掛載數(shù)據(jù)卷。然后從本地主機(jī)掛載當(dāng)前目錄到
容器的 /backup 目錄。最后,使用tar命令來將data 卷備份為backup.tar 。當(dāng)命令執(zhí)行
完、容器停止之后,我們就備份了 data 數(shù)據(jù)卷
執(zhí)行完成之后刪除容器 --rm,此時(shí)備份就在當(dāng)前的目錄下,名為backup.tar
宿主機(jī)當(dāng)前目錄下產(chǎn)生了test卷的備份文件test.tar
Docker的數(shù)據(jù)管理

Docker的數(shù)據(jù)管理
恢復(fù)
docker run --volumes-from data -v /root/:/backup centos:httpv1 tar zxf /backup/backup.tar -C /test/
Docker的數(shù)據(jù)管理
附:
權(quán)限與許可
通常你需要設(shè)置Volume的權(quán)限或者為Volume初始化一些默認(rèn)數(shù)據(jù)或者配置文件。要注意
的關(guān)鍵點(diǎn)是,在Dockerfile的VOLUME指令后的任何指令都不能改變?cè)揤olume,比如:
FROM debian:wheezy
RUN useradd foo
VOLUME /data
RUN touch /data/x
RUN chown -R foo:foo /data
該Docker file不能按預(yù)期那樣運(yùn)行,我們本來希望touch命令在鏡像的文件系統(tǒng)上運(yùn)行,但
是實(shí)際上它是在一個(gè)臨時(shí)容器的Volume上運(yùn)行。如下所示:
FROM debian:wheezy
RUN useradd foo
RUN mkdir /data && touch /data/x
RUN chown -R foo:foo /data
VOLUME /data
所以,牢記Dockerfile中VOLUME指令的位置(VOLUME是設(shè)置指令)
如果你沒有通過RUN指令設(shè)置權(quán)限,那么你就需要在容器啟動(dòng)時(shí)使用CMD或ENTRYPOINT
指令來執(zhí)行
刪除 Volumes
Volume 只有在下列情況下才能被刪除:
? docker rm -v刪除容器時(shí)添加了-v選項(xiàng)
例如:你可以告訴Docker同時(shí)刪除容器和其Volume:
docker rm -v my_container
? docker run --rm運(yùn)行容器時(shí)添加了--rm選項(xiàng)
即使用以上兩種命令,也只能刪除沒有容器連接的Volume。連接到用戶指定主機(jī)目錄
的Volume永遠(yuǎn)不會(huì)被docker刪除。否則,會(huì)在/var/lib/docker/volumes目錄下得到一些
僵尸文件和目錄,并且還不容易說出它們到底代表什么。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

當(dāng)前文章:Docker的數(shù)據(jù)管理-創(chuàng)新互聯(lián)
URL地址:http://muchs.cn/article38/dsgssp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、靜態(tài)網(wǎng)站商城網(wǎng)站、網(wǎng)站設(shè)計(jì)、ChatGPT、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)