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

Docker基础篇07:Docker容器数据卷

文章目录

  • 一、坑:容器卷记得加入
  • 二、回顾下上一讲的知识点,参数V
  • 三、是什么
  • 四、能干嘛
  • 五、数据卷案例
    • (一)宿主vs容器之间映射添加容器卷
      • 1. 直接命令添加
      • 2. 查看数据卷是否挂载成功
      • 3. 容器和宿主机之间数据共享
    • (二)读写规则映射添加说明
      • 1. 读写(默认)
      • 2. 只读
    • (三)卷的继承和共享
      • 1. 容器1完成和宿主机的映射
      • 2. 容器2继承容器1的卷规则

一、坑:容器卷记得加入

--privileged=true

Docker挂载主机目录访问如果出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可

如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,在SELinux里面挂载目录被禁止掉了,如果要开启,我们一般使用–privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。

二、回顾下上一讲的知识点,参数V

在这里插入图片描述

三、是什么

卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:卷的设计目的就是 数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。

  • 一句话:有点类似我们Redis里面的rdb和aof文件
  • 将docker容器内的数据保存近宿主机的磁盘中
  • 运行一个带有容器卷存储功能的容器实例
    • docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

四、能干嘛

将运用与运行的环境打包镜像,run后形成容器实例运行 ,但是我们对数据的要求希望是 持久化

Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。为了能保存数据在docker中我们使用卷。

特点:

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

五、数据卷案例

(一)宿主vs容器之间映射添加容器卷

1. 直接命令添加

  • 命令:docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
  • 公式:docker run -it -v /宿主机目录:/容器内目录 ubuntu /bin/bash
  • docker run -it --name myu3 --privileged=true -v /tmp/myHostData:/tmp/myDockerData ubuntu /bin/bash
    在这里插入图片描述

2. 查看数据卷是否挂载成功

docker inspect 容器ID
在这里插入图片描述

Mounts:表示容器中所有的挂载点信息,包括:数据卷(Volumes)、主机到容器的绑定挂载(Bind mounts)、内存文件系统(tmpfs)挂载

  • Type:挂载类型
    • volume:Docker 管理的卷
    • bind:主机到容器的绑定挂载
    • tmpfs:内存文件系统挂载
  • Source:挂载源路径
    • 对于volume:Docker 存储卷的路径(通常在/var/lib/docker/volumes/
    • 对于bind:主机上的源路径
    • 对于tmpfs:通常为空
  • Destination:容器内的挂载目标路径
  • Mode:挂载模式
    • rw:读写模式(默认)
    • ro:只读模式
  • RW:布尔值,表示是否可读写
    • true:读写
    • false:只读
  • Propagation:挂载传播设置(仅适用于bind类型)
    • rprivateprivatersharedsharedrslaveslave

3. 容器和宿主机之间数据共享

  1. docker修改,主机同步获得
  2. 主机修改,docker同步获得
  3. docker容器stop,主机修改,docker容器重启后数据还可以同步
    在这里插入图片描述

(二)读写规则映射添加说明

1. 读写(默认)

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名
若上述命令中容器内目录后面未添加读写规则,则默认就是rw
在这里插入图片描述
rw = read + write
在这里插入图片描述

2. 只读

容器实例内部被限制,只能读取不能写
在这里插入图片描述
/容器目录:ro 镜像名 就能完成功能,此时容器自己只能读取不能写

ro = read only

此时如果宿主机写入内容,可以同步给容器内,容器可以读取到。

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

(三)卷的继承和共享

1. 容器1完成和宿主机的映射

docker run -it --privileged=true -v /mydocker/u:/tmp --name u1 ubuntu
在这里插入图片描述
在这里插入图片描述

2. 容器2继承容器1的卷规则

docker run -it --privileged=true --volumes-from 父类 --name u2 ubuntu

volumes-from相当于java的extends,表示继承
上面命令中的-v全称就是-volumes

在这里插入图片描述

如果父类容器停止运行,那么子类容器与宿主机之间的数据共享并不会受到影响,因为父类容器和子类容器是两个不同的容器,两者是相互独立的,子类容器继承的是父类容器的挂载路径规则,所以说父类容器的运行状态并不影响子类容器和宿主机之间的数据共享。

http://www.dtcms.com/a/388913.html

相关文章:

  • WPF 拖拽(Drag Drop)完全指南:从入门到精通
  • rust编写web服务05-数据库连接池
  • AppInventor2使用本地SQLite实现用户注册登录功能
  • Prompt(提示词工程)优化
  • Ubuntu 系统安装 PostgreSQL 17.6
  • Kotlin-基础语法练习四
  • 开源的消逝与新生:从 TensorFlow 的落幕到开源生态的蜕
  • 原创GIS FOR Unity3d PAD VR LINUXPC 同时支持。非cesium
  • Kotlin中协程的管理
  • django如何自己写一个登录时效验证中间件
  • 【大前端++】初始技术栈跨平台方案Electron+Vue,MacOS开发环境搭建【十分钟一个Demo】
  • 限时起售价17.38万元,吉利银河M9上市
  • Vue : defineModel()
  • 一套基于Java+Vue+UniApp开发的同城配送系统
  • Vue 3 手机外观组件库
  • 部署分布式CephFS,存储的服务器的最低配置
  • 【Spring AI】Ollama大模型-智能对话实现+项目实战(Spring Boot + Vue)
  • Vue 3 实战:GIS 系统模块化设计与多功能融合方案
  • Docker多容器编排:Compose 实战教程——从入门到精通
  • Vue2 基础知识点一:数据绑定 (Data Binding)
  • layui tree组件回显bug问题,父级元素选中导致子集全部选中
  • centos7上使用Docker+ RagFlow + ollama + 数据集 搭建自己的AI问答机器人(2025-09)
  • # 从 Gymnasium 到 Minari:新一代机器人强化学习工具链全指南
  • 系统架构设计师备考第27天——基于构件的软件工程
  • Centos下安装docker
  • OpenAPI 规范:构建高效 RESTful API 指南
  • 基于 AForge.NET 的 C# 人脸识别
  • SQLite与ORM技术解析
  • vue动态时间轴:交互式播放与进度控制
  • Java I/O三剑客:BIO vs NIO vs AIO 终极对决