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
