Docker 数据卷(Volume)

Docker 中的数据卷(Volumes)是容器持久化数据的核心机制。它用于在容器之间共享数据、实现数据持久化、解耦宿主机文件系统,非常关键。下面我将从 基础概念、使用方式、命令详解、最佳实践 四个方面完整讲解。


一、什么是 Docker 数据卷(Volume)

Volumes 的作用:

  • 容器删除后数据仍然保留
  • 多容器共享数据
  • 宿主机与容器之间安全读写
  • 适配数据库、日志、配置文件等持久化需求

二、三种数据卷类型对比

类型写法持久性推荐用法
匿名卷-v /data临时挂载
具名卷-v mydata:/data推荐用于生产持久存储
绑定挂载-v /host/path:/data强依赖宿主配置文件、开发环境调试

三、Docker Volume 命令大全

1. 创建卷

docker volume create mydata

2. 查看卷列表

docker volume ls

3. 查看某个卷信息

docker volume inspect mydata

4. 删除卷(卷未被挂载才可删)

docker volume rm mydata

5. 清理所有未使用的卷

docker volume prune

四、使用示例

示例 1:具名卷挂载

docker run -d \
  --name mysql \
  -v mysql-data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=123456 \
  mysql:5.7

卷名为 mysql-data,数据在 /var/lib/docker/volumes/mysql-data/_data


示例 2:绑定宿主机目录

docker run -d \
  -v /home/user/nginx/html:/usr/share/nginx/html \
  nginx

宿主机目录 /home/user/nginx/html 将映射为容器中的网站根目录。


示例 3:docker-compose 中挂载卷

version: '3'
services:
  redis:
    image: redis
    volumes:
      - redis-data:/data

volumes:
  redis-data:

五、Volume 挂载时的注意点

情况说明
容器目录原有数据会消失Volume 挂载会覆盖容器内部原始目录内容(除非 Docker 初始化)
权限问题宿主目录要设好 chmod/chown,尤其数据库等会要求写权限
SELinux/AppArmor 限制某些系统需开启额外策略才能正常挂载主机目录

六、Volume 数据位置

具名卷或匿名卷默认存储在:

/var/lib/docker/volumes/<volume_name>/_data

你可以直接进入该目录查看或备份数据(谨慎操作)。


七、最佳实践

场景推荐方式
数据持久化(MySQL 等)✅ 使用具名卷
配置文件热更新✅ 使用绑定挂载
多容器共享目录✅ 同一个具名卷挂载多个容器
避免宿主依赖❌ 不建议生产环境依赖宿主路径

补充:使用 init 容器初始化卷(K8s 常见)

如果你用 Kubernetes,也可以让 Init 容器先写入数据到卷,再让主容器读取,非常灵活。


总结

命令或概念用法示例
创建具名卷docker volume create mydata
查看所有卷docker volume ls
删除卷docker volume rm mydata
挂载具名卷-v mydata:/data
挂载宿主路径-v /host/path:/container/path

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思静鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值