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

Docker学习笔记:数据卷

本文是自己的学习笔记


  • 1、数据卷基本概念
  • 2、数据卷示例
  • 3、数据卷的权限控制
  • 4、数据卷的创建方式
  • 5、数据卷容器


1、数据卷基本概念

数据卷就是docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。为了能保存数据在docker中我们使用卷。简单来说,容器卷就相当于Redis中持久化方式的RDB和AOF。

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。

特点:

  1. 数据卷可在容器之间共享或重用数据
  2. 卷中的更改可以直接生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止

使用数据卷时会建立容器目录到宿主机目录的映射。之后容器只需要在这个目录保存文件,那对应的宿主机目录也会保存这个文件,即使容器关闭宿主机依然可以在对应的目录中访问修改这些文件。

2、数据卷示例

这里给一个直接使用数据卷的示例,我们在启动一个centos时创建一个数据卷。

docker run -it -v /root/dockerfile1:/root/docker1 centosv表示创建数据卷的映射,/root/dockerfile1是机器上的地址;/root/docker1是容器中的地址。

这个指令会启动容器并创建数据卷,容器中root/docker1的地址映射到宿主机的root/dockerfile1。我们在root/docker1写入修改文件时,同样的修改会体现在宿主机的/root/dockerfile1,反之亦然。

即使容器关闭后其在/root/docker1下存储的文件也不会消失,这就实现了容器数据的持久化。

比如我在容器中/root/docker1创建一个文件hello.txt,那主机的/root/dockerfile1也会出现这个文件。

我在主机中删除hello.txt,那容器中的这个文件也会被删除。


3、数据卷的权限控制

创建数据卷时默认权限是双向的,即宿主机和容器都有写权限。

我们可以根据需要管理权限,只需要在映射后面加:和权限。

比如下面的指令中,容器只有只读权限。

docker run -it -v /root/dockerfile1:/root/docker1:ro centos

ro就表示read only

这里的权限控制是指对容器的权限控制,宿主机毫无疑问对所有文件有所有的权限。

权限控制只有两个选项,一个是ro,一个是默认的rw



4、数据卷的创建方式

  1. 在启动容器时通过指令创建:docker run -it -v /root/dockerfile1:/root/docker1 centos
  2. 通过脚本创建:我们先创建一个脚本文件名叫docker1,其中的内容如下
FROM centos
VOLUME ["/root/dataVolumeContainer1","/root/dataVolumeContainer2"]
CMD echo "finished,-----success1"
CMD /bin/bash

脚本中在容器中设置了两个数据卷目录,宿主机的目录没有设置但是启动容器后可以查看。

指定脚本启动容器。

docker build -f docker1 -t centos .

启动成功后查看容器的配置,获取宿主机的目录映射

docker inspect cec

然后可以就可以看到宿主机的映射目录。
请添加图片描述

这个方式可以配置多个目录,同时他是动态的设置宿主机的目录,避免了换机器上时因目录权限不够等原因创建容器灰白的情况。

5、数据卷容器

当我们有多个容器的时候,有些场景这些容器之间需要通过数据卷共享数据。请添加图片描述

当然,我们可以通过为这几个容器指定相同的宿主机目录实现需求。但并不是一个好方法,如果改变宿主机地址工作量可不小。

这时候最好的方式是使用数据卷容器。简单来说就是启动一个容器挂载数据卷,其他容器只需要挂载这个容器就可以实现数据共享。

挂载数据卷的容器就是数据卷容器。



这里展示一个示例。示例中会建立三个容器,但只有第一个容器指定数据卷,其他两个容器会挂载第一个容器。

首先启动容器,命名为dc01并挂载数据卷。

docker run -it -v /root/dockerfile1:/root/docker1  --name dc01 centos

之后启动两个容器并挂载第一个容器。

docker run -it --name dc02 --volumes-from dc01 centos
docker run -it --name dc03 --volumes-from dc01 centos

现在这三个容器就可以在/root/docker1目录下共享数据了。

http://www.lryc.cn/news/571543.html

相关文章:

  • 秋招是开发算法一起准备,还是只准备一个
  • 【CUDA编程】OptionalCUDAGuard详解
  • 【6G技术探索】MCP协议整理分享
  • 6.IK分词器拓展词库
  • # 我使用过的 HTML + CSS 实践总结笔记(含说明)
  • 设计模式笔记_创建型_工厂模式
  • 九日集训第六天
  • 【AI News | 20250617】每日AI进展
  • Tomcat本地部署Maven Java Web项目
  • 从C++编程入手设计模式——策略设计模式
  • uniapp 对接deepseek
  • 手术麻醉系统源码 手麻系统源码 Java手术室管理系统源码
  • 2025年渗透测试面试题总结-红队攻防工程师(题目+回答)
  • 缓存系统-基本概述
  • Ajax 核心知识点全面总结
  • 前端开发面试题总结-vue2框架篇(三)
  • 网络层协议 IP 协议介绍 -- IP 协议,网段划分,私有 IP 和 公网 IP,路由
  • KingbaseES 在线体验平台深度评测
  • 计算机硬件——外设、其他部件
  • CentOS7 安装最新版 Docker
  • 【MySQL】MySQL 数据库操作与设计
  • 【系统设计【4】】设计一个限流器:从理论到实践的完整解决方案
  • 从C++编程入手设计模式——外观模式
  • AI智能体应用市场趋势分析
  • Black自动格式化工具
  • PINA开源程序用于高级建模的 Physics-Informed 神经网络
  • 实验分享|自研局部DIC-GPU算法与开源GPU算法对比实验
  • jenkins打包问题jar问题
  • Layui的table实现鼠标移入单元格后tips弹框提示
  • 【RocketMQ 生产者和消费者】- 消费者重平衡(1)