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

Docker 数据管理

Docker 数据管理

  • 1. 数据卷
  • 2. 启动挂载数据卷的容器
  • 3. 数据卷的删除与清理

1. 数据卷

数据卷(Volume)是 Docker 专为容器数据持久化和共享设计的特殊目录,它完全独立于容器的 UnionFS(联合文件系统),是 Docker 中最推荐的数据管理方式。相比直接操作容器内文件,数据卷具备以下不可替代的优势:

  • 跨容器共享与重用:一个数据卷可同时挂载到多个容器中,实现容器间数据互通,比如前端容器和后端容器共享静态资源目录。
  • 实时生效的修改:对数据卷内文件的增删改查会立即生效,无需重启容器,极大提升开发调试效率。
  • 镜像与数据解耦:修改数据卷中的数据不会影响容器镜像,保证镜像的纯净性,避免因数据变更导致镜像冗余。
  • 生命周期独立:数据卷的生命周期不受容器影响,即使挂载数据卷的容器被删除,数据卷依然保留,数据不会丢失;只有手动删除数据卷,数据才会被清理。

数据卷的使用逻辑类似于 Linux 系统中的目录 / 文件挂载(mount)。当容器启动并挂载数据卷时,若数据卷为空,镜像中被指定为挂载点的目录下的所有文件会自动复制到数据卷中;若数据卷已有数据,则直接使用现有数据,不会覆盖,这一特性保证了容器初始化时的基础数据完整性

1、创建一个数据卷

使用docker volume create命令可创建自定义名称的数据卷

# 创建名为 my-vol 的数据卷dockervolume create my-vol

执行后,Docker 会在后台完成数据卷的创建,并将其存储在宿主机的指定目录(默认路径为 /var/lib/docker/volumes/),该目录由 Docker 统一管理,无需手动干预

2、查看数据卷列表

创建后可通过docker volume ls命令查看所有已创建的数据卷,确认数据卷是否创建成功:

dockervolumels

3、查看数据卷详细信息

为了了解数据卷的具体存储路径、创建时间等元数据,可使用docker volume inspect命令查询指定数据卷

dockervolume inspect my-vol

其中 Mountpoint 字段显示了该数据卷在宿主机上的实际存储路径,开发者可直接访问该路径操作数据


2. 启动挂载数据卷的容器

创建数据卷后,需将其挂载到容器的指定目录,才能让容器读写数据卷中的内容。在docker run命令中,通过--mount标记可实现数据卷与容器的挂载,且一次启动命令可挂载多个数据卷,满足容器多目录的数据需求

以 Nginx 容器为例,创建名为 web 的容器,并将 my-vol 数据卷挂载到容器的/usr/share/nginx/html目录(Nginx 默认的网页根目录):

dockerrun-d-P\--nameweb\--mountsource=my-vol,target=/usr/share/nginx/html\nginx:alpine


3. 数据卷的删除与清理

数据卷的生命周期独立于容器,因此容器被删除后,数据卷仍会保留,这虽然保证了数据安全,但也可能导致无主数据卷占用宿主机空间

使用docker volume rm命令可删除指定的未被挂载的数据卷:

# 删除 my-vol 数据卷dockervolumermmy-vol

注意:若数据卷仍被容器挂载,直接删除会报错,需先停止并删除关联容器,再删除数据

如果希望删除容器的同时清理关联的数据卷,可在 docker rm 命令中添加 -v 参数:

# 删除 web 容器,并移除关联的匿名数据卷(命名数据卷仍需手动删除)dockerrm-vweb

长期使用 Docker 后,会产生大量无主数据卷(没有任何容器挂载的卷),占据宿主机磁盘空间。可使用docker volume prune命令一键清理:

# 清理所有无主数据卷(执行前会提示确认)dockervolume prune
http://www.jsqmd.com/news/446920/

相关文章:

  • AwesomeCache高级用法:缓存过期策略与异步操作最佳实践
  • 文件实时同步软件PanguFlow,2024已有千人收藏
  • Html+Css+Jquery导航页面练习
  • 如何在5分钟内将Rancher Desktop与CI/CD流水线完美集成:开发者必备指南
  • 如何用 RubyConfig 彻底简化 Rails 配置管理:初学者必备指南
  • 当模式遇上语言:聊聊《Word Pattern II》背后的算法之美
  • GoFrame学习随便记1
  • GNES高级应用:如何为不同数据类型(文本/图像/音频)构建搜索系统
  • vue+element模仿实现PC端网易云,对接第三方接口
  • springboot+mybatis-plus+vue+element+vant2实现短视频网站,模拟西瓜视频移动端
  • mogenerator:Core Data模型代码生成的终极解决方案
  • 线程池 同时多表查询返回结果集
  • 超星学习通使用笔记
  • 别等故障来了才救火:聊聊如何用 AI 把 SLA 这件事“提前做对”
  • 显示学习6(DRM)(TODO)
  • 物联网之Arduino开发环境的下载与安装、ESP32开发环境的下载与安装、常见环境配置问题的解决办法、COM端口不可用的解决方法
  • vue+element纯手工完美模拟实现小米有品网站
  • Springboot整合RabbitMQ
  • uview plus u-calendar日历设置部分日期不可选择disabled
  • 系统不出事,才是运维的最高境界:聊聊如何打造“零故障运维系统”
  • electron 开发轻量级本地数据存储桌面端应用(简洁版)
  • 【100%通过率】华为od统一考试B卷【流水线调度 / 自动化维修流水线】JavaScript 实现
  • Web前端之Css网格布居中的动画、VSC中Scss自动编译成Css、通过子元素改变父元素的样式值、安装和配置Sass插件、样式特殊单位、hover、child、grid、nth、fr
  • minio 安装部署、主从、卸载、基础使用
  • 数据库同步软件,PanguSync霸气!!!
  • AQS原理
  • 写文章,得有点儿原则
  • Web前端之UniApp低功耗蓝牙一键开门、数组匹配数组、多对多查找、开锁
  • Labelme安装以及qt.qpa.plugin: Could not load the Qt platform plugin “xcb“ in ““ even though it was f问题解决
  • CAS原理