[Docker][Docker Volume]详细讲解

news2024/9/24 6:19:29

目录

  • 1.什么是存储卷?
  • 2.为什么需要存储卷?
    • 1.数据丢失问题
    • 2.性能问题
    • 3.宿主机和容器互访不方便
    • 4.容器和容器共享不方便
  • 3.存储卷分类
    • 1.volume docker 管理卷
    • 2.bind mount 绑定数据卷
    • 3.tmpfs mount 临时数据卷
  • 5.管理卷 Volume
    • 1.创建卷
      • 1.-v 参数
      • 2.--mount 参数
    • 2.Volume命令操作
      • 1.docker volume creatre
      • 2.docker volume inspect
      • 3.docker volume ls
      • 4.docker volume rm
      • 5.docker volume prune
    • 3.Dockerfile 匿名卷
  • 6.绑定卷 bind mount
    • 1.-v 参数
    • 2.--mount 参数
  • 7.临时卷 tmpfs
    • 0.前言
    • 1.创建卷
      • 方式一 指定 --tmpfs 创建
      • 方式二 --mount 指定参数创建
  • 8.何时用Volume,bind,tmpfs?


1.什么是存储卷?

  • 存储卷是一个虚拟目录,他将宿主机目录映射到容器内目录,方便用户操作容器内文件,或者方便迁移容器产生的数据,是容器内目录于宿主机目录之间映射的桥梁
    • 这意味着,在容器中的这个目录下写入数据时,容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录
    • 容器直接访问宿主机中的内容,宿主机也可以向容器写入内容,容器和宿主机的数据读写是同步的
  • 卷的本质是文件或者目录,它可以绕过默认的联合文件系统,直接以文件或目录的形式存在于宿主机上
    请添加图片描述

2.为什么需要存储卷?

1.数据丢失问题

  • 容器按照业务类型,总体可以分为两类
    • 无状态的 --> 数据不需要被持久化
    • 有状态的 --> 数据需要被持久化
  • 容器更擅长无状态应用
    • 因为未持久化数据的容器根目录的生命周期与容器的生命周期一样
    • 容器文件系统的本质是在镜像层上面创建的读写层,运行中的容器对任何文件的修改都存在于该读写层,当容器被删除时,容器中的读写层也会随之消失
  • 虽然容器希望所有的业务都尽量保持无状态,这样容器就可以开箱即用,并且可以任意调度,但实际业务总是有各种需要数据持久化的场景,比如MySQL、Kafka等有状态的业务
  • 为了解决有状态业务的需求,Docker提出了卷(Volume)的概念

2.性能问题

  • Union FS对于修改删除等,一般效率非常低
  • 如果对于I/O要求比较高的应用,如Redis在实现持化存储时,是在底层存储时的性能要求比较高

3.宿主机和容器互访不方便

  • 宿主机访问容器,或者容器访问要通过docker cp来完成,应用很难操作

4.容器和容器共享不方便


3.存储卷分类

  • 目前Docker提供了三种方式将数据从宿主机挂载到容器中
    请添加图片描述

1.volume docker 管理卷

  • 默认映射到宿主机的/var/lib/docker/volumes目录下
  • 只需要在容器内指定容器的挂载点是什么,而被绑定宿主机下的哪个目录,是由容器引擎daemon自行创建一个空的目录,或者使用一个已经存在的目录,与存储卷建立存储关系
    • 这种方式极大解脱用户在使用卷时的耦合关系
    • 缺陷是用户无法指定那些使用目录
    • 临时存储比较适合

2.bind mount 绑定数据卷

  • 映射到宿主机指定路径下
  • 宿主机上的路径要人工指定一个特定的路径,在容器中也需要指定一个特定的路径,两个已知的路径建立关联关系

3.tmpfs mount 临时数据卷

  • 映射到于宿主机内存中,一旦容器停止运行,tmpfs mounts会被移除,数据就会丢失,用于高性能的临时数据存储

5.管理卷 Volume

1.创建卷

1.-v 参数

  • 功能:完成目录映射
  • 语法docker run -v name:directory[:OPTIONS] ...
  • 参数
    • name:卷名称
    • directory:卷映射到容器内的目录
    • OPTIONS:选项,如ro表示read-only
  • 注意:容器创建时,如果发现挂载的数据卷不存在时,会自动创建

2.–mount 参数

  • 功能:完成目录映射
  • 语法--mount '<key>=<value>,<key>=<value>'
  • 关键参数
    • type:类型表示bindvolumetmpfs
    • src, source:对于命名卷,这是卷的名称,对于匿名卷,省略此字段
    • dst, destination, target:文件或目录挂载在容器中的路径
    • ro, readonly:只读方式挂载
  • 示例docker run -d --name devtest --mount src=myvol,dst=/app SnowK:latest

2.Volume命令操作

1.docker volume creatre

  • 功能:创建存储卷
  • 语法:`docker volume creatre [OPTIONS] [VOLUME]
  • 关键参数
    • -d, --driver:指定驱动,默认是loval
    • --label:指定元数据
  • 示例docker volume creatre SnowK-Vol

2.docker volume inspect

  • 功能:查看卷详细信息
  • 语法:`docker volume inspect [OPTIONS] VOLUME [VOLUME…]
  • 关键参数-f:指定相应格式,如 json

3.docker volume ls

  • 功能:列出卷
  • 语法docker volume ls [OPTIONS]
  • 关键参数
    • --format:指定相应格式,如 json,table
    • -f, --filter:过滤
    • -q:仅显示名称

4.docker volume rm

  • 功能:删除卷,需要容器不使用
  • 语法docker volume rm [OPTIONS] VOLUME [VOLUME...]
  • 关键参数-f, --force:强制删除

5.docker volume prune

  • 功能:删除未使用的数据卷
  • 语法docker volume prune [OPTIONS]
  • 关键参数
    • --filter:过滤
    • -f, --force:不提示是否删除

3.Dockerfile 匿名卷

  • 通过Dockerfile的VOLUME指令在镜像中创建Data Docker
    • 这样只要通过该镜像创建的容器都会存在挂载点
    • 但值得注意的是通过VOLUME指令创建的挂载点,无法指定主机上对应的目录,而是由Docker随机生成的

6.绑定卷 bind mount

  • -v--mount都可以完成绑定卷的创建

1.-v 参数

  • 功能:完成卷映射
  • 语法docker run -v name:directory[:OPTIONS] ...
  • 参数
    • name宿主机目录,这个和管理卷是不一样的
    • directory:卷映射到容器内的目录
    • OPTIONS:选项,如ro表示read-only
  • 示例docker run -d -it --name devtest -v "$(pwd)"/target:/app SnowK:latest
  • 注意事项:在执行docker run命令时,使用-v 本地目录:容器内目录可以完成本地目录挂载
    • 该目录必须以/./开头,如果直接以名称开头,会被识别为管理卷,而非本地目录
    • -v mysql:/var/lib/mysql:会被识别为一个管理卷,名为mysql
    • -v ./mysql:/var/lib/mysql:会被识别为当前目录下的mysql的目录

2.–mount 参数

  • 功能:完成目录映射
  • 语法--mount '<key>=<value>,<key>=<value>'
  • 关键参数
    • type:类型表示bindvolumetmpfs
    • src, source宿主机目录,这个和管理卷是不一样的
    • dst, destination, target:文件或目录挂载在容器中的路径
    • ro, readonly:只读方式挂载
  • 示例
    docker run -d -it --name devtest \
    	--mount type=bind,src="$(pwd)"/target,dst=/app \
    	SnowK:latest
    

7.临时卷 tmpfs

0.前言

  • 临时卷数据位于内存中,在容器和宿主机之外
  • tmpfs局限性
    • 不同于卷和绑定挂载,不能在容器之间共享 tmpfs 挂载
    • 这个功能只有在Linux上运行Docker时才可用

1.创建卷

方式一 指定 --tmpfs 创建

  • 功能:完成临时卷映射
  • 语法--tmpfs /app
  • 示例:`docker run -d -it --name tmptest --tmpfs /app SnowK:latest

方式二 --mount 指定参数创建

  • 功能:完成目录映射
  • 语法--mount '<key>=<value>,<key>=<value>'
  • 关键参数
    • type:类型表示bindvolumetmpfs
    • dst, destination, target:文件或目录挂载在容器中的路径
    • tmpfs-size:tmpfs挂载的大小(以字节为单位),默认无限制
    • tmpfs-mode:tmpfs的八进制文件模式
      • 例如:700 或 0700
      • 默认为 1777 或 全局可写
    • ro, readonly:只读方式挂载
  • 示例docker run -d -it --name tmptest --mount type=tmpfs,dst=/app SnowK:latest

8.何时用Volume,bind,tmpfs?

  • Volume:volume是Docker的宿主机文件系统一部分,用于不需要规划具体目录的场景
  • bind:bind mount完全是依赖于主机的目录结构和操作系统,用于目录需要提前规划
    • 比如MySQL的目录需要个空间大的,其他服务又不占用的时候,用volume就不太合适了
  • tmpfs用于敏感文件存储,文件不想存储到宿主机和容器的可写层之中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1966411.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Milvus Cloud向量数据库指南》——向量数据库性价比大比拼:谁才是性能之王?

在分析这份向量数据库(Vector Databases)的性价比排名表格时,我们需要从多个维度深入探讨,包括但不限于硬件配置、价格/性能比(QP$,即每百万次查询所花费的价格)、数据集大小、查询类型(无标量过滤、低标量过滤、高标量过滤)以及不同服务提供商之间的比较。以下是一个…

微波治疗仪,美容仪,爆脂仪电源板

分享一下爆脂仪&#xff0c;美容仪&#xff0c;微波治疗仪电源板&#xff0c;高压输出为-2000v&#xff0c;驱动电流最大100mA&#xff0c;匹配磁控管功率输出100w

KubeBlocks v0.9 解读|最高可管理 10K 实例的 InstanceSet 是什么?

实例&#xff08;Instance&#xff09;是 KubeBlocks 中的基本单元&#xff0c;它由一个 Pod 和若干其它辅助对象组成。为了容易理解&#xff0c;你可以先把它简化为一个 Pod&#xff0c;下文中将统一使用实例这个名字。 InstanceSet 是一个通用 Workload API&#xff0c;负责…

python-进度条和计时器

from tqdm import tqdm import time# 设置任务的总步骤数 total_steps 100# 使用tqdm创建进度条 with tqdm(totaltotal_steps, unitstep) as pbar:# 开始计时start_time time.time()# 模拟任务步骤for i in range(total_steps):# 模拟每一步的工作负载time.sleep(0.1) # 假设…

C语言:自定义类型进阶(结构体、联合体、枚举)

自定义类型&#xff08;结构体、联合体、枚举&#xff09; 一、结构体&#xff08;一&#xff09;结构体的内存对齐1、结构体内存对齐规则&#xff08;1&#xff09;引子&#xff08;2&#xff09;offsetof 宏函数&#xff08;3&#xff09;内存对齐原理&#xff08;4&#xff…

【HM】DevEco Studio提供Hot Reload(热重载)能力确实好用!帮助开发者更快速进行调试。但要注意以下几点?

​​ 仅支持开发者在真机上运行/调试运行&#xff1a; 1、运行时&#xff0c;选择带H标识的entry&#xff1b; 2、运行设备选择已连接的真机&#xff1b; 3、运行中修改了文件后&#xff0c;点击H标识&#xff0c;在真机即刻可见效果。 注意约束条件&#xff1a; 只支持真…

硬盘信息,电脑硬盘查看工具

硬盘信息&#xff0c;电脑硬盘查看工具 硬盘信息&#xff0c;电脑硬盘查看工具

FPGA开发——状态机的使用

一、概述 我们在使用FPGA进行开发的过程当中&#xff0c;实现一个东西用得最多的实现方法就是状态机的实现方法&#xff0c;用一句话总结就是万物皆可状态机&#xff0c;这和我们在学习Linux时常说的在Linux中万物都是文件差不多&#xff0c;这里就主要就是突出状态机的应用范…

Moretl 文件同步工具 1.1.0.3

永久免费: 前往Gitee最新版本 更新内容 Winform全部切换到.Net Framework 4.0. 更符合大部分的自动化设备. Web提供.Net Framework 4.0的运行时环境安装包 Web打开时,若当前IP为设备,直接显示设备信息 介绍 用途: 定时全量或增量 采集工控机,办公电脑文件以及日志.(SCADA,I…

Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件

​​ jmeter性能测试 1. Jmeter简介 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言&#xff0c;JMeter小巧轻便且免费&#xff0c;逐渐成为了主流的性能测试工具&#xff0c;是每个测试人员都必须要掌握的工具之一。 本文为JMeter…

进口不锈钢309S螺栓的应用优势

进口不锈钢309S螺栓因其优异的性能和广泛的应用范围而在许多行业中备受青睐。309S不锈钢是一种含硫的易切削不锈钢&#xff0c;具有良好的耐高温和耐腐蚀性能&#xff0c;使其成为高温环境下理想的选择。下面我们就来详细探讨一下进口不锈钢309S螺栓的应用优势。 一、309S不锈钢…

请你谈谈:spring拦截器的应用-preHandle postHandle afterCompletion执行顺序问题的讨论?

首先我们&#xff0c;给出一个demo来看下拦截器方法执行顺序&#xff1a; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.…

第一百八十五节 Java XML教程 - Java DOM简介

Java XML教程 - Java DOM简介 DOM是标准的树结构&#xff0c;其中每个节点包含来自XML结构的一个组件。 XML文档中两种最常见的节点类型是元素节点和文本节点。 使用Java DOM API&#xff0c;我们可以创建节点&#xff0c;删除节点&#xff0c;更改其内容&#xff0c;并遍历节…

TypeScript 定义不同的类型(详细示例)

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

抖音评论爬虫数据采集|抖音评论抓取工具|代码|源码

抖音评论提取软件使用说明 抖音视频评论提取到的内容&#xff1a;1&#xff1a;视频名称 2&#xff1a;视频作者 3&#xff1a;作者地址 4&#xff1a;视频地址 5&#xff1a;评论人昵称。6&#xff1a;评论人主页地址。7&#xff1a;评论内容 8&#xff1a;评论日期 软件支持…

我是客服新手,打字很慢,怎么办?

作为客服新手&#xff0c;打字速度缓慢可能影响工作效率&#xff0c;本文介绍了提高打字速度&#xff0c;以及使用聊天宝快捷回复工具等提效的诀窍 前言 我是客服新手&#xff0c;打字速度缓慢可能影响工作效率。本文将分享如何提高客服打字速度&#xff0c;包括使用聊天宝快捷…

协助我们进行论文写作的ChatGPT们究竟是如何工作的?

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 大型语言模型&#xff08;LLMs&#xff09;正在彻底改变我们与人工智能的互动方式&#xff0c;特别是在写作和创作领域。这些先进的人工智能系统不仅在改变作家和创作者的格局&#xff…

<数据集>遥感航拍飞机识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;2398张 标注数量(xml文件个数)&#xff1a;2398 标注数量(txt文件个数)&#xff1a;2398 标注类别数&#xff1a;1 标注类别名称&#xff1a;[plane] 序号类别名称图片数框数1plane239815178 使用标注工具&#…

多微信管理不再难:聚合聊天神器助你轻松应对!

在当今社交媒体高度发达的时代&#xff0c;很多人都在使用多个微信账号来管理个人与工作联系。面对如此众多的信息沟通&#xff0c;如何高效管理成了一个难题。 幸运的是&#xff0c;聚合聊天神器的出现&#xff0c;彻底改变了这一局面&#xff0c;让我们轻松应对多微信账号的…

Flutter+Android/ios 桌面小组件

FlutterAndroid/ios 桌面组件 总结&#xff1a; Android和iOS 桌面小组件 需要原生去绘制小组件和更新数据&#xff0c;Flutter层 可以使用 MethodChannel 与原生 通信 来控制 更新数据&#xff0c;app无法主动控制 小组件的添加 和 删除&#xff0c; 只能是用户手动操作 。小…