# 数据卷的使用
> 数据卷是一个位于容器中的特殊目录, 其目的是绕过UFS文件系统提供持久化和数据共享(UFS的详细介绍请参考附录B).
* 数据卷可以在容器之间共享和重用数据
* 对数据卷的修改是直接的
* 更新镜像不会包含对数据卷的数据
* 数据卷一直存在, 直到不再有容器使用
## 添加数据卷
> 在创建容器时通过指定-v参数创建数据卷,可使用-v多次挂载多个数据卷
``` shell
# Usage
# 其中HOST_PATH表示宿主系统的文件系统路径,CONTAINER_PATH表示容器的文件系统路径
# 文件系统路径都为绝对路径
$ docker run -v [HOST_PATH]:[CONTAINER_PATH] IMAGE [COMMAND] [ARG...]
# 创建一个基于ubuntu:14.04的数据卷容器
$ sudo docker run --name mydata -d -v /data ubuntu:14.04 /bin/bash
```
## 挂载宿主系统目录作为数据卷
``` shell
# 创建一个基于golang:1.2的容器,并指定宿主系统/gopath路径为GOPATH路径
# 宿主系统中如果不存在该目录,Docker会自动创建
$ sudo docker run --name mygolang -d -v /gopath:/gopath golang:1.2 /bin/bash
```
## 挂载数据卷容器
> 挂载数据卷容器主要用于容器间数据共享
``` shell
# 在创建容器时通过指定--volumes-from参数挂载数据卷容器
# 将上面创建的mydata容器中/data数据卷,挂载到另外一个容器中
$ sudo docker --name db1 -d --volumes-from mydata ubuntu:14.04 /bin/bash
```
## 数据卷的备份与恢复
* 备份
``` shell
# 备份mydata容器中的数据卷/data,到当前目录下的backup.tar文件中
$ sudo docker run --rm --volumes-from mydata -v $(pwd):/backup ubuntu:14.04 tar cvf /backup/backup.tar /data
```
* 恢复
``` shell
# 恢复本地目录下的backup.tar文件到mydata容器下的/data数据卷
$ sudo docker run --rm --volumes-from mydata -v $(pwd):/backup ubuntu:14.04 tar xvf /backup/backup.tar
```