docker之資料卷管理

wadeson發表於2017-11-03

docker之資料卷的備份和還原

1、現在利用映象建立一個nginx的服務容器,並掛載一個資料卷

[root@docker ~]# docker run -v /data -d -p80:80 --name web1 centos_nginx:v4 
55a45a822c29a1e673d7ca2fb65a4d08fe6c896f5b4fa08fac4d45950e9e7f67

2、進入到容器內,向空的資料卷目錄/data新增一些資料

[root@docker ~]# docker exec -it web1 /bin/bash
[root@55a45a822c29 nginx-1.12.2]# cd /data/
[root@55a45a822c29 data]# ll
total 0
[root@55a45a822c29 data]# mkdir wadeson
[root@55a45a822c29 data]# vim wadeson/web1.text
bash: vim: command not found
[root@55a45a822c29 data]# vi wadeson/web1.text 
[root@55a45a822c29 data]# cat wadeson/web1.text 
this is in web1

3、建立另外一個容器以上面web1容器作為共享資料卷,並將共享的資料捲進行tar壓縮備份,並通過對映到本機host

[root@docker ~]# docker run -d --volumes-from web1 -v /root/backup:/backup centos tar cvf /backup/data.tar /data
081dd7df6371b86e33106664390a8a2780a1f8fc46d69b88adec2970f6d394cf

上面命令詳解:

--volumes-from web1:表示建立的容器基於web1容器內的資料卷(即兩個容器共享資料卷),web1的資料卷為/data

tar vcf /backup/data.tar  /data:建立的容器將/data進行tar壓縮

-v /root/backup:/backup :將容器內的目錄/backup與本機host的/root/backup進行對映

總的命令解釋:建立一個新容器資料卷基於共享web1容器的資料卷,將資料捲進行tar壓縮到容器內某個目錄,並對映到本機host的目錄

[root@docker ~]# ll backup/data.tar 
-rw-r--r--. 1 root root 10240 Nov  2 22:24 backup/data.tar
[root@docker ~]# cd backup/
[root@docker backup]# ll
total 12
-rw-r--r--. 1 root root 10240 Nov  2 22:24 data.tar
[root@docker backup]# tar xf data.tar 
[root@docker backup]# cd data
[root@docker data]# ll
total 0
drwxr-xr-x. 2 root root 23 Nov  2 22:13 wadeson
[root@docker data]# cat wadeson/web1.text 
this is in web1

而此次建立的容器的狀態為exited也不會影響資料卷的備份:

於是基於資料卷的備份就ok了

 

現在將備份好的資料進行恢復還原:

1、建立一個空資料卷的容器web2:(建立的資料卷目錄名稱必須和備份的資料卷名稱一致)

[root@docker ~]# docker run -it -v /data --name web2 centos /bin/bash
[root@090eb911d368 /]# ll /data0/
total 0

2、建立一個容器與web2共享資料卷,將備份的資料解壓到資料卷/data中:

[root@docker ~]# docker run --volumes-from web2 -v /root/backup:/backup centos tar xvf /backup/data.tar
data/
data/wadeson/
data/wadeson/web1.text

啟動的新容器與web2容器共享資料卷目錄/data,而本機host將/root/backup下面的資料壓縮檔案對映到了新容器的/backup目錄下,並執行了命令將資料壓縮檔案解壓到了資料卷/data中

如果沒有--volumes-from web2那麼將不會有資料卷目錄/data

3、建立一個新容器共享資料卷,檢視資料內容:

[root@docker ~]# docker run -it --volumes-from web2 --name web3 centos sh -c "ls -l /data/wadeson" 
total 4
-rw-r--r--. 1 root root 16 Nov  3 02:13 web1.text

 

相關文章