1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | Docker中的數據可以存儲在類(lèi)似于虛擬機磁盤(pán)的介質(zhì)中,在Docker中稱(chēng)為數據卷(Data Volume)。數據卷可以用來(lái)存儲Docker應用的數據,也可以用來(lái)在Docker容器間進(jìn)行數據共享。數據卷呈現給Docker容器的形式就是一個(gè)目錄,支持多個(gè)容器間共享,修改也不會(huì )影響鏡像。使用Docker的數據卷,類(lèi)似在系統中使用 mount 掛載一個(gè)文件系統。1)一個(gè)數據卷是一個(gè)特別指定的目錄,該目錄利用容器的UFS文件系統可以為容器提供一些穩定的特性或者數據共享。數據卷可以在多個(gè)容器之間共享。2)創(chuàng )建數據卷,只要在docker run命令后面跟上-v參數即可創(chuàng )建一個(gè)數據卷,當然也可以跟多個(gè)-v參數來(lái)創(chuàng )建多個(gè)數據卷,當創(chuàng )建好帶有數據卷的容器后, 就可以在其他容器中通過(guò)--volumes-froms參數來(lái)掛載該數據卷了,而不管該容器是否運行。也可以在Dockerfile中通過(guò)VOLUME指令來(lái)增加一個(gè)或者多個(gè)數據卷。3)如果有一些數據想在多個(gè)容器間共享,或者想在一些臨時(shí)性的容器中使用該數據,那么最好的方案就是你創(chuàng )建一個(gè)數據卷容器,然后從該臨時(shí)性的容器中掛載該數據卷容器的數據。 這樣,即使刪除了剛開(kāi)始的第一個(gè)數據卷容器或者中間層的數據卷容器,只要有其他容器使用數據卷,數據卷都不會(huì )被刪除的。4)不能使用docker export、save、cp等命令來(lái)備份數據卷的內容,因為數據卷是存在于鏡像之外的。備份的方法可以是創(chuàng )建一個(gè)新容器,掛載數據卷容器,同時(shí)掛載一個(gè)本地目錄, 然后把遠程數據卷容器的數據卷通過(guò)備份命令備份到映射的本地目錄里面。如下: # docker run -rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data5)也可以把一個(gè)本地主機的目錄當做數據卷掛載在容器上,同樣是在docker run后面跟-v參數,不過(guò)-v后面跟的不再是單獨的目錄了,它是[host-dir]:[container-dir]:[rw|ro]這樣格式的, host-dir是一個(gè)絕對路徑的地址,如果host-dir不存在,則docker會(huì )創(chuàng )建一個(gè)新的數據卷,如果host-dir存在,但是指向的是一個(gè)不存在的目錄,則docker也會(huì )創(chuàng )建該目錄,然后使用該目錄做數據源。 Docker Volume數據卷可以實(shí)現:1)繞過(guò)“拷貝寫(xiě)”系統,以達到本地磁盤(pán)IO的性能,(比如運行一個(gè)容器,在容器中對數據卷修改內容,會(huì )直接改變宿主機上的數據卷中的內容,所以是本地磁盤(pán)IO的性能,而不是先在容器中寫(xiě)一份,最后還要將容器中的修改的內容拷貝出來(lái)進(jìn)行同步。)2)繞過(guò)“拷貝寫(xiě)”系統,有些文件不需要在docker commit打包進(jìn)鏡像文件。3)數據卷可以在容器間共享和重用數據4)數據卷可以在宿主和容器間共享數據5)數據卷數據改變是直接修改的6)數據卷是持續性的,直到?jīng)]有容器使用它們。即便是初始的數據卷容器或中間層的數據卷容器刪除了,只要還有其他的容器使用數據卷,那么里面的數據都不會(huì )丟失。 Docker數據持久化:容器在運行期間產(chǎn)生的數據是不會(huì )寫(xiě)在鏡像里面的,重新用此鏡像啟動(dòng)新的容器就會(huì )初始化鏡像,會(huì )加一個(gè)全新的讀寫(xiě)入層來(lái)保存數據。如果想做到數據持久化,Docker提供數據卷(Data volume)或者數據容器卷來(lái)解決問(wèn)題,另外還可以通過(guò)commit提交一個(gè)新的鏡像來(lái)保存產(chǎn)生的數據。 |
一、創(chuàng )建一個(gè)數據卷
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 如下為容器添加一個(gè)數據卷,并將容器名改為data。這個(gè)數據卷在容器里的目錄是/opt/data[root@localhost ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/ubuntu latest 0ef2e08ed3fa 2 weeks ago 130 MB[root@localhost ~]# docker run --name data -v /opt/data -t -i docker.io/ubuntu /bin/bashroot@2b9aebcf6ce8:/# cd /opt/data/root@2b9aebcf6ce8:/opt/data# lsroot@2b9aebcf6ce8:/opt/data# echo "123" > 123root@2b9aebcf6ce8:/opt/data# echo "123123" > 123123root@2b9aebcf6ce8:/opt/data# ls123 123123[root@localhost volumes]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES2b9aebcf6ce8 docker.io/ubuntu "/bin/bash" 49 seconds ago Up 48 seconds data在宿主機上,查看對應上面的那個(gè)數據卷的目錄路徑:[root@localhost ~]# docker inspect data|grep /var/lib/docker/volumes "Source": "/var/lib/docker/volumes/89d6562b9c1fe10dd21707cb697a5d481b3c1b000a69b762f540fa826a16972a/_data",[root@localhost ~]# ls /var/lib/docker/volumes/89d6562b9c1fe10dd21707cb697a5d481b3c1b000a69b762f540fa826a16972a/_data123 123123[root@localhost ~]# echo "asdhfjashdfjk" >> /var/lib/docker/volumes/89d6562b9c1fe10dd21707cb697a5d481b3c1b000a69b762f540fa826a16972a/_data/123[root@localhost ~]# root@2b9aebcf6ce8:/opt/data# ls123 123123root@2b9aebcf6ce8:/opt/data# cat 123123asdhfjashdfjk |
二、掛載宿主機文件或目錄到容器數據卷
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | 可以直接掛載宿主機文件或目錄到容器里,可以理解為目錄映射,這樣就可以讓所有的容器共享宿主機數據,從而只需要改變宿主機的數據源就能夠影響到所有的容器數據。注意:-v后面的映射關(guān)系是"宿主機文件/目錄:容器里對應的文件/目錄",其中,宿主機上的文件/目錄是要提前存在的,容器里對應的文件/目錄會(huì )自動(dòng)創(chuàng )建。數據卷權限:掛載的數據默認為可讀寫(xiě)權限。但也可以根據自己的需求,將容器里掛載共享的數據設置為只讀,這樣數據修改就只能在宿主機上操作。如下實(shí)例:1)掛載宿主機文件到容器上[root@localhost ~]# cat /etc/web.list192.168.1.100192.168.1.101192.168.1.103[root@localhost ~]# docker run -t -i --name test -v /etc/web.list:/etc/web.list:ro docker.io/centos /bin/bash[root@e21a3fefa3ae /]# cat /etc/web.list192.168.1.100192.168.1.101192.168.1.103[root@e21a3fefa3ae /]# echo "192.168.1.115" >> /etc/web.listbash: /etc/web.list: Read-only file system[root@e21a3fefa3ae /]# 在宿主機上修改共享數據[root@localhost ~]# echo "192.168.1.115" >> /etc/web.list[root@localhost ~]# [root@e21a3fefa3ae /]# cat /etc/web.list192.168.1.100192.168.1.101192.168.1.103192.168.1.1152)掛載宿主機目錄到容器上[root@localhost ~]# mkdir /var/huanqiupc[root@localhost ~]# echo "test" > /var/huanqiupc/test[root@localhost ~]# echo "test1" > /var/huanqiupc/test1[root@localhost ~]# docker run -t -i --name hqsb -v /var/huanqiupc:/opt/huantime docker.io/centos /bin/bash[root@87cf93ce46a9 /]# cd /opt/huantime/[root@87cf93ce46a9 huantime]# lstest test1[root@87cf93ce46a9 huantime]# cat testtest[root@87cf93ce46a9 huantime]# cat test1test1[root@87cf93ce46a9 huantime]# echo "1231" >>test[root@87cf93ce46a9 huantime]# echo "44444" >>test1宿主機上查看[root@localhost ~]# cat /var/huanqiupc/testtest1231[root@localhost ~]# cat /var/huanqiupc/test1test1444443)掛載多個(gè)目錄[root@localhost ~]# mkdir /opt/data1 /opt/data2[root@localhost ~]# echo "123456" > /opt/data1/test1[root@localhost ~]# echo "abcdef" > /opt/data2/test2[root@localhost ~]# docker run --name data -v /opt/data1:/var/www/data1 -v /opt/data2:/var/www/data2:ro -t -i docker.io/ubuntu /bin/bashroot@cf2d57b9bee1:/# ls /var/www/data1test1root@cf2d57b9bee1:/# ls /var/www/data2test2root@cf2d57b9bee1:/# cat /var/www/data1/test1 123456root@cf2d57b9bee1:/# cat /var/www/data2/test2 abcdefroot@cf2d57b9bee1:/# echo "date1" >> /var/www/data1/test1 root@cf2d57b9bee1:/# echo "date2" >> /var/www/data2/test2 bash: /var/www/data2/test2: Read-only file systemroot@cf2d57b9bee1:/# |
三、創(chuàng )建數據卷容器
啟動(dòng)一個(gè)名為xqsj_Container容器,此容器包含兩個(gè)數據卷/var/volume1和/var/volume2(這兩個(gè)數據卷目錄是在容器里的,容器創(chuàng )建的時(shí)候會(huì )自動(dòng)生成這兩目錄)
1 2 3 4 5 6 7 8 9 10 | 注意一個(gè)細節:下面的創(chuàng )建命令中,沒(méi)有加-t和-i參數,所以這個(gè)容器創(chuàng )建好之后是登陸不了的!-i:表示以“交互模式”運行容器-t:表示容器啟動(dòng)后會(huì )進(jìn)入其命令行[root@linux-node2 ~]# docker run -v /var/volume1 -v /var/volume2 --name xqsj_Container centos /bin/bash[root@linux-node2 ~]#所以要想創(chuàng )建容器后能正常登陸,就需要添加上面兩個(gè)參數[root@localhost ~]# docker run -t -i -v /var/volume1 -v /var/volume2 --name xqsj_Container centos /bin/bash[root@73a34f3c1cd9 /]# |
查看宿主機上與數據卷對應的目錄路徑:
1 2 3 4 | [root@localhost ~]# docker inspect xqsj_Container|grep /var/lib/docker/volumes "Source": "/var/lib/docker/volumes/b8d2e5bcadf2550abd36ff5aa544c721a45464a4406fb50979815de773086627/_data", "Source": "/var/lib/docker/volumes/a34fa3a0a7a2f126b0d30a32b1034f20917ca7bd0dda346014d768b5ebb68f6b/_data",由上面命令結果可以查到,兩個(gè)數據卷/var/volume1和/var/volume2下的數據在/var/lib/docker/volumes/下對于的兩個(gè)目錄的_data下面 |
創(chuàng )建App_Container容器,掛載xqsj_Container容器中的數據卷
[root@linux-node2 ~]# docker run -t -i --rm --volumes-from xqsj_Container --name App_Container centos /bin/bash
[root@b9891bcdfed0 /]# ls /var/volume1 //發(fā)現這兩個(gè)數據卷都存在
[root@b9891bcdfed0 /]# ls /var/volume2
[root@b9891bcdfed0 /]# echo "this is volume1" > /var/volume1/test1
[root@b9891bcdfed0 /]# echo "this is volume2" > /var/volume1/test2
可以再創(chuàng )建一個(gè)容器,掛載App_Container中從xqsj_Container掛載的數據卷。當然也可以直接掛載初始的xqsj_Container容器數據卷
[root@linux-node2 ~]# docker run -t -i --rm --volumes-from App_Container --name LastApp_Container centos /bin/bash
[root@b4c27e360614 /]# ls /var/volume1
test1
[root@b4c27e360614 /]# ls /var/volume2
test2
[root@b4c27e360614 /]# cat /var/volume1/test1
this is volume1
[root@b4c27e360614 /]# cat /var/volume2/test2
this is volume2
即便是刪除了初始的數據卷容器xqsj_Container,或是刪除了其它容器,但只要是有容器在使用該數據卷,那么它里面的數據就不會(huì )丟失?。ǔ鞘菦](méi)有容器在使用它們)
四、備份數據卷
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | $ sudo docker run --rm --volumes-from test -v $(pwd):/backup ubuntu:14.04 tar cvf /backup/test.tar /testtar: Removing leading `/' from member names/test//test/b/test/d/test/c/test/a 以上命令表示:啟動(dòng)一個(gè)新的容器并且從test容器中掛載卷,然后掛載當前目錄到容器中為backup,并備份test卷中所有的數據為test.tar,執行完成之后刪除容器--rm,此時(shí)備份就在當前的目錄下,名為test.tar。注意:后面的/test是數據卷的目錄路徑(即數據卷創(chuàng )建時(shí)在容器里的路徑) $ ls宿主機當前目錄下產(chǎn)生了test卷的備份文件test.tar ---------------------------------------------看看下面的一個(gè)實(shí)例---------------------------------------------先創(chuàng )建一個(gè)容器wang,包含兩個(gè)數據卷/var/volume1和/var/volume2(這兩個(gè)目錄是在容器里的數據卷路徑)[root@localhost ~]# docker run -t -i -v /var/volume1 -v /var/volume2 --name wang docker.io/centos /bin/bash[root@83eb43492ae7 /]# 根據Docker的數據持久化之數據卷容器可知,上面創(chuàng )建的wang數據卷容器掛載了/var/volume1和/var/volume2兩個(gè)目錄然后在數據卷里寫(xiě)些數據,以供測試。[root@83eb43492ae7 /]# cd /var/volume1[root@83eb43492ae7 volume1]# echo "test1" > test1[root@83eb43492ae7 volume1]# echo "test11" > test11[root@83eb43492ae7 volume1]# echo "test111" > test111[root@83eb43492ae7 volume1]# lstest1 test11 test111[root@83eb43492ae7 volume1]# cd ../volume2[root@83eb43492ae7 volume2]# echo "test2" > test2[root@83eb43492ae7 volume2]# echo "test22" > test22[root@83eb43492ae7 volume2]# echo "test222" > test222[root@83eb43492ae7 volume2]# lstest2 test22 test222[root@83eb43492ae7 volume2]# 然后進(jìn)行這兩個(gè)數據卷的備份[root@localhost ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES83eb43492ae7 docker.io/centos "/bin/bash" 2 minutes ago Up 2 minutes wang 現在開(kāi)始進(jìn)行數據卷的備份操作:為了利用數據卷容器備份,使用--volumes-from標記來(lái)創(chuàng )建一個(gè)加載wang容器卷的容器,并從主機掛載當前目錄到容器的/backup目錄。并備份wang卷中的數據,執行完成之后刪除容器--rm,此時(shí)備份就在當前的目錄下了。 1)備份wang容器中的/var/volume1數據卷數據<strong>(注意下面:命令中的-i和-t這兩個(gè)參數加不加都可以;--rm加上,備份后就會(huì )自動(dòng)刪除這個(gè)容器,如果不加這個(gè)--rm參數,那么備份后的容器就會(huì )保留,docker ps -a就會(huì )查看到)</strong>[root@localhost ~]# docker run -i -t --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar cvf /backup/backup1.tar /var/volume1tar: Removing leading `/' from member names/var/volume1//var/volume1/test1/var/volume1/test11/var/volume1/test111 2)備份wang容器中的/var/volume2數據卷數據[root@localhost ~]# docker run -i -t --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar cvf /backup/backup2.tar /var/volume2tar: Removing leading `/' from member names/var/volume2//var/volume2/test2/var/volume2/test22/var/volume2/test222 3)備份wang容器中的/var/volume1和/var/volume2數據卷數據[root@localhost ~]# docker run -i -t --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar cvf /backup/backup.tar /var/volume1 /var/volume2tar: Removing leading `/' from member names/var/volume1//var/volume1/test1/var/volume1/test11/var/volume1/test111/var/volume2//var/volume2/test2/var/volume2/test22/var/volume2/test222[root@localhost ~]# lsanaconda-ks.cfg a.py backup1.tar backup2.tar backup.tar mkimage-yum.sh pipework var wang.tar 這樣,數據卷容器中的數據就備份完成了. 簡(jiǎn)言之就是:先創(chuàng )建一個(gè)容器,并掛載要備份的容器數據卷,再掛載數據卷(pwd):/backup目錄到容器/bakcup,在容器中執行備份/data目錄到/backup,也就是備份到宿主機$(pwd):/backup目錄。 |
五、恢復或遷移數據卷
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 | 可以恢復給同一個(gè)容器或者另外的容器,新建容器并解壓備份文件到新的容器數據卷$ sudo docker run -t -i -d -v /test --name test4 ubuntu:14.04 /bin/bash$ sudo docker run --rm --volumes-from test4 -v $(pwd):/backup ubuntu:14.04 tar xvf /backup/test.tar -C /恢復之前的文件到新建卷中,執行完后自動(dòng)刪除容器 test/ test/b test/d test/c test/a -----------------------------接著(zhù)上面的實(shí)例進(jìn)行數據卷恢復操作--------------------------[root@localhost ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES531c9d8adf4c docker.io/centos "/bin/bash" 2 minutes ago Up 44 seconds wang 1)恢復數據給同一個(gè)容器測了測試效果,先刪除數據卷(注意:數據卷目錄刪除不了,只能刪除其中的數據。)[root@localhost ~]# docker attach wang[root@531c9d8adf4c ~]# ls /var/volume1test1 test11 test111[root@531c9d8adf4c ~]# ls /var/volume2test2 test22 test222[root@531c9d8adf4c ~]# rm -rf /var/volume1 /var/volume2rm: cannot remove '/var/volume1': Device or resource busy rm: cannot remove '/var/volume2': Device or resource busy[root@531c9d8adf4c ~]# ls /var/volume2[root@531c9d8adf4c ~]# ls /var/volume1 現在進(jìn)行數據卷恢復,恢復數據卷中的所有數據:[root@localhost ~]# lsanaconda-ks.cfg a.py backup1.tar backup2.tar backup.tar mkimage-yum.sh pipework var wang.tar 注意-C后面的路徑,這個(gè)路徑表示將數據恢復到容器里的路徑。命令中用"/",即表示將backup.tar中的數據解壓到容器的/路徑下。后面跟什么路徑,就解壓到這個(gè)路徑下。因此這里用"/"[root@localhost ~]# docker run --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C /var/volume1/var/volume1/test1var/volume1/test11var/volume1/test111var/volume2/var/volume2/test2var/volume2/test22var/volume2/test222 再次到容器里查看,發(fā)現數據卷里的數據已經(jīng)恢復了[root@531c9d8adf4c ~]# ls /var/volume1test1 test11 test111[root@531c9d8adf4c ~]# ls /var/volume2test2 test22 test222 2)恢復數據給另外的容器,新建容器并解壓備份文件到新的容器數據卷即新建一個(gè)容器huihui,將上面備份的數據卷數據恢復到這個(gè)新容器里。[root@localhost ~]# docker run -t -i -v /var/volume1 -v /var/volume2 --name huihui docker.io/centos /bin/bash[root@f6ff380e0b7f var]# ls /var/volume1[root@f6ff380e0b7f var]# ls /var/volume2 [root@localhost ~]# lsanaconda-ks.cfg a.py backup1.tar backup2.tar backup.tar mkimage-yum.sh pipework var wang.tar [root@localhost ~]# docker run --rm --volumes-from huihui -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C /var/volume1/var/volume1/test1var/volume1/test11var/volume1/test111var/volume2/var/volume2/test2var/volume2/test22var/volume2/test222 [root@localhost ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES813afe297b60 docker.io/centos "/bin/bash" 17 seconds ago Up 16 seconds huihui 這里注意一下:新容器創(chuàng )建時(shí)掛載的數據卷路徑最好是和之前備份的數據卷路徑一致如下:1)新建容器掛載的數據卷只是備份數據卷的一部分,那么恢復的時(shí)候也只是恢復一部分數據。如下,新容器創(chuàng )建時(shí)只掛載/var/volume1[root@localhost ~]# docker run -t -i -v /var/volume1 --name huihui docker.io/centos /bin/bash[root@12dd8d742259 /]# ls /var/volume1/[root@12dd8d742259 /]# ls /var/volume2ls: cannot access /var/volume2: No such file or directory [root@localhost ~]# docker run --rm --volumes-from huihui -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C /var/volume1/var/volume1/test1var/volume1/test11var/volume1/test111var/volume2/var/volume2/test2var/volume2/test22var/volume2/test222[root@localhost ~]# 查看容器,發(fā)現只恢復了/var/volume1的數據,/var/volume2數據沒(méi)有恢復,因為沒(méi)有容器創(chuàng )建時(shí)沒(méi)有掛載這個(gè)。[root@localhost ~]# docker run -t -i -v /var/volume1 --name huihui docker.io/centos /bin/bash[root@12dd8d742259 /]# ls /var/volume1/[root@12dd8d742259 /]# ls /var/volume2ls: cannot access /var/volume2: No such file or directory 2)新容器創(chuàng )建時(shí)只掛載/var/volume2[root@localhost ~]# docker run -t -i -v /var/volume2 --name huihui docker.io/centos /bin/bash[root@da3a3d2c95e0 /]# ls /var/volume2/[root@da3a3d2c95e0 /]# ls /var/volume1ls: cannot access /var/volume1: No such file or directory [root@localhost ~]# docker run --rm --volumes-from huihui -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C /var/volume1/var/volume1/test1var/volume1/test11var/volume1/test111var/volume2/var/volume2/test2var/volume2/test22var/volume2/test222[root@localhost ~]# [root@da3a3d2c95e0 /]# ls /var/volume1ls: cannot access /var/volume1: No such file or directory[root@da3a3d2c95e0 /]# ls /var/volume2/test2 test22 test222 3)如果新容器創(chuàng )建時(shí)掛載的數據卷目錄跟之前備份的路徑不一致[root@localhost ~]# docker run -t -i -v /var/huihui --name huihui docker.io/centos /bin/bash[root@9bad9b3bde71 /]# ls /var/huihui/[root@9bad9b3bde71 /]# 如果解壓時(shí)-C后面跟的路徑不是容器掛載的容器,那么數據恢復不了,如下[root@localhost ~]# docker run --rm --volumes-from huihui -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C /var/volume1/var/volume1/test1var/volume1/test11var/volume1/test111var/volume2/var/volume2/test2var/volume2/test22var/volume2/test222 發(fā)現容器內數據沒(méi)有恢復[root@9bad9b3bde71 /]# ls /var/huihui/[root@9bad9b3bde71 /]# 但是如果解壓時(shí)-C后面跟的是容器掛載的路徑,數據就能正?;謴?/code>[root@localhost ~]# docker run --rm --volumes-from huihui -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C /var/huihuivar/volume1/var/volume1/test1var/volume1/test11var/volume1/test111var/volume2/var/volume2/test2var/volume2/test22var/volume2/test222[root@localhost ~]# 發(fā)現容器內數據已經(jīng)恢復了[root@9bad9b3bde71 /]# ls /var/huihui/var[root@9bad9b3bde71 /]# ls /var/huihui/var/volume1 volume2[root@9bad9b3bde71 /]# ls /var/huihui/var/volume1test1 test11 test111[root@9bad9b3bde71 /]# ls /var/huihui/var/volume2test2 test22 test222 |
六、刪除數據卷
1 2 3 4 5 6 7 8 | Volume 只有在下列情況下才能被刪除:1)docker rm -v刪除容器時(shí)添加了-v選項2)docker run --rm運行容器時(shí)添加了--rm選項否則,會(huì )在/var/lib/docker/volumes目錄中遺留很多不明目錄。 可以使用下面方式找出,然后刪除_data目錄下的數據文件[root@localhost volumes]# docker inspect huihui|grep /var/lib/docker/volumes "Source": "/var/lib/docker/volumes/97aa95420e66de20abbe618fad8d0c1da31c54ce97e32a3892fa921c7942d42b/_data", |
聯(lián)系客服