Docker之數據卷和數據卷容器

數據卷是一個可供容器使用的特殊目錄,能夠在容器之間共享和重用,對數據卷的修改會立刻生效,卷會一直存在直到沒有容器使用,數據卷的使用相似於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

相關文章
相關標籤/搜索