# 數據卷的使用
> 數據卷是一個位于容器中的特殊目錄, 其目的是繞過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
```