如何利用Volume在主機(jī)和Docker容器文件傳輸

小編給大家分享一下如何利用Volume在主機(jī)和Docker容器文件傳輸,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)成都網(wǎng)站建設(shè)按需制作網(wǎng)站,是成都網(wǎng)站設(shè)計(jì)公司,為混凝土攪拌站提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計(jì)服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計(jì)、前端HTML5制作、后臺(tái)程序開(kāi)發(fā)等。成都網(wǎng)站營(yíng)銷(xiāo)推廣熱線:028-86922220

1.使用Volume在主機(jī)和容器之間傳輸文件。

在官方文檔中可以看到使用如下命令即可創(chuàng)建一個(gè)volume:

Create a volume:

$ docker volume create my-vol

注意這個(gè)命令不是所有的docker版本都可以運(yùn)行的:

The client and daemon API must both be at least 1.21 to use this command. Use the docker version command on the client to check your client and daemon API versions.

如何利用Volume在主機(jī)和Docker容器文件傳輸

創(chuàng)建完成之后可以查看詳細(xì)信息:

$ docker volume inspect my-vol

如何利用Volume在主機(jī)和Docker容器文件傳輸

注意這個(gè)Mountpoint所對(duì)應(yīng)的目錄就是我們用來(lái)主機(jī)和容器進(jìn)行文件傳輸?shù)哪夸洝?/p>

然后在使用run啟動(dòng)一個(gè)容器的時(shí)候就可以使用該volume:

如何利用Volume在主機(jī)和Docker容器文件傳輸

可以看到通過(guò)-v命令將剛才創(chuàng)建的數(shù)據(jù)卷掛載到容器中的hostdata目錄下了,這時(shí)候我們?cè)谌萜髦薪ohostdata目錄下添加文件的時(shí)候,在主機(jī)的的/var/lib/docker/volumes/my-vol/_data中就可以看到了,同理在主機(jī)的該目錄中添加文件,在容器的hostdata中也可以看到。

我將nginx這個(gè)文件復(fù)制到主機(jī)中用來(lái)交換的目錄下,進(jìn)入容器之后在hostdata的目錄下也可以查看:

如何利用Volume在主機(jī)和Docker容器文件傳輸

同樣的在容器中將文件拷貝到hostdata目錄下中,在主機(jī)的/var/lib/docker/volumes/my-vol/_data也能夠使用查看。

在這里我在容器中創(chuàng)建一個(gè)文件testfile并向其中寫(xiě)入:This is container write!,然后回到主機(jī)進(jìn)行查看,并在主機(jī)中使用vim向其中添加:“This is host write!”,并返回容器中進(jìn)行查看。

如何利用Volume在主機(jī)和Docker容器文件傳輸

2.使用數(shù)據(jù)卷容器。

我在有些地方看到有人使用數(shù)據(jù)卷容器來(lái)實(shí)現(xiàn)多個(gè)容器之間的數(shù)據(jù)共享,其過(guò)程是這樣子的:

1.先創(chuàng)建一個(gè)數(shù)據(jù)卷容器dbdata,并在其中創(chuàng)建一個(gè)數(shù)據(jù)卷掛載到/bdata:

如何利用Volume在主機(jī)和Docker容器文件傳輸

可以通過(guò)docker volume ls查看生成了一個(gè)隨機(jī)名稱的volume。

2.然后,可以在其他容器中使用–volumes-from來(lái)掛載dbdata容器中的數(shù)據(jù)卷,例如創(chuàng)建db1和db2兩個(gè)容器,并從dbdata容器掛載數(shù)據(jù)卷:

如何利用Volume在主機(jī)和Docker容器文件傳輸

3.然后此時(shí)在三個(gè)容器中任何一方在/dbdata目錄下的寫(xiě)入,其他容器中都可以看到。

如何利用Volume在主機(jī)和Docker容器文件傳輸

在圖中,在dbdata容器中創(chuàng)建testfile文件并寫(xiě)入”dbdata container write!”,然后在db1容器中查看并寫(xiě)入“db1 container write!”,然后在db2容器中查看并寫(xiě)入“da2 container write!”,最后回到dbdata容器中查看。

4.然后還可以通過(guò)多個(gè)–volumes-from來(lái)掛載多個(gè)數(shù)據(jù)卷,然后還給出了備份和恢復(fù)的方法,網(wǎng)上一搜一大把。

3.為什么不用數(shù)據(jù)卷容器?

在看到許許多多關(guān)于數(shù)據(jù)卷容器的文章,并且都是大同小異。然后我想了想發(fā)現(xiàn)并沒(méi)有使用數(shù)據(jù)卷的必要性(或許是我想的不夠周全)。

上面提到數(shù)據(jù)卷容器用來(lái)在多個(gè)容器中共享數(shù)據(jù),但是在明明可以通過(guò)掛載一個(gè)相同的本地目錄就能實(shí)現(xiàn)該方法。比如說(shuō)在第一步中創(chuàng)建的my-vol數(shù)據(jù)卷,我可以將其同時(shí)掛載到db3和db4容器中。

如何利用Volume在主機(jī)和Docker容器文件傳輸

在圖中,我將my-vol數(shù)據(jù)卷掛載到了db3和db4中,然后在其中能夠找到之前的數(shù)據(jù)文件,并且在db4容器中對(duì)testfile文件進(jìn)行寫(xiě)入操作,在db3中容器中也可以查看。

那么也就是說(shuō),我同樣的可以通過(guò)掛載一個(gè)數(shù)據(jù)卷就可以實(shí)現(xiàn)多個(gè)容器中的數(shù)據(jù)共享,并且在主機(jī)的目錄中添加的文件,在所有的容器中也能夠查看。如果備份的話直接在主機(jī)本地將文件夾進(jìn)行拷貝即可,豈不是更方便。

4.為什么使用數(shù)據(jù)卷容器?

但是數(shù)據(jù)卷容器還有一個(gè)作用比較不錯(cuò),那就是可以用來(lái)指定掛載本地目錄,在第一點(diǎn)中我們創(chuàng)建一個(gè)名為my-vol的數(shù)據(jù)卷,該數(shù)據(jù)卷在本地存放的目錄為:/var/lib/docker/volumes/my-vol/_data,可以看出這個(gè)名字很長(zhǎng)不方便操作,可以通過(guò)數(shù)據(jù)卷容器來(lái)解決該問(wèn)題。

比如我在主機(jī)上創(chuàng)建了一個(gè)專(zhuān)門(mén)用來(lái)存放主機(jī)和容器進(jìn)行文件交互的目錄,也就是說(shuō)以后我想給容器中傳輸什么文件了,我直接將文件拷貝到該目錄下即可:

如何利用Volume在主機(jī)和Docker容器文件傳輸

我在官方文檔中并沒(méi)有發(fā)現(xiàn)使用docker volume create 創(chuàng)建數(shù)據(jù)卷時(shí)可以指定volume對(duì)應(yīng)的本地目錄的命令(或許是我看的不夠多)。

但是我就是想要用/usr/local/datadb 這個(gè)目錄該怎么辦?此刻數(shù)據(jù)卷容器的作用就出來(lái)了,可以通過(guò)創(chuàng)建一個(gè)數(shù)據(jù)卷容器,并且將該目錄掛在到數(shù)據(jù)卷容器上即可:

如何利用Volume在主機(jī)和Docker容器文件傳輸

在圖中,我創(chuàng)建了一個(gè)所謂的數(shù)據(jù)卷容器,并且使用-v參數(shù),將剛才主機(jī)的/usr/local/datadb目錄掛載進(jìn)去,然后在容器中創(chuàng)建文件testfile并寫(xiě)入“HAHAHAHA”,在主機(jī)上進(jìn)行查看。

然后在其他容器創(chuàng)建的時(shí)候既可以使用–volumes-from將該數(shù)據(jù)卷容器進(jìn)行掛載,然后想給容器中傳文件的時(shí)候直接拷貝到/usr/local/datadb目錄下即可,反過(guò)來(lái)容器給主機(jī)傳文件直接拷貝到容器中的掛載目錄下即可。

至于備份,直接將主機(jī)/usr/local/datadb賦值一份就好了,恢復(fù)的話再次掛載就好了。

以上是“如何利用Volume在主機(jī)和Docker容器文件傳輸”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

名稱欄目:如何利用Volume在主機(jī)和Docker容器文件傳輸
分享URL:http://muchs.cn/article12/ispogc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄軟件開(kāi)發(fā)、企業(yè)網(wǎng)站制作、搜索引擎優(yōu)化、動(dòng)態(tài)網(wǎng)站做網(wǎng)站

廣告

聲明:本網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)