柚子快報(bào)邀請(qǐng)碼778899分享:四、Docker容器數(shù)據(jù)卷
文章目錄
數(shù)據(jù)卷介紹配置數(shù)據(jù)卷配置數(shù)據(jù)卷容器
數(shù)據(jù)卷介紹
數(shù)據(jù)卷(Data Volumes)是宿主機(jī)中的一個(gè)目錄或文件,數(shù)據(jù)卷的設(shè)計(jì)目的就是數(shù)據(jù)的持久化,完全獨(dú)立于容器的生存周期,因此Docker不會(huì)在容器刪除時(shí)刪除其掛載的數(shù)據(jù)卷。當(dāng)容器目錄和數(shù)據(jù)卷目錄綁定后,對(duì)方的修改會(huì)立即同步,一個(gè)數(shù)據(jù)卷可以被多個(gè)容器同時(shí)掛載,一個(gè)容器也可以被掛載多個(gè)數(shù)據(jù)卷。
數(shù)據(jù)卷的作用
容器數(shù)據(jù)持久化外部機(jī)器和容器間接通信容器之間數(shù)據(jù)交換
配置數(shù)據(jù)卷
創(chuàng)建啟動(dòng)容器時(shí),使用-v參數(shù) 設(shè)置數(shù)據(jù)卷
docker run ... -v 宿主機(jī)目錄(文件):容器內(nèi)目錄(文件) ...
注意事項(xiàng):
目錄必須是絕對(duì)路徑如果目錄不存在,會(huì)自動(dòng)創(chuàng)建可以掛載多個(gè)數(shù)據(jù)卷
比如我要?jiǎng)?chuàng)建一個(gè)myRedis鏡像的容器,并創(chuàng)建數(shù)據(jù)卷:
docker run -it --name=myredis -v /root/data:/root/data_container myredis:latest /bin/bash
創(chuàng)建完畢后,在主機(jī)的/root目錄下出現(xiàn)了data目錄,而在容器的/root目錄下出現(xiàn)了data_container目錄。
然后在主機(jī)上創(chuàng)建一個(gè)a.txt:
發(fā)現(xiàn)容器的data_container目錄下也多了一個(gè)a.txt文件:
將容器關(guān)閉并刪除之后,文件依然在。
然后使用docker run -it --name=myredis -v /root/data:/root/data_container myredis:latest /bin/bash重新起一個(gè)容器,發(fā)現(xiàn)容器中的a.txt文件又回來(lái)了:
一個(gè)容器掛載多個(gè)目錄
docker run -it --name=myredis \
-v ~/data2:/root/data2 \
-v ~/data3:/root/data3 \
myredis:latest \
/bin/bash
查看容器的/root/data目錄,發(fā)現(xiàn)多了兩個(gè)目錄:
主機(jī)的/root/data目錄下也多了兩個(gè)目錄:
兩個(gè)容器通過(guò)掛載同一個(gè)目錄共享數(shù)據(jù)
容器1:
docker run -it --name=myredis1 \
-v ~/data:/root/data \
myredis:latest \
/bin/bash
容器2:
docker run -it --name=myredis2 \
-v ~/data:/root/data \
myredis:latest \
/bin/bash
可以看到,兩個(gè)容器和主機(jī)的/root目錄下都多了一個(gè)data目錄:
接著,我們?cè)谌萜?的data目錄下創(chuàng)建一個(gè)a.txt,并向文件中寫(xiě)入一個(gè)’‘hello’'字符串:
然后在容器2中可以發(fā)現(xiàn)剛剛在容器1中創(chuàng)建的內(nèi)容:
配置數(shù)據(jù)卷容器
多容器如何進(jìn)行數(shù)據(jù)交互,在上面我們使用的是多個(gè)容器掛載同一個(gè)數(shù)據(jù)卷的方式,其實(shí)還有一種方式,就是創(chuàng)建數(shù)據(jù)卷容器。
比如現(xiàn)在有三個(gè)容器:c1、c2和c3,現(xiàn)在我們將c3掛載一個(gè)數(shù)據(jù)卷,然后將c1和c2分別掛載到c3上面,這個(gè)時(shí)候就相當(dāng)于c1與c2同時(shí)掛載到了數(shù)據(jù)卷上,可以進(jìn)行數(shù)據(jù)共享(即使c3出問(wèn)題宕機(jī)了,c1和c2依然能正常完成數(shù)據(jù)共享),此時(shí)c3就被稱為數(shù)據(jù)卷容器。
首先啟動(dòng)c3數(shù)據(jù)卷容器,使用-v參數(shù)設(shè)置數(shù)據(jù)卷:
docker run -it --name=c3 -v ~/data:/root/volume myredis:latest /bin/bash
然后創(chuàng)建啟動(dòng)c1、c2容器,使用--volumes-from參數(shù)設(shè)置數(shù)據(jù)卷:
docker run -it --name=c1 --volumes-from c3 myredis:latest /bin/bash
docker run -it --name=c2 --volumes-from c3 myredis:latest /bin/bash
創(chuàng)建完畢后,我們首先在c1容器的/root/volume目錄下創(chuàng)建一個(gè)b.txt,并在里面寫(xiě)入"docker"字符串:
然后在c2中可以發(fā)現(xiàn)剛剛在c1中創(chuàng)建的內(nèi)容:
柚子快報(bào)邀請(qǐng)碼778899分享:四、Docker容器數(shù)據(jù)卷
文章鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。