什么是存储卷? Docker 存储卷 是 Docker 容器中用于持久化存储数据的独立文件系统区域。它独立于容器的联合文件系统,其生命周期可以完全独立于创建它的容器。简单来说,可以把它理解成容器中的一个共享文件夹或外部硬盘,这个文件夹直接映射到主机(或其它远程存储)上的一个真实目录。
为什么要使用存储卷?
Docker 提供了三种方式将数据从宿主机挂载到容器中:
管理卷(volume docker )。默认映射到宿主机的/var/lib/docker/volumes目录下,只需要在容器内指定容器的挂载点是什么,而被绑定宿主机下的那个目录,是由容器引擎 daemon自行创建一个空的目录,或者使用一个已经存在的目录,与存储卷建立存储关系,这种方式极大解脱用户在使用卷时的耦合关系,缺陷是用户无法指定那些使用目录,临时存储比较适合;
绑定数据卷(bind mount)。映射到宿主机指定路径下,在宿主机上的路径要人工的指定一个特定的路径,在容器中也需要指定一个特定的路径,两个已知的路径建立关联关系。
临时数据卷(tmpfs mount).映射到于宿主机内存中,一旦容器停止运行,tmpfs mounts 会被移除,数据就会丢失,用于高性能的临时数据存储。
创建卷 方法一: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]参数:
示例:

效果:

–mount选项
功能:完成目录映射 语法:
--mount '<key>=<value>,<key>=<value>'关键参数:
type:类型表示 bind, volume, or tmpfssource,src:对于命名卷,这是卷的名称。对于匿名卷,省略此字段destination,dst,target:文件或目录挂载在容器中的路径ro,readonly:只读方式挂载示例:
docker run -d --name myweb2 --mount 'src=myweb2,dst=/usr/share/nginx/html' nginx:1.24.0
效果和-v选项相同
绑定卷 bind mount:-v 和 --mount 都可以完成绑定卷的创建
-v 选项
功能:完成卷映射
语法:
docker run -v name:directory[:options] ………
–mount选项 功能:完成目录映射 语法:
--mount '<key>=<value>,<key>=<value>'关键参数:
type: 类型表示 bind, volume, or tmpfssource, src: 宿主机目录,这个和管理卷是不一样的destination, dst,target: 文件或目录挂载在容器中的路径ro,readonly: 只读方式挂载示例:
docker run -d --name=myweb3 --mount
type=bind,src=/home/qsy/gitDocker/data/test2
,dst=/usr/share/nginx/html nginx:1.24.0注意:在命令行中不能像这个把指令分行写(必须写在一行),这里只是方便展示。
效果同-v选项。
特性 | 管理卷 | 绑定卷 |
|---|---|---|
创建者 | Docker | 用户自己 |
存储位置 | Docker管理的区域 | 用户指定的任何目录 |
控制权 | Docker | 用户 |
移植性 | 高 | 低 |
典型用途 | 数据库数据、应用程序产生的需要持久化的数据 | 配置文件、源代码、日志文件(在主机和容器间共享) |
备份与迁移 | 使用 docker volume 命令操作,相对简单 | 需要操作主机文件系统,复杂度高 |
临时卷 tmpfs:临时卷数据位于内存中,在容器和宿主机之外(仅在容器运行期间存在)。
局限性
创建卷 方法一: –tmpfs选项 功能:完成临时卷映射 语法:
--tmpfs /app示例:
docker run -d --name=myweb4 --tmpfs /test1 nginx:1.24.0
方法二:
--mount选项
功能:完成目录映射
语法:
--mount '<key>=<value>,<key>=<value>'关键参数:
type:类型表示 bind, volume, or tmpfsdestination,dst,target:挂载在容器中的路径tmpfs-size:tmpfs 挂载的大小(以字节为单位)。默认无限制。tmpfs-mode:tmpfs 的八进制文件模式。例如,700 或 0770。默认为 1777 或全局可写。示例:
docker run -d --name=myweb5 --mount type=tmpfs,dst=/usr/share/nginx/html nginx:1.24.1接下来我们演示把数据库容器数据丢失,然后通过存储卷恢复的过程,分为以下几步:
创建mysql容器并挂载:
docker run -d --name 容器的名字 -v 宿主机目录:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=数据库密码 mysql:版本号
模拟数据库存储:

删除mysql容器

恢复数据(数据都在宿主机目录下,再用同样的方式挂载就行)

登录数据库查看数据是否恢复:

非常感谢您能耐心读完这篇文章。倘若您从中有所收获,还望多多支持呀!