一、存储卷概念
什么是存储卷? Docker 存储卷是 Docker 容器中用于持久化存储数据的独立文件系统区域。它独立于容器的联合文件系统,其生命周期可以完全独立于创建它的容器。简单来说,可以把它理解成容器中的一个共享文件夹或外部硬盘,这个文件夹直接映射到主机(或其它远程存储)上的一个真实目录。
为什么要使用存储卷?
- 容器销毁或误操作等会导致数据丢失,而存储卷就可以起到一个数据备份的作用。
- 宿主机和容器,容器和容器,它们之间文件系统是相互隔离的,要完成数据交互很麻烦,而存储卷起到一个交通枢纽的功能,或者说相当于一个'共享目录'。
二、存储卷分类
Docker 提供了三种方式将数据从宿主机挂载到容器中:
- 管理卷(volume):默认映射到宿主机的
/var/lib/docker/volumes目录下,只需要在容器内指定容器的挂载点是什么,而被绑定宿主机下的那个目录,是由容器引擎daemon自行创建一个空的目录,或者使用一个已经存在的目录,与存储卷建立存储关系,这种方式极大解脱用户在使用卷时的耦合关系,缺陷是用户无法指定那些使用目录,临时存储比较适合; - 绑定数据卷(bind mount):映射到宿主机指定路径下,在宿主机上的路径要人工的指定一个特定的路径,在容器中也需要指定一个特定的路径,两个已知的路径建立关联关系。
- 临时数据卷(tmpfs mount):映射到于宿主机内存中,一旦容器停止运行,
tmpfs mounts会被移除,数据就会丢失,用于高性能的临时数据存储。
2.1 管理卷
创建卷 方法一:Volume 命令操作
命令清单:
docker volume create:创建存储卷docker volume inspect:显示存储卷详细信息docker volume ls:列出存储卷docker volume prune:清理所有无用数据卷docker volume rm:删除卷,使用中的无法删除
示例:
- 注:
docker volume create不加卷名称,生成匿名存储卷 - 注:
docker volume inspect支持查看多个存储卷 - 注:
docker volume rm和docker volume prune加-f选项表示强制删除
方法二:-v 或者–mount 指定
在docker run创建并启动容器时添加-v 或--mount 都可以完成管理卷的创建和挂载
-v 选项 功能:完成目录映射 语法:
docker run -v name:directory[:options]
参数:
- 第一个参数:卷名称
- 第二个参数:卷映射到容器的目录
- 第三个参数:选项,如 ro 表示 readonly
示例: 效果同-v 选项
–mount 选项 功能:完成目录映射 语法:
--mount '<key>=<value>,<key>=<value>'
关键参数:
type:类型表示 bind, volume, or tmpfssource,src:对于命名卷,这是卷的名称。对于匿名卷,省略此字段destination,dst,target:文件或目录挂载在容器中的路径ro,readonly:只读方式挂载


