Docker容器數據卷-Volume小結

 

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 目錄。
相關文章
相關標籤/搜索