數據卷是一個可供容器使用的特殊目錄,能夠在容器之間共享和重用,對數據卷的修改會立刻生效,卷會一直存在直到沒有容器使用,數據卷的使用相似於mount
docker
數據卷容器就是一個普通的容器,可專門提供數據卷供其餘容器掛載使用,能夠在容器之間共享一些持續更新的數據centos
1:建立數據卷tomcat
利用鏡像centos,建立一個名爲tomcat的容器,並在後臺以守護進程方式工做,且將本地的/b2b/目錄掛在在新創建的tomcat容器的/test目錄下bash
root@My-Ubuntu:/home/zxl# docker run -d --name=tomcat -v /b2b:/test -it centos ide
3865efc4c698fe74c4975e18ca80f113130e8c76e0d4f175dc53e22f68a9ec15spa
進入tomcat容器,並啓動/bin/bash
orm
root@My-Ubuntu:/home/zxl# docker exec -it tomcat /bin/bash進程
[root@3865efc4c698 /]# ls /test/rem
在tomcat容器的/test目錄下建立一個叫haha的文件it
[root@3865efc4c698 /]# touch /test/haha
[root@3865efc4c698 /]# ls /test/
haha
[root@3865efc4c698 /]# exit
exit
退出tomcat容器後,進入本地的/b2b/目錄下
root@My-Ubuntu:/home/zxl# cd /b2b/
能夠看到高才在tomcat容器中建立的文件在
root@My-Ubuntu:/b2b# ll
total 8
drwxr-xr-x 2 root root 4096 Aug 3 11:18 ./
drwxr-xr-x 24 root root 4096 Aug 3 11:17 ../
-rw-r--r-- 1 root root 0 Aug 3 11:18 haha
2:建立數據卷容器
首先用centos鏡像建立一個叫dbdata的數據卷容器,並將本地的/dbdata目錄掛載到dbdata數據卷容器的/dbdata目錄下,也能夠不掛載
root@My-Ubuntu:/b2b# docker run -it -v /dbdata:/dbdata --name dbdata centos
[root@6f23465f05f3 /]# exit
exit
再用centos鏡像新建立db1和db2兩個容器,並用--volumes-from 參數掛載dbdata數據卷容器上的數據卷
root@My-Ubuntu:/b2b# docker run -it --volumes-from dbdata --name db1 centos
[root@be670cd7fd5b /]# exit
exit
root@My-Ubuntu:/b2b# docker run -it --volumes-from dbdata --name db2 centos
[root@8fe9f2b7fe15 /]# exit
exit
啓動db1容器
root@My-Ubuntu:/b2b# docker start db1
db1
進入到db1容器中的/dbdata目錄下,建立一個叫作hehehe的文件
root@My-Ubuntu:/b2b# docker exec -it db1 /bin/bash
[root@be670cd7fd5b /]#
[root@be670cd7fd5b /]# cd /dbdata/
[root@be670cd7fd5b dbdata]# ll
total 0
[root@be670cd7fd5b dbdata]# touch hehehe
[root@be670cd7fd5b dbdata]# ll
total 0
-rw-r--r-- 1 root root 0 Aug 3 04:02 hehehe
[root@be670cd7fd5b dbdata]# exit
exit
啓動db1容器
root@My-Ubuntu:/b2b# docker start db2
db2
進入到db1容器中的/dbdata目錄下,能夠看到db1建立的hehehe文件,並建立一個叫作hahaha的文件
root@My-Ubuntu:/b2b# docker exec -it db2 /bin/bash
[root@8fe9f2b7fe15 /]# cd /dbdata/
[root@8fe9f2b7fe15 dbdata]# ll
total 0
-rw-r--r-- 1 root root 0 Aug 3 04:02 hehehe
[root@8fe9f2b7fe15 dbdata]# touch hahaha
[root@8fe9f2b7fe15 dbdata]# ll
total 0
-rw-r--r-- 1 root root 0 Aug 3 04:05 hahaha
-rw-r--r-- 1 root root 0 Aug 3 04:02 hehehe
[root@8fe9f2b7fe15 dbdata]# exit
exit
啓動並進入數據卷容器dbdata
root@My-Ubuntu:/b2b# docker start dbdata
dbdata
root@My-Ubuntu:/b2b# docker exec -it dbdata /bin/bash
[root@6f23465f05f3 /]# cd /dbdata/
在/dbdata目錄下能夠看到db1和db2建立的文件,且建立一個叫aaaa的文件
[root@6f23465f05f3 dbdata]# ll
total 0
-rw-r--r-- 1 root root 0 Aug 3 04:05 hahaha
-rw-r--r-- 1 root root 0 Aug 3 04:02 hehehe
[root@6f23465f05f3 dbdata]# touch aaaaa
[root@6f23465f05f3 dbdata]# ll
total 0
-rw-r--r-- 1 root root 0 Aug 3 07:24 aaaaa
-rw-r--r-- 1 root root 0 Aug 3 04:05 hahaha
-rw-r--r-- 1 root root 0 Aug 3 04:02 hehehe
將hehehe文件刪除
[root@6f23465f05f3 /]# rm /dbdata/hehehe
rm: remove regular empty file '/dbdata/hehehe'? y
[root@6f23465f05f3 /]# cd /dbdata/
[root@6f23465f05f3 dbdata]# ll
total 0
-rw-r--r-- 1 root root 0 Aug 3 07:24 aaaaa
-rw-r--r-- 1 root root 0 Aug 3 04:05 hahaha
[root@6f23465f05f3 dbdata]# exit
exit
進入db1容器,能夠看到aaaa且hehehe被刪除了
root@My-Ubuntu:/b2b# docker exec -it db1 /bin/bash
[root@be670cd7fd5b /]# cd /dbdata/
[root@be670cd7fd5b dbdata]# ll
total 0
-rw-r--r-- 1 root root 0 Aug 3 07:24 aaaaa
-rw-r--r-- 1 root root 0 Aug 3 04:05 hahaha
在本地的/dbdata目錄下葉能夠看到文件,由於在建立數據卷容器dbdata時,將本地的/dbdata目錄掛在到了數據卷容器的/dbdata目錄下
root@My-Ubuntu:/b2b# cd /dbdata/
root@My-Ubuntu:/dbdata# ll
total 8
drwxr-xr-x 2 root root 4096 Aug 3 15:25 ./
drwxr-xr-x 25 root root 4096 Aug 3 11:41 ../
-rw-r--r-- 1 root root 0 Aug 3 15:24 aaaaa
-rw-r--r-- 1 root root 0 Aug 3 12:05 hahaha
能夠屢次使用--volumes-from 參數從多個容器掛在多個數據卷,也能夠從其餘已經掛載了容器卷的容器來掛載數據卷。
使用數據卷容器能夠讓用戶在容器之間自由的升級和移動數據
備份
首先利用centos鏡像建立一個容器worker,使用--volumes-from dbdata參數來讓worker容器掛載的數據卷容器dbdata的數據卷,使用-v $(pwd):/backup參數來掛載本地的當前目錄到worker容器的/backup目錄,worker容器啓動後,使用tar -cvf /backup/back.tar /dbdata來將/dbdata下的文件備份爲容器內的/backup/back.tar,即宿主機當前目錄下的back.tar(由於宿主機的當前目錄掛載在容器內的/backup目錄,宿主機=本地)
root@My-Ubuntu:~# docker run --volumes-from dbdata -v $(pwd):/backup --name worker centos tar -cvf /backup/back.tar /dbdata
tar: Removing leading `/' from member names
/dbdata/
/dbdata/hahaha
/dbdata/aaaaa
root@My-Ubuntu:~# pwd
/root
root@My-Ubuntu:~# ll
total 40
drwx------ 3 root root 4096 Aug 3 16:57 ./
drwxr-xr-x 25 root root 4096 Aug 3 11:41 ../
-rw-r--r-- 1 root root 10240 Aug 3 16:44 back.tar
drwxr-xr-x 2 root root 4096 Aug 3 15:25 dbdata/
恢復
首先利用centos鏡像建立一個數據卷容器dadata1
root@My-Ubuntu:~# docker run -v /dbdata1 --name dadata1 centos /bin/bash
而後利用centos鏡像新建立另外一個容器,掛載dadata1的數據卷,並使用untar解壓備份文件到掛載的數據卷之中,這樣就實現了利用備份壓縮文件.tar,從新解壓恢復到一個新容器中
root@My-Ubuntu:~# docker run --volumes-from dadata1 -v $(pwd):/backup centos tar xvf /backup/back.tar
dbdata/
dbdata/hahaha
dbdata/aaaaa