1、启动一个命名为vol_simple的容器并创建数据卷(volume)
[root@docker1 ~]# docker run -itd --name vol_simple -v /data ubuntu /bin/bash
90f3912df24c194cc59fe4a635a8c44fe7086098b2934507596ea9ed76284f00
2、进入挂载目录写入若干数据,此时在容器内的/data目录下会共享这些数据
[root@docker1 ~]# docker inspect 90 | grep Source
"Source": "/var/lib/docker/volumes/6a36ff90c3e925549c6ba65694a4c35df302d77f66b4b164f056e39cb185a867/_data",
[root@docker1 ~]# cd /var/lib/docker/volumes/6a36ff90c3e925549c6ba65694a4c35df302d77f66b4b164f056e39cb185a867/_data
[root@docker1 _data]# ls
[root@docker1 _data]# touch a{1..10}.txt
[root@docker1 _data]# ls
a10.txt a1.txt a2.txt a3.txt a4.txt a5.txt a6.txt a7.txt a8.txt a9.txt
容器内共享数据
[root@docker1 ~]# docker exec -it 90 /bin/bash
root@90f3912df24c:/# ls
bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@90f3912df24c:/# ls /data
a1.txt a10.txt a2.txt a3.txt a4.txt a5.txt a6.txt a7.txt a8.txt a9.txt
root@90f3912df24c:/# exit
exit
3 备份容器vol_simple的数据卷数据
[root@docker1 ~]# docker run --rm --volumes-from vol_simple -v $(pwd):/backup ubuntu tar cf /backup/data.tar /data
tar: Removing leading `/' from member names
[root@docker1 ~]# ls
data.tar
首先,这条命令启动了另外一个临时容器,这个容器挂载了两个volume,第一个volume来自于vol_simple容器的共享,也就是需要备份的volume,此时在本容器的/data目录下已经有了与vol_simple容器数据卷中相同的数据。第二个volume将宿主机的当前目录挂载到容器的/backup下。容器运行后将要备份的内容(/data)打包备份到/backup/data.tar ,然后删除容器,备份后的data.tar就留在了当前目录下。
4 恢复volume数据到新容器中
[root@docker1 ~]# docker run -itd --name vol-bck -v /data ubuntu /bin/bash
3b3c668b9f294c60f03870e7765e486615e969e373ffee6179dd68090a0f2479
[root@docker1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3b3c668b9f29 ubuntu "/bin/bash" 39 seconds ago Up 36 seconds vol-bck
90f3912df24c ubuntu "/bin/bash" 8 minutes ago Up 8 minutes vol_simple
[root@docker1 ~]# docker run --rm --volumes-from vol-bck -v $(pwd):/backup ubuntu tar xf /backup/data.tar -C /
[root@docker1 ~]# docker inspect 3b | grep Source
"Source": "/var/lib/docker/volumes/b0ff6a83862f7f36f0f2b91a611d6f506acaac757b557c3b5ab0238361eb2004/_data",
[root@docker1 ~]# cd /var/lib/docker/volumes/b0ff6a83862f7f36f0f2b91a611d6f506acaac757b557c3b5ab0238361eb2004/_data
[root@docker1 _data]# ls
a10.txt a1.txt a2.txt a3.txt a4.txt a5.txt a6.txt a7.txt a8.txt a9.txt
[root@docker1 _data]# docker exec -it 3b /bin/bash
root@3b3c668b9f29:/# ls
bin boot data dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@3b3c668b9f29:/# ls /data
a1.txt a10.txt a2.txt a3.txt a4.txt a5.txt a6.txt a7.txt a8.txt a9.txt
首先运行一个新容器vol-bck作为数据恢复的目标。然后启动了一个临时容器,这个容器挂载了两个volume,第一个volum与要恢复的volume共享,此时两个容器内的/data目录数据一致,都为空。第二个volume将宿主机的当前目录挂载到容器的/backup下,当前目录下有data.tar文件,此时容器内的/backup目录下也有了这个文件,再对这个文件进行解包并释放到容器的根目录下,此时容器的/data目录的数据恢复,然后删除容器,vol-bck容器内的/data目录的数据因为共享volume也恢复了。