github编辑

8.1 数据卷

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

8.2.1 为什么需要数据卷

容器的存储层有一个关键问题:容器删除后,数据就没了

spinner

数据卷 (Volume) 解决了这个问题,它的生命周期独立于容器。


8.2.2 数据卷的特性

相关信息如下表:

特性
说明

持久化

容器删除后数据仍然保留

共享

多个容器可以挂载同一个数据卷

即时生效

对数据卷的修改立即可见

不影响镜像

数据卷中的数据不会打包进镜像

性能更好

绕过 UnionFS,直接读写


8.2.3 数据卷 vs 容器存储层

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

容器存储层 (不推荐存储重要数据)

如下代码块所示,展示了相关示例:

spinner

数据卷 (推荐)

如下代码块所示,展示了相关示例:

spinner

8.2.4 数据卷基本操作

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

创建数据卷

运行以下命令:

列出所有数据卷

运行以下命令:

查看数据卷详情

运行以下命令:

关键字段

  • Mountpoint:数据卷在宿主机上的实际存储位置

  • Driver:存储驱动 (默认 local,也可以用第三方驱动)


8.2.5 挂载数据卷

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

方式一:--mount (推荐)

运行以下命令:

参数说明

参数
说明

source

数据卷名称 (不存在会自动创建)

target

容器内挂载路径

readonly

可选,只读挂载

方式二:-v (简写)

运行以下命令:

格式-v 数据卷名:容器路径[:选项]

两种方式对比

相关信息如下表:

特性
--mount
-v

语法

键值对,更清晰

冒号分隔,更简洁

自动创建卷

source 不存在会报错

自动创建

推荐程度

✅ 推荐 (更明确)

常用 (更简洁)

只读挂载

运行以下命令:


8.2.6 使用场景示例

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

场景一:数据库持久化

运行以下命令:

场景二:多容器共享数据

运行以下命令:

场景三:配置文件持久化

运行以下命令:


8.2.7 数据卷管理

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

删除数据卷

运行以下命令:

清理未使用的数据卷

运行以下命令:

⚠️ 注意:数据卷不会自动垃圾回收。长期运行的系统应定期清理无用数据卷。


8.2.8 数据卷备份与恢复

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

备份数据卷

运行以下命令:

原理

  1. 创建临时容器

  2. 挂载要备份的数据卷到 /source

  3. 挂载当前目录到 /backup

  4. 使用 tar 打包

恢复数据卷

运行以下命令:

备份脚本示例

运行以下命令:


8.2.9 数据卷 vs 绑定挂载

Docker 有两种主要的数据持久化方式:

特性
数据卷 (Volume)
绑定挂载 (Bind Mount)

管理方式

Docker 管理

用户管理

存储位置

/var/lib/docker/volumes/

任意宿主机路径

可移植性

更好

依赖宿主机路径

适用场景

生产数据持久化

开发时同步代码

备份

需要工具

直接访问文件

详见绑定挂载章节。


8.2.10 常见问题

本节涵盖了相关内容与详细描述,主要探讨以下几个方面:

Q:如何知道容器使用了哪些数据卷?

运行以下命令:

Q:数据卷的数据在哪里?

运行以下命令:

⚠️ 注意:不建议直接修改 Mountpoint 中的文件,应通过容器操作。

Q:如何在不同机器间迁移数据卷?

  1. 在源机器备份:docker run --rm -v mydata:/data -v $(pwd):/backup alpine tar czf /backup/data.tar.gz -C /data .

  2. 传输 tar.gz 文件

  3. 在目标机器恢复


最后更新于