数据卷

数据卷(Data Volume): 可供一个或多个容器使用的特殊目录,绕过UFS

  • Data Volume可在容器间共享和重用
  • 对Data Volume的修改立马生效
  • 对Data Volume的更新不影响镜像
  • Data Volume默认一直存在,即使容器被删除

Note:

  • Data Volume用法类似于Linux下对文件|目录进行mount

添加数据卷

1
2
3
4
5
6
# Usage
# docker run -v [HOST_PATH]:[CONTAINER_PATH] IMAGE [COMMAND] [ARG...]
# HOST_PATH:宿主机文件系统路径;CONTAINER_PATH:容器文件系统路径(路径都为绝对路径)
# -v:创建数据卷并挂载到容器,一次run可用多个-v,建立多个数据卷

$ docker run --name datavolume -it -d -v /data ubuntu:14.04 /bin/bash

删除数据卷

1
2
3
4
5
6
# Usage
# docker rm [OPTIONS] CONTAINER [CONTAINER...]
# 数据卷生命周期独立于容器,不随容器删除而删除
# 在删除容器时用:docker rm -v移除数据卷

$ docker rm -v datavolume 

挂载宿主机目录

1
2
3
4
# `-v`:  指定宿主机目录挂载到容器     
# `:ro`: docker默认数据卷权限为读写,`:ro`指定为只读  

$ docker run --name datavolume -v /home/data:/home/mongo/db ubuntu:14.04 /bin/bash

查看数据卷信息

1
2
3
# Usage     
# docker inspect [OPTIONS] Container_NAME|ID [NAME|ID...]    
$ docker inspect datavolume     

挂载本地文件作为数据卷

1
2
# `-v`: 亦可指定主机文件挂载到容器       
$ docker rum --rm -it -v ~/.bash_history:/.bash_history ubuntu14:04 /bin/bash

挂载数据卷容器

挂在数据卷容器主要用于容器间共享数据

1
2
3
4
5
6
# Usage
# --volumes-from list —>Mount volumes from the specified container(s) (default[])
# 创建容器时通过`--volumes-from`参数指定要挂载的数据卷容器
# 将datavolume容器的`/home/mongo/db`数据卷, 挂载到另一个容器中

$ docker run --name mydb -d --volumes-from datavolume ubuntu:14.04 /bin/bash

Note:

  • 数据卷容器间可以级联挂载
  • --volumes-from指定的数据卷容器在挂载时不需要保持运行状态

数据卷备份与恢复

备份

1
2
# 备份mydb容器中的数据卷/home/mongo/db, 到宿主机目录下的backup.tar文件中    
$ docker run --name mybackup --rm --volumes-from mydb -v $(PWD):/home/back ubuntu:14.04 tar zcvf /home/backup/backup.tar.gz /home/mongo/db

恢复

1
2
# 恢复本地目录下的backup.tar.gz文件到mydb容器下的/home/mongo/db数据卷
$ docker run --rm --volumes-from mydb -v $(pwd):/backup ubuntu:14.04 tar zxvf /backup/backup.tar.gz

See Also

Thanks to the authors 🙂