Docker中的數據能夠存儲在相似於虛擬機磁盤的介質中,在Docker中稱爲數據卷(Data Volume)。數據卷能夠用來存儲Docker應用的數據,也能夠用來在Docker容器間進行數據共享。數據卷呈現給Docker容器的形式就是一個目錄,支持多個容器間共享,修改也不會影響鏡像。使用Docker的數據卷,相似在系統中使用 mount 掛載一個文件系統。操做Docker數據卷,須要理解如下幾點:
============================================================================
1)一個數據卷是一個特別指定的目錄,該目錄利用容器的UFS文件系統能夠爲容器提供一些穩定的特性或者數據共享。數據卷能夠在多個容器之間共享。
============================================================================
2)建立數據卷,只要在docker run命令後面跟上-v參數便可建立一個數據卷,固然也能夠跟多個-v參數來建立多個數據卷,當建立好帶有數據卷的容器後,就能夠在其餘容器中經過--volumes-froms參數來掛載該數據捲了,而無論該容器是否運行。也能夠在Dockerfile中經過VOLUME指令來增長一個或者多個數據卷。
============================================================================
3)若是有一些數據想在多個容器間共享,或者想在一些臨時性的容器中使用該數據,那麼最好的方案就是你建立一個數據卷容器,而後從該臨時性的容器中掛載該數據卷容器的數據。這樣,即便刪除了剛開始的第一個數據卷容器或者中間層的數據卷容器,只要有其餘容器使用數據卷,數據卷都不會被刪除的。
============================================================================
4)不能使用docker export、save、cp等命令來備份數據卷的內容,由於數據卷是存在於鏡像以外的。備份方法: 建立一個新容器,掛載數據卷容器,同時掛載一個本地目錄,而後把遠程數據卷容器的數據卷經過備份命令備份到映射的本地目錄裏面。以下:
# docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
============================================================================
5)能夠把一個本地主機的目錄當作數據卷掛載在容器上,一樣是在docker run後面跟-v參數,不過-v後面跟的再也不是單獨的目錄了,它是[host-dir]:[container-dir]:[rw|ro]這樣格式的,其中host-dir是一個絕對路徑的地址,若是host-dir不存在,則docker會建立一個新的數據卷,若是host-dir存在,可是指向的是一個不存在的目錄,則docker也會建立該目錄,而後使用該目錄作數據源。node
Docker Volume數據卷能夠實現:
-> 繞過「拷貝寫」系統,以達到本地磁盤IO的性能,(好比運行一個容器,在容器中對數據卷修改內容,會直接改變宿主機上的數據卷中的內容,因此是本地磁盤IO的性能,而不是先在容器中寫一份,最後還要將容器中的修改的內容拷貝出來進行同步。)
-> 繞過「拷貝寫」系統,有些文件不須要在docker commit打包進鏡像文件。
-> 數據卷能夠在容器間共享和重用數據
-> 數據卷能夠在宿主和容器間共享數據
-> 數據卷數據改變是直接修改的
-> 數據卷是持續性的,直到沒有容器使用它們。即使是初始的數據卷容器或中間層的數據卷容器刪除了,只要還有其餘的容器使用數據卷,那麼裏面的數據都不會丟失。linux
Docker數據持久化:
容器在運行期間產生的數據是不會寫在鏡像裏面的,從新用此鏡像啓動新的容器就會初始化鏡像,會加一個全新的讀寫入層來保存數據。若是想作到數據持久化,Docker提供數據卷(Data volume)或者數據容器捲來解決問題,另外還能夠經過commit提交一個新的鏡像來保存產生的數據。web
1、建立一個數據卷docker
以下爲容器添加一個數據卷,並將容器名改成data。這個數據卷在容器裏的目錄是/opt/data [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu latest 0ef2e08ed3fa 2 weeks ago 130 MB [root@localhost ~]# docker run --name data -v /opt/data -t -i docker.io/ubuntu /bin/bash root@2b9aebcf6ce8:/# cd /opt/data/ root@2b9aebcf6ce8:/opt/data# ls root@2b9aebcf6ce8:/opt/data# echo "123" > 123 root@2b9aebcf6ce8:/opt/data# echo "123123" > 123123 root@2b9aebcf6ce8:/opt/data# ls 123 123123 [root@localhost volumes]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2b9aebcf6ce8 docker.io/ubuntu "/bin/bash" 49 seconds ago Up 48 seconds data 在宿主機上,查看對應上面的那個數據卷的目錄路徑: [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/_data 123 123123 [root@localhost ~]# echo "asdhfjashdfjk" >> /var/lib/docker/volumes/89d6562b9c1fe10dd21707cb697a5d481b3c1b000a69b762f540fa826a16972a/_data/123 [root@localhost ~]# root@2b9aebcf6ce8:/opt/data# ls 123 123123 root@2b9aebcf6ce8:/opt/data# cat 123 123 asdhfjashdfjk
2、掛載宿主機文件或目錄到容器數據卷ubuntu
能夠直接掛載宿主機文件或目錄到容器裏,能夠理解爲目錄映射,這樣就可讓全部的容器共享宿主機數據,從而只須要改變宿主機的數據源就可以影響到全部的容器數據。 注意: -v後面的映射關係是"宿主機文件/目錄:容器裏對應的文件/目錄",其中,宿主機上的文件/目錄是要提早存在的,容器裏對應的文件/目錄會自動建立。 數據卷權限: 掛載的數據默認爲可讀寫權限。 但也能夠根據本身的需求,將容器裏掛載共享的數據設置爲只讀,這樣數據修改就只能在宿主機上操做。以下實例: 1)掛載宿主機文件到容器上 [root@localhost ~]# cat /etc/web.list 192.168.1.100 192.168.1.101 192.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.list 192.168.1.100 192.168.1.101 192.168.1.103 [root@e21a3fefa3ae /]# echo "192.168.1.115" >> /etc/web.list bash: /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.list 192.168.1.100 192.168.1.101 192.168.1.103 192.168.1.115 2)掛載宿主機目錄到容器上 [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]# ls test test1 [root@87cf93ce46a9 huantime]# cat test test [root@87cf93ce46a9 huantime]# cat test1 test1 [root@87cf93ce46a9 huantime]# echo "1231" >>test [root@87cf93ce46a9 huantime]# echo "44444" >>test1 宿主機上查看 [root@localhost ~]# cat /var/huanqiupc/test test 1231 [root@localhost ~]# cat /var/huanqiupc/test1 test1 44444 3)掛載多個目錄 [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/bash root@cf2d57b9bee1:/# ls /var/www/data1 test1 root@cf2d57b9bee1:/# ls /var/www/data2 test2 root@cf2d57b9bee1:/# cat /var/www/data1/test1 123456 root@cf2d57b9bee1:/# cat /var/www/data2/test2 abcdef root@cf2d57b9bee1:/# echo "date1" >> /var/www/data1/test1 root@cf2d57b9bee1:/# echo "date2" >> /var/www/data2/test2 bash: /var/www/data2/test2: Read-only file system root@cf2d57b9bee1:/#
3、建立數據卷容器
啓動一個名爲xqsj_Container容器,此容器包含兩個數據卷/var/volume1和/var/volume2(這兩個數據卷目錄是在容器裏的,容器建立的時候會自動生成這兩目錄)centos
注意一個細節: 下面的建立命令中,沒有加-t和-i參數,因此這個容器建立好以後是登錄不了的! -i:表示以「交互模式」運行容器 -t:表示容器啓動後會進入其命令行 [root@linux-node2 ~]# docker run -v /var/volume1 -v /var/volume2 --name xqsj_Container centos /bin/bash [root@linux-node2 ~]# 因此要想建立容器後能正常登錄,就須要添加上面兩個參數 [root@localhost ~]# docker run -t -i -v /var/volume1 -v /var/volume2 --name xqsj_Container centos /bin/bash [root@73a34f3c1cd9 /]#
查看宿主機上與數據卷對應的目錄路徑:bash
[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", 由上面命令結果能夠查到,兩個數據卷/var/volume1和/var/volume2下的數據在/var/lib/docker/volumes/下對於的兩個目錄的_data下面
建立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 //發現這兩個數據卷都存在
[root@b9891bcdfed0 /]# ls /var/volume2
[root@b9891bcdfed0 /]# echo "this is volume1" > /var/volume1/test1
[root@b9891bcdfed0 /]# echo "this is volume2" > /var/volume1/test2性能
能夠再建立一個容器,掛載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,或是刪除了其它容器,但只要是有容器在使用該數據卷,那麼它裏面的數據就不會丟失!(除非是沒有容器在使用它們)ui
4、備份數據卷
$ sudo docker run --rm --volumes-from test -v $(pwd):/backup ubuntu:14.04 tar cvf /backup/test.tar /test tar: Removing leading `/' from member names /test/ /test/b /test/d /test/c /test/a 以上命令表示: 啓動一個新的容器而且從test容器中掛載卷,而後掛載當前目錄到容器中爲backup,並備份test卷中全部的數據爲test.tar,執行完成以後刪除容器--rm,此時備份就在當前的目錄下,名爲test.tar。 注意:後面的/test是數據卷的目錄路徑(即數據卷建立時在容器裏的路徑) $ ls 宿主機當前目錄下產生了test卷的備份文件test.tar ---------------------------------------------看看下面的一個實例--------------------------------------------- 先建立一個容器wang,包含兩個數據卷/var/volume1和/var/volume2(這兩個目錄是在容器裏的數據卷路徑) [root@localhost ~]# docker run -t -i -v /var/volume1 -v /var/volume2 --name wang docker.io/centos /bin/bash [root@83eb43492ae7 /]# 根據Docker的數據持久化之數據卷容器可知,上面建立的wang數據卷容器掛載了/var/volume1和/var/volume2兩個目錄 而後在數據卷裏寫些數據,以供測試。 [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]# ls test1 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]# ls test2 test22 test222 [root@83eb43492ae7 volume2]# 而後進行這兩個數據卷的備份 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 83eb43492ae7 docker.io/centos "/bin/bash" 2 minutes ago Up 2 minutes wang 如今開始進行數據卷的備份操做: 爲了利用數據卷容器備份,使用--volumes-from標記來建立一個加載wang容器卷的容器,並從主機掛載當前目錄到容器的/backup目錄。並備份wang卷中的數據,執行完成以後刪除容器--rm,此時備份就在當前的目錄下了。 1)備份wang容器中的/var/volume1數據卷數據(注意下面:命令中的-i和-t這兩個參數加不加均可以;--rm加上,備份後就會自動刪除這個容器,若是不加這個--rm參數,那麼備份後的容器就會保留,docker ps -a就會查看到) [root@localhost ~]# docker run -i -t --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar cvf /backup/backup1.tar /var/volume1 tar: 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/volume2 tar: 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/volume2 tar: 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 ~]# ls anaconda-ks.cfg a.py backup1.tar backup2.tar backup.tar mkimage-yum.sh pipework var wang.tar 這樣,數據卷容器中的數據就備份完成了. 簡言之就是: 先建立一個容器,並掛載要備份的容器數據卷,再掛載數據卷(pwd):/backup目錄到容器/bakcup,在容器中執行備份/data目錄到/backup,也就是備份到宿主機$(pwd):/backup目錄。
5、恢復或遷移數據卷
能夠恢復給同一個容器或者另外的容器,新建容器並解壓備份文件到新的容器數據卷 $ 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 / 恢復以前的文件到新建卷中,執行完後自動刪除容器 test/ test/b test/d test/c test/a -----------------------------接着上面的實例進行數據卷恢復操做-------------------------- [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 531c9d8adf4c docker.io/centos "/bin/bash" 2 minutes ago Up 44 seconds wang 1)恢復數據給同一個容器 測了測試效果,先刪除數據卷(注意:數據卷目錄刪除不了,只能刪除其中的數據。) [root@localhost ~]# docker attach wang [root@531c9d8adf4c ~]# ls /var/volume1 test1 test11 test111 [root@531c9d8adf4c ~]# ls /var/volume2 test2 test22 test222 [root@531c9d8adf4c ~]# rm -rf /var/volume1 /var/volume2 rm: 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 如今進行數據卷恢復,恢復數據卷中的全部數據: [root@localhost ~]# ls anaconda-ks.cfg a.py backup1.tar backup2.tar backup.tar mkimage-yum.sh pipework var wang.tar 注意-C後面的路徑,這個路徑表示將數據恢復到容器裏的路徑。 命令中用"/",即表示將backup.tar中的數據解壓到容器的/路徑下。後面跟什麼路徑,就解壓到這個路徑下。所以這裏用"/" [root@localhost ~]# docker run --rm --volumes-from wang -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C / var/volume1/ var/volume1/test1 var/volume1/test11 var/volume1/test111 var/volume2/ var/volume2/test2 var/volume2/test22 var/volume2/test222 再次到容器裏查看,發現數據卷裏的數據已經恢復了 [root@531c9d8adf4c ~]# ls /var/volume1 test1 test11 test111 [root@531c9d8adf4c ~]# ls /var/volume2 test2 test22 test222 2)恢復數據給另外的容器,新建容器並解壓備份文件到新的容器數據卷 即新建一個容器huihui,將上面備份的數據卷數據恢復到這個新容器裏。 [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 ~]# ls anaconda-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/test1 var/volume1/test11 var/volume1/test111 var/volume2/ var/volume2/test2 var/volume2/test22 var/volume2/test222 [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 813afe297b60 docker.io/centos "/bin/bash" 17 seconds ago Up 16 seconds huihui 這裏注意一下: 新容器建立時掛載的數據卷路徑最好是和以前備份的數據卷路徑一致 以下: 1)新建容器掛載的數據卷只是備份數據卷的一部分,那麼恢復的時候也只是恢復一部分數據。以下,新容器建立時只掛載/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/volume2 ls: 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/test1 var/volume1/test11 var/volume1/test111 var/volume2/ var/volume2/test2 var/volume2/test22 var/volume2/test222 [root@localhost ~]# 查看容器,發現只恢復了/var/volume1的數據,/var/volume2數據沒有恢復,由於沒有容器建立時沒有掛載這個。 [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/volume2 ls: cannot access /var/volume2: No such file or directory 2)新容器建立時只掛載/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/volume1 ls: 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/test1 var/volume1/test11 var/volume1/test111 var/volume2/ var/volume2/test2 var/volume2/test22 var/volume2/test222 [root@localhost ~]# [root@da3a3d2c95e0 /]# ls /var/volume1 ls: cannot access /var/volume1: No such file or directory [root@da3a3d2c95e0 /]# ls /var/volume2/ test2 test22 test222 3)若是新容器建立時掛載的數據卷目錄跟以前備份的路徑不一致 [root@localhost ~]# docker run -t -i -v /var/huihui --name huihui docker.io/centos /bin/bash [root@9bad9b3bde71 /]# ls /var/huihui/ [root@9bad9b3bde71 /]# 若是解壓時-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/test1 var/volume1/test11 var/volume1/test111 var/volume2/ var/volume2/test2 var/volume2/test22 var/volume2/test222 發現容器內數據沒有恢復 [root@9bad9b3bde71 /]# ls /var/huihui/ [root@9bad9b3bde71 /]# 可是若是解壓時-C後面跟的是容器掛載的路徑,數據就能正常恢復 [root@localhost ~]# docker run --rm --volumes-from huihui -v $(pwd):/backup docker.io/centos tar xvf /backup/backup.tar -C /var/huihui var/volume1/ var/volume1/test1 var/volume1/test11 var/volume1/test111 var/volume2/ var/volume2/test2 var/volume2/test22 var/volume2/test222 [root@localhost ~]# 發現容器內數據已經恢復了 [root@9bad9b3bde71 /]# ls /var/huihui/ var [root@9bad9b3bde71 /]# ls /var/huihui/var/ volume1 volume2 [root@9bad9b3bde71 /]# ls /var/huihui/var/volume1 test1 test11 test111 [root@9bad9b3bde71 /]# ls /var/huihui/var/volume2 test2 test22 test222
6、刪除數據卷
Volume 只有在下列狀況下才能被刪除: 1)docker rm -v刪除容器時添加了-v選項 2)docker run --rm運行容器時添加了--rm選項 不然,會在/var/lib/docker/volumes目錄中遺留不少不明目錄。 可使用下面方式找出,而後刪除_data目錄下的數據文件 [root@localhost volumes]# docker inspect huihui|grep /var/lib/docker/volumes "Source": "/var/lib/docker/volumes/97aa95420e66de20abbe618fad8d0c1da31c54ce97e32a3892fa921c7942d42b/_data", 可使用 docker rm -v 命令在刪除容器時刪除該容器的卷。示例以下: [root@localhost volumes]# docker run -d -P --name huihui -v /www docker.io/centos 69199905a74cb360935e32f4e99f7f11319f6aa36033a920aa0bae25874f5c69 [root@localhost volumes]# docker volume ls DRIVER VOLUME NAME local 5341c03f3b94f13f4c86d88ccb0f3b63487adf30dea7ae6b2d06e947235e7330 local 97aa95420e66de20abbe618fad8d0c1da31c54ce97e32a3892fa921c7942d42b local data_volume [root@localhost volumes]# docker rm -vf huihui huihui [root@localhost volumes]# docker volume ls DRIVER VOLUME NAME local 5341c03f3b94f13f4c86d88ccb0f3b63487adf30dea7ae6b2d06e947235e7330 local data_volume
===================== Docker新版本出現docker volume 命令:建立數據卷 ======================
Docker 新版本中引入了 docker volume 命令來管理 Docker volume。 使用默認的 'local' driver 建立一個volume數據卷 [root@localhost ~]# docker volume create --name kevin kevin [root@localhost ~]# docker volume ls DRIVER VOLUME NAME local kevin [root@localhost ~]# ll /var/lib/docker/volumes total 24 drwxr-xr-x 3 root root 19 Oct 28 00:32 kevin -rw------- 1 root root 32768 Oct 28 00:32 metadata.db 使用這個名爲kevin的數據卷 [root@localhost ~]# docker run -d -P --name test1 -v kevin:/volume docker.io/centos 375ef74722404f5c52fde9f2ea7ea322c57e07fbac0b0e69825f077328fdb363 [root@localhost ~]# docker inspect test1 ......... "Mounts": [ { "Type": "volume", "Name": "kevin", "Source": "/var/lib/docker/volumes/kevin/_data", "Destination": "/volume", "Driver": "local", "Mode": "z", "RW": true, "Propagation": "" } 即將kevin數據卷對應在本機上的目錄/var/lib/docker/volumes/kevin/_data掛載給容器內的 /volume 目錄。