当前位置: 首页 > news >正文

Docker数据卷

目录

一、数据卷的本质与价值

二、数据卷的三大类型

1. 主机挂载卷(Host Volume)

2. 命名卷(Named Volume)

3. 匿名卷(Anonymous Volume)

三、数据卷操作全图解

1. 创建与管理

2. 容器挂载示例

四、数据卷的进阶特性

1. 只读卷(Read-only)

2. 卷驱动扩展

3. 数据卷容器(已淘汰)

五、数据卷的典型应用场景

六、数据卷的注意事项

七、数据卷与绑定挂载的对比

结语


一、数据卷的本质与价值

数据卷(Volume)是Docker容器实现持久化存储的核心解决方案,它解决了容器文件系统的关键限制:

  • 容器默认特性​:写入时复制(CoW)、临时性(容器删除则数据丢失)
  • 数据卷优势​:独立于容器生命周期、高性能直接访问、支持共享和备份

二、数据卷的三大类型

1. 主机挂载卷(Host Volume)

docker run -v /host/path:/container/path nginx
  • 特点​:

    • 直接映射主机目录到容器
    • 路径需绝对路径
    • 主机文件变更实时反映到容器
  • 适用场景​:

    • 开发环境代码热更新
    • 需要主机直接访问容器数据的场景

2. 命名卷(Named Volume)

docker volume create mydata
docker run -v mydata:/container/path mysql
  • 特点​:

    • Docker管理的专用存储区域
    • 通过docker volume命令管理
    • 自动创建于/var/lib/docker/volumes/
  • 优势​:

    • 与主机解耦,便于迁移
    • Docker自动维护生命周期
    • 性能优于主机卷(针对容器优化)

3. 匿名卷(Anonymous Volume)

docker run -v /container/path mysql
  • 特点​:
    • 未明确命名的临时卷
    • 自动生成哈希值作为标识
    • 容器删除后需手动清理

三、数据卷操作全图解

1. 创建与管理

# 创建命名卷
docker volume create dbdata# 列出所有卷
docker volume ls# 检查卷详情
docker volume inspect dbdata# 删除无用卷
docker volume prune

2. 容器挂载示例

# MySQL数据持久化
docker run -d --name mysql \-v mysql_data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=123 \mysql:5.7# 开发环境代码映射
docker run -d --name dev-app \-v $(pwd)/src:/app/src \node:14

四、数据卷的进阶特性

1. 只读卷(Read-only)

docker run -v /host/path:/container/path:ro nginx
  • 适用场景:配置文件等不需要写入的数据

2. 卷驱动扩展

docker volume create --driver local \--opt type=nfs \--opt device=192.168.1.100:/share \nfs-volume
  • 支持NFS、SSHFS等分布式存储

3. 数据卷容器(已淘汰)

# 传统方式(不推荐)
docker create -v /data --name datastore busybox
docker run --volumes-from datastore app1
  • 现代Docker建议直接使用命名卷

五、数据卷的典型应用场景

场景推荐方案示例命令
数据库持久化命名卷-v dbdata:/var/lib/mysql
配置文件管理主机卷(只读)-v ./config:/etc/nginx:ro
开发环境代码热更新主机卷-v ./src:/app/src
多容器共享数据命名卷多个容器挂载相同卷名
生产环境数据备份卷驱动+NFS使用NFS驱动创建卷

六、数据卷的注意事项

  1. 权限问题​:

    • 容器进程用户需有卷目录的读写权限
    • 可添加-u参数指定运行用户
    docker run -u 1000 -v data:/data app
  2. SELinux/AppArmor​:

    • 在启用安全模块的系统可能需要额外配置 
    -v /host/path:/container/path:z  # 自动应用SELinux标签
  3. 性能调优​:

    • 对IO敏感应用可考虑delegatedcached模式(Mac/Windows)
    -v /host/path:/container/path:delegated

七、数据卷与绑定挂载的对比

特性数据卷(Volume)绑定挂载(Bind Mount)
存储位置Docker管理区域主机任意路径
空目录初始化自动用镜像内容填充保持主机原样
权限管理Docker自动处理需手动配置
可移植性高(不依赖主机路径)低(依赖主机路径)
备份便利性直接备份整个卷需明确备份指定目录

结语

需要知道更多更详细的内容可以访问docker官网:https://docs.docker.com/engine/storage

http://www.xdnf.cn/news/499249.html

相关文章:

  • 深入解析Spring Boot与JUnit 5的集成测试实践
  • FTP服务搭建实战:安全文件共享解决方案
  • 使用Docker部署Nacos
  • 机器学习-人与机器生数据的区分模型测试 -数据筛选
  • 【AI论文】EnerVerse-AC:用行动条件来构想具身环境
  • stm32 DMA
  • 【八股战神篇】Java集合高频面试题
  • Redis Sentinel如何实现高可用?
  • 类加载 与 Spring容器加载
  • STM32 | 软件定时器
  • 【发票提取表格】批量PDF电子发票提取明细保存到Excel表格,批量提取ODF电子发票明细,行程单明细,单据明细保存到表格,使用步骤、详细操作方法和注意事项
  • Java—异常体系
  • 【Linux笔记】——Linux线程封装
  • Ulyssess Ring Attention
  • Python文件与JSON操作全解:从基础到企业级实践
  • A级、B级弱电机房数据中心建设运营汇报方案
  • Ankr:Web3基础设施的革新者
  • Zephyr OS 中的 FIFO 接口应用介绍
  • SECERN AI提出3D生成方法SVAD!单张图像合成超逼真3D Avatar!
  • Windows系统部署MongoDB数据库图文教程
  • 机器学习-人与机器生数据的区分模型测试-数据处理 - 续
  • 【漫话机器学习系列】263.线性插值(Interpolation)
  • img.dims() <= 2 in function ‘cv::matchTemplate报错
  • Mysql 刷题 day05
  • 数学复习笔记 19
  • 1.2.1电商平台
  • 探索C++对象模型:(拷贝构造、运算符重载)成员函数的深度解读(中篇)
  • 力扣HOT100之二叉树:98. 验证二叉搜索树
  • 【网络入侵检测】基于Suricata源码分析运行模式(Runmode)
  • STM32烧录程序正常,但是运行异常