Docker学习笔记(三)存储与卷
挂载机制介绍
我们都知道,默认下,Docker容器与宿主机是完全隔离的,这种特性使得我们创建与删除容器都变得更方便,不需要再去删除宿主机上容器遗留下来的痕迹。
但是,当我们使用数据库一类需要持久化数据、共享数据,或希望在容器删除后数据依旧存在,在下次创建其他容器时继续使用该数据时,就不得不通过一种方式,让容器中的数据放在宿主机或其他存储系统上。
Docker 的挂载机制允许将宿主机的文件或目录挂载到 Docker 容器内部。这样容器就可以访问宿主机上的文件系统,并将存储到宿主机指定位置上,使得数据持久化。
Docker有以下三种挂载方式:
- 绑定挂载(推荐用卷挂载替代)
- 常驻内存挂载(又名临时挂载)
- 卷挂载
绑定挂载
将主机文件系统中用户指定的位置附加到容器文件树的指定挂载点上。
使用场景:当主机提供容器运行的程序或目录,或当容器内的程序生成了需要用户/外部程序处理的日志或文件时。
使用命令:
docker run -d --name [容器名] \
--mount type=bind,src=${主机文件地址},dst=${容器内挂载点}
······
[镜像名]
存在风险:可移植性差、容器之间容易出现冲突。
常驻内存存储
顾名思义,这种操作会将数据写入内存中。避免写入数据到容器存储层;是一种非持久化的数据存储,仅将数据保存都在宿主机的内存中,一旦容器停止运行tmpfs mount就会被移除,从而总成数据丢失。
使用场景:tmpfs挂载仅适用于linux主机;常用于存储私钥文件、数据库密码等敏感数据文件,有时也用做上传数据的缓存空间。
使用命令:
docker run -d --name [容器名] \
--mount type=tmpfs,dst=${容器内挂载点},\
tmpfs-size=2048,\ #挂载的tmpfs的宇节数,默认不受限制。
tmpfs-mode=1700 \ # tmpfs的文件模式,例如700或者1700,默认值为1777,表示任何用户都有写入权限 。1700表示文件所有者有读/写权限,而组用户和其他用户没有任何权限。
······
[镜像名]
卷
被命名为由Docker管理的文件系统树;是对绑定挂载的解耦。它会将主机文件系统的一部分映射为docker卷,而使用者无需关心具体存储位置,只需要知道卷名即可。并且,卷作为数据的容器则更易于共享。
使用命令
#创建卷
docker volume create [vName]
#检查卷
docker volume inspect
#卷的使用
docker run -v/--volume [vName]/[hostPath]:[containerPath]
匿名卷与命名卷
在最后一条卷的使用
命令上,我们可以看的`-v``后面既可以使用命名卷,也可以使用主机目录,这种用法被称为匿名卷;两者的不同点在于
- 命名卷:命名卷对应的主机目录下没有数据时,会去映射容器中的数据。当容器被删除时,命名卷不会被删除,它必须手动删除。并且正在被使用的卷无法被删除。
- 匿名卷:主机目录下没有数据时,容器获取的数据也完全是空的。当容器被删除时,对应的匿名卷也会被删除。 类同于绑定挂载。
卷的共享
除了通过名称引用卷外,Docker还提供了另一种指定挂载依赖项的方法。
docker run命令提供了--volumes-from [容器名]
标识选项,用于将挂载定义从一个或多个容器复制到新的容器。这个标识选项可以被设定多次。通过组合使用这个标识选项和匿名卷,可以按照主机无关的方式构建卷共享关系。
当然,从另一个容器复制卷时,还将复制该容器从其他容器复制卷。
由于复制的卷始终具有相同的挂载点,这意味着以下三种情况不能使用--volumes-from
1) Docker没有提供重新映射挂载点的工具,因此,如果要构建的容器需要将共享卷安装到其他位置,就不能使用--volumes-from
2) 如果一个或多个文件系统源使用相同的挂载点创建卷,那么容器使用--volumes-from
复制卷时,只能收到一个卷的定义,导致用户只能访问部分所需要的数据。
3) 当用户需要更改卷的写入权限时,也不能用该命令。因为--volumes-from
从源卷完整的复制了卷的定义。
扩展内容
Docker提供了卷插件接口,通过安装合适的卷插件,Docker可以提供由网络存储或者其他更复杂工具支持的卷。
相关文章:
Docker学习笔记(三)存储与卷
挂载机制介绍 我们都知道,默认下,Docker容器与宿主机是完全隔离的,这种特性使得我们创建与删除容器都变得更方便,不需要再去删除宿主机上容器遗留下来的痕迹。 但是,当我们使用数据库一类需要持久化数据、共享数据…...

硬件工程师笔试面试——滤波器
目录 12、滤波器 12.1 基础 滤波器原理图 滤波器实物图 12.1.1 概念 12.1.2 滤波器的分类 12.1.3 滤波器的工作原理 12.1.4 滤波器的应用 12.1.5 滤波器设计的关键参数 12.2 相关问题 12.2.1 不同类型的滤波器在实际应用中的具体作用是什么? 12.2.2 如何设计一个简…...
【SpringBoot3】面向切面 AspectJ AOP 使用详解
文章目录 一、AspectJ介绍二、简单使用步骤1、引入依赖2、定义一个Aspect3、开启AOP支持 三、AOP 核心概念四、切点(Pointcut)1. execution2. within3. this & target4. args & args5. within & target & annotation 五、通知࿰…...

wav怎么转mp3格式?给你推荐几种音频格式转换方法
wav怎么转mp3格式?将wav文件转换为MP3格式是一个常见的操作,尤其适用于需要节省存储空间或确保文件兼容性的场景。wav文件保存了音频的所有原始数据,这使得它们的文件体积往往非常庞大。相比之下,MP3格式通过有损压缩技术显著减小…...

Redis的AOF持久化、重写机制、RDB持久化、混合持久化
1、AOF持久化 1.1.AOF持久化大致过程 概括:命令追加(append)、文件写入、文件同步(sync) Redis 每执行一条写操作命令,就把该命令以追加的方式写入到一个文件里,然后重启 Redis 的时候&#…...
Dom4j使用xpath查询xml文
Dom4j使用xpath查询带有命名空间的xml文件 方式1 忽略命名空间 DocumentFactory factory DocumentFactory.getInstance(); SAXReader reader new SAXReader(factory); Document document reader.read(xmlFilePath); Element rootElement document.getRootElement(); Nod…...
国家专精特新小巨人企业指标解析与扶持领域
一、什么是国家专精特新小巨人 (一)概念与定义 专精特新“小巨人”企业是指那些在细分市场中具有专业化、精细化、特色化和新颖化特征的中小企业中的佼佼者。这些企业在创新能力强、市场占有率高、掌握关键核心技术以及质量效益方面表现突出࿰…...

进程的属性
tips: task_struct就是linux下的PCB 操作系统不相信任何外部用户,而是只提供窗口,不可能直接与用户打交道,而是通过操作系统 tast_struct用来描述所有进程,用来管理 ; 和 && 可以同时跑两个命令 进…...
Git 中的refs
在 Git 中,refs 是用来存储 Git 对象(如提交、树、标签等)的引用。每个 ref 都是一个指针,指向一个特定的 Git 对象。以下是 Git 中几种常见的 refs 及其含义: 1. refs/heads/ 表示:本地分支。 用途&…...
408算法题leetcode--第六天
58. 最后一个单词的长度 58. 最后一个单词的长度思路:反向遍历时间:O(n);空间:O(1) class Solution { public:int lengthOfLastWord(string s) {int id s.size() - 1;while(s[id] ){--id;}int ret 0;while(id > 0 &&…...
ubuntu64位系统无法运行32位程序的解决办法
在 64 位的 Ubuntu 系统上运行 32 位程序时,如果出现问题,可能是由于缺少 32 位库支持。以下步骤可以帮助你解决这一问题: 1. 启用 32 位架构 首先,确保系统支持 32 位架构。你可以通过以下命令添加 32 位架构支持: …...
深入理解Go语言中的并发封闭与for-select循环模式
在现代编程中,并发已经成为提高程序性能和响应能力的关键手段。然而,在并发环境下,如何安全地访问和操作共享数据却是一大挑战。本文将深入探讨Go语言中的**封闭(confinement)**技术,以及常见的for-select循环模式,帮助您编写更高效、更安全的并发代码。 并发编程中的安…...

Java学习Day42:骑龙救!(springMVC)
springMVC与sevlet都是对应表现层web的,但是越复杂的项目使用SpringMVC越方便 基于Java实现MVC模型的轻量级web框架 目标: 小案例: 1.导入依赖 spring-context: 提供 Spring 框架的核心功能,如依赖注入、事件发布和其他应用上…...

原型模式详细介绍和代码实现
🎯 设计模式专栏,持续更新中, 欢迎订阅:JAVA实现设计模式 🛠️ 希望小伙伴们一键三连,有问题私信都会回复,或者在评论区直接发言 Java实现原型模式 介绍: 原型模式(Prototype Patte…...
ArcGIS Pro SDK (十三)地图创作 5 图层样式
ArcGIS Pro SDK (十三)地图创作 5 图层样式 文章目录 ArcGIS Pro SDK (十三)地图创作 5 图层样式1 风格管理1.1 如何按名称获取项目中的样式1.2 如何创建新样式1.3 如何向项目添加样式1.4 如何从项目中删除样式1.5 如何将样式项添加到样式1.6 如何从样式中删除样式项1.7 如…...

【Python报错已解决】 Requests.exceptions.ProxyError: HTTPSConnectionPool
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…...

现在量化中普遍使用QMT和PTrade?哪家可以同时提供QMT/PTrade?
QMT的特点 全面的功能集成: QMT集成了行情显示、策略研究、交易执行和风控管理于一体,为投资者提供了一站式的量化交易解决方案。 高效的交易执行能力: 通过全内存交易实现低延迟的交易执行,单笔延时小于1ms,确保了交易…...

【计算机网络】UDP 协议详解及其网络编程应用
文章目录 一、引言二、UDP1、UDP的协议格式2、UDP 报文的解包和分用3、UDP面向数据报的特点 三、UDP输入输出四、UDP网络编程 一、引言 UDP(User Datagram Protocol,用户数据报协议)是一种网络通信协议,它属于传输层的协议。是一…...

基于ESP32S3的链接大语言模型对话模块
本实物模块从实物外观、模块组成、API申请及功能说明四部分来介绍这款基于ESP32S3的大语言模型对话模块。 1、实物外观 2、模块介绍 本硬件平台主要由三个模块组成,包括MAX9814录音模块、MAX98357音频功放模块和ESP32S3模块。如下图所示。 MAX9814录音模块&#…...

Cpp输出多字符常量警告
Cpp输出多字符常量警告 Cpp中用单引号(single quotes)表示单个字符(single character),例如a,$,用双引号(double quotes)表示字符串文本(text),例如"Hello World! " 当在一个单引号里面存在多个字符时,Cpp…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...

Java后端检查空条件查询
通过抛出运行异常:throw new RuntimeException("请输入查询条件!");BranchWarehouseServiceImpl.java // 查询试剂交易(入库/出库)记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...

【51单片机】4. 模块化编程与LCD1602Debug
1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...

MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...