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