Docker学习_存储篇
当以默认的方式创建容器时,容器中的数据无法直接和其他容器或宿主机共享。为了解决这个问题需要学习一些Docker 存储卷的知识。
Docker提供了三种存储的方式。
- bind mount共享宿主机文件目录
- volume共享docker存储卷
- tmpfs mount共享内存

volume*
volume方式是容器间数据分享的推荐方式。它的运行和管理都是由docker负责。
添加
此处的添加可以分为两层意思,第一层如何添加一个volume,第二层如何向容器中添加一个volume。
添加一个volume
利用`docker volume create`指令创建一个volume,当不指定volume名称时,docker会以一个volume id位置volume的名称。
如下:

当指定volume名称时,docker将创建一个指定名称的volume。

当volume名称相同时,docker不会创建一个新的,而是利用之前创建的volume。
向容器中添加volume
向容器中有两种选项可供选择一种是利用--mount选项,另一种是利用-v选项。
--mount方式
--mount选项支持详细的设定绑定方式,type设定绑定的类型,source设定卷名称,target设定绑定到容器的哪个目录下。

-v方式
-v选项支持简洁的设定绑定方式,利用:作为分隔,可以分成三个部分。第一个部分为volume的名称,当使用匿名volume时可以忽略。第二个部分为绑定到容器的哪个目录下。第三个部分为一些选项。

查询
查看有哪些volume
利用`docker volume ls`指令可以查看系统中所有的volume情况。

查看详细信息
利用`docker volume inspect <volumeName>`指令可以查看某个volume的详细信息。

删除volume
删除volume的前提条件是没有容器正在使用(不管容器是否在运行)该volume,否则会报错无法删除volume。
利用`docker volume rm <volumeName>`指令可以删除指定的volume名称。

备份&还原
备份
就是将容器中volume绑定的目录进行tar打包。
// 将容器中volume绑定的目录打包成压缩文件
tar cfv backup.tar ./mysql
// 将压缩文件转移到宿主机中
docker cp <contianerId>:<tarFilePath> <hostPath>
还原
就是创建一个新的绑定匿名volume的容器,并将tar解压到指定的目录下即可
// 创建一个绑定目录一致的匿名volume容器
docker container create -e MYSQL_ROOT_PASSWORD=SECRET -v /app mysql:5.7// 将宿主机中backup.tar文件复制到容器的绑定目录下
docker cp backup.tar <contianerId>:<path>// 进入容器,并将backup.tar文件解压
docker exec -it <containerId> bash
cd <path>
tar xvf backup.tar
bind mount
bind mount是宿主机和容器之间共享数据的方式。它的作用就是将宿主机中的特定目录或文件绑定到容器的特定目录中。
添加
- 此处向容器中添bind mount的方式和添加volume的方式非常相似,不同点在于绑定的不是volume名称而是一个宿主机中特定的目录。同样也存在--mount和-v两种方式,向容器中绑定共享的目录。
## 利用--mount方式进行添加
docker container create-e MYSQL_ROOT_PASSWORD=SECRET --mount type=bind,source=<hostPath>,target=<containerPath>mysql:5.7## 利用-v方式进行添加
docker container create-e MYSQL_ROOT_PASSWORD=SECRET-v <hostPath>:<containerPath>mysql:5.7
查询
此处也是通过docker container inspect <containerID>指令查看某个容器下Mounts的信息来查看其共享数据的信息。
Volume和bind mount比较
| 不同点 | bind mount | volume |
| volume位置 | 可任意指定 | /var/lib/docker/volumes/下 |
| 对已有mount point影响 | 隐藏并替换为volume | 原有数据复制到volume |
| 是否支持单个文件 | 支持 | 不支持,只能是目录 |
| 权限控制 | 可设置为只读,默认为读写权限 | 无控制,均为读写权限 |
| 移植性 | 移植性弱,与host path绑定 | 移植性强,无须指定host目录 |
tmpfs mount
tmpfs表示将信息临时存储起来,并保存在宿主机的内存中。需要注意的两点:
- 此处保存的数据无法持久化,只能是临时存储
- 目前只支持宿主机是linux系统
添加
也是通过--mount的方式进行添加,不同点在于其类型为tmpfs,且没有source项
docker container create--mount type=tmpfs,target=/app-e MYSQL_ROOT_PASSWORD=SECRETmysql:5.7
容器间共享数据的方法
bind mount方式
就是将需要共享的数据存储在宿主机特定目录下,然后需要访问这部分数据的容器都通过bind mount绑定这个数据。
volume container方式
就是说创建一个专门为其他容器提供volume的容器,它可以是bind mount方式,也可以是volume方式。
## 创建一个volume container并绑定多个形式的共享数据docker container create-v ~/hostData:/hostData-v containerData:/containerData--name vc_data<image_name>
然后其他容器利用--volumes-from参数绑定到volume container上即可,这样所有这样创建的容器就都有了volume container一样的数据了。
## 创建与volume container共享数据的容器
docker container create--volumes-from <volume container name><image_name>
相关文章:
Docker学习_存储篇
当以默认的方式创建容器时,容器中的数据无法直接和其他容器或宿主机共享。为了解决这个问题需要学习一些Docker 存储卷的知识。 Docker提供了三种存储的方式。 bind mount共享宿主机文件目录volume共享docker存储卷tmpfs mount共享内存 volume* volume方式是容器…...
微信小程序获取当前日期时间
一、直接使用方式 在小程序中获取当前系统日期和时间,可直接拿来使用的常用的日期格式 //1. 当前日期 YYYY-MM-DDnew Date().toISOString().substring(0, 10)new Date().toJSON().substring(0, 10)//2. 当前日期 YYYY/MM/DDnew Date().toLocaleDateString()//3.…...
Unity关键词语音识别
一、背景 最近使用unity开发语音交互内容的时候,遇到了这样的需求,就是需要使用语音关键字来唤醒应用程序,然后再和程序做交互,有点像智能音箱的意思。具体的技术方案方面,也找了一些第三方的服务,比如百度…...
SpringBoot的配置文件——.yml和.properties
目录 1. Spring Boot 配置文件的使用场景 2. 配置文件的两种格式 2.0 特殊说明: 2.1 .properties 2.1.1 格式 2.2.2 缺陷 2.2.3 解决中文乱码的问题 2.2 .yml 2.2.3 格式 配置数据库连接 注意转义字符 编辑 编辑 配置null 配置对象 从.yml读取文件举例 Stud…...
Retrieve Anything To Augment Large Language Models
简介 论文主要介绍了一套通过对比学习和蒸馏学习的方法,来增强学习了embedding向量,然后能够在知识增强,长上下文建模,ICL和工具学习等方面来增强大模型能力。...
什么是面向对象编程
面向对象编程(Object-oriented programming,简称OOP)是一种编程范型,通过将数据和方法(即属性和行为)组织在一个单元中,以模拟现实世界中的实体或概念。在面向对象编程中,数据和方法…...
c++视觉处理----固定阈值操作:Threshold()函数,实时处理:二值化,反二值化,截断,设为零,反向设为零
固定阈值操作: Threshold()函数 cv::threshold() 函数是OpenCV中用于执行固定阈值二值化操作的函数。它可以用来将图像中的像素值根据用户定义的阈值转换为二进制值(0或255),以便进行图像分割、物体检测和特征提取等任务。 cv::…...
KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(8)
接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(7) 上一回讲到了drm_internal_framebuffer_create函数中的framebuffer_check函数中的drm_get_format_info函数,讲解了该函数的第一部分暨前一部分,本文讲解后一部分。为了便于理解以及理清脉络和当前所…...
【问题解决】Ubuntu 安装 SeisSol 依赖 easi 报错解决: undefined reference to `H5free_memory‘
兼职帮客户安装 SeisSol 时问题解决,安装 easi 这个报错卡了很久(搞了一天),记录下,以备后用~ # 编译器问题 rootubuntu:/opt/easi# make -j install [ 4%] Building CXX object CMakeFiles/easi.dir/src/component/…...
循环小数(Repeating Decimals, ACM/ICPC World Finals 1990, UVa202)rust解法
输入整数a和b(0≤a≤3000,1≤b≤3000),输出a/b的循环小数表示以及循环节长度。例如a5,b43,小数表示为0.(116279069767441860465),循环节长度为21。 解法 就是模拟竖式除法 use std::{collecti…...
[GAMES101]透视投影变换矩阵中为什么需要改变z值
一、问题提出 在GAMES101-Lecture4 Transformation Matrices 一节中,闫老师介绍了正交投影和透视投影。 在讲透视投影变换矩阵 M p e r s p → o r t h o M_{persp→ortho} Mpersp→ortho时,同学们对矩阵中的z分量是变化的还是不变的有很多争论。即下…...
sklearn处理离散变量的问题——以决策树为例
最近做项目遇到的数据集中,有许多高维类别特征。catboost是可以直接指定categorical_columns的【直接进行ordered TS编码】,但是XGboost和随机森林甚至决策树都没有这个接口。但是在学习决策树的时候(无论是ID3、C4.5还是CART)&am…...
QT 数据库表格----QSqlTableModel
将数据库数据以表格的形式转化处理的方法很多,但我觉得QSqlTableModel这个model应算是非常好用的; msql.exec("create table alldata(照片,车牌号 "",入车时间,出车时间,金额,状态,看守人员);"); //创建表格 //msql 打开的数据库即Q…...
Vue_Bug Failed to fetch extension, trying 4 more times
Bug描述: 启动electron时出现Failed to fetch extension, trying 4 more times的问题 解决方法: 去src/background.js文件中进行代码注释工作 app.on(ready, async() > {// if (isDevelopment && !process.env.IS_TEST) {// // Install V…...
缩短从需求到上线的距离:集成多种工程实践的稳定框架 | 开源日报 No.55
zeromicro/go-zero Stars: 25.7k License: MIT go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。 go-zero 包含极简的 API 定义和生成工具 goctl,可以根据定义的 api 文件一键生成…...
基于秃鹰优化的BP神经网络(分类应用) - 附代码
基于秃鹰优化的BP神经网络(分类应用) - 附代码 文章目录 基于秃鹰优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.秃鹰优化BP神经网络3.1 BP神经网络参数设置3.2 秃鹰算法应用 4.测试结果:5.M…...
C++笔记之std::future的用法
C笔记之std::future的用法 code review! 文章目录 C笔记之std::future的用法1.C中std::future和std::async总是一起出现吗?2.主要特点和用法3.一个完整的例子4.std::future 存放的是一个结果吗?5.cppreference——std::future 1.C中std::future和std::a…...
openssl学习——消息认证码原理
消息认证码原理 消息认证码(Message Authentication Code, MAC)是一种技术,它的原理是通过对消息和密钥进行特定的处理,生成一个固定长度的数据,这个数据就是消息认证码(MAC)。这个过程可以看作…...
Netty使用SslHandler实现加密通信-单向认证篇
引入依赖 <dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.100.Final</version> </dependency>生成keystore.jks文件 keytool -genkeypair -alias your_alias -keyalg RSA -keysto…...
Jetpack:007-Kotlin中的Button
文章目录 1. 概念介绍2. 使用方法2.1 Button2.2 IconButton2.3 ElevatedButton2.4 OutlinedButton2.5 TextButton2.6 FloatingActionButton 3. 示例代码4. 内容总结 我们在上一章回中介绍了Jetpack中输入框相关的内容,本章回中将要介绍 Button。闲话休提࿰…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...
flow_controllers
关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...
