第四篇:Docker 数据持久化——Volume 和 Bind Mount

举报
yd_220371319 发表于 2026/09/12 10:44:05 2026/09/12
【摘要】 如果你把数据库放进 Docker,可能马上会遇到一个问题:容器删掉以后,数据库怎么办?这就涉及 Docker 的数据持久化。容器不是用来保存重要数据的假设:MySQL↓Container↓数据库文件如果数据库文件全部存在容器自己的可写层里,那么删除容器之后,数据也可能跟着消失。因此,我们需要把数据放到容器之外。Bind Mount最直观的方法就是把宿主机目录挂进去。例如:docker run...


如果你把数据库放进 Docker,可能马上会遇到一个问题:

容器删掉以后,数据库怎么办?

这就涉及 Docker 的数据持久化。

容器不是用来保存重要数据的

假设:


MySQL
↓
Container
↓
数据库文件

如果数据库文件全部存在容器自己的可写层里,那么删除容器之后,数据也可能跟着消失。

因此,我们需要把数据放到容器之外。

Bind Mount

最直观的方法就是把宿主机目录挂进去。

例如:


docker run -d \
  --name nginx \
  -v /opt/nginx/html:/usr/share/nginx/html \
  nginx

意思就是:


宿主机:
/opt/nginx/html

        ↓

容器:
/usr/share/nginx/html

两边实际上使用的是同一份数据。

宿主机修改文件:


宿主机
 ↓
容器立即看到

容器修改文件:


容器
 ↓
宿主机也能看到

Bind Mount 适合什么?

例如:

  • 开发环境
  • 网站静态文件
  • 配置文件
  • 需要直接编辑的数据

Volume

Docker 还有一种更推荐用于持久化数据的方式:

Volume。

创建:


docker volume create app-data

查看:


docker volume ls

使用:


docker run -d \
  --name app \
  -v app-data:/data \
  alpine

这里的 app-data 是 Docker 管理的 Volume。

两者区别

简单理解:


Bind Mount

宿主机指定路径
        ↓
      容器

而:


Volume

Docker 管理的数据
        ↓
      容器

开发环境经常使用 Bind Mount。

数据库等服务则经常使用 Volume。

Volume 是不是备份?

不是。

这是一个很容易产生误解的地方。

Volume 只是:

让数据不跟着容器生命周期一起消失。

如果服务器硬盘坏了,Volume 当然也可能没了。

真正的生产环境还需要:


Volume
+
数据库备份
+
远程备份

一个好的 Docker 思路

把应用设计成:


容器:
负责运行

Volume:
负责保存数据

镜像:
负责提供运行环境

这样更新应用时,就可以放心地替换容器。

下一篇,我们看看多个容器之间到底是怎么通信的。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。