docker系列9:容器卷挂载(下)
传送门
docker系列1:docker安装
docker系列2:阿里云镜像加速器
docker系列3:docker镜像基本命令
docker系列4:docker容器基本命令
docker系列5:docker安装nginx
docker系列6:docker安装redis
docker系列7:docker安装ES
docker系列8:容器卷挂载(上)
接着容器卷挂载说起
容器卷管理
前面重点都在讨论容器卷的挂载概念以及如何挂载。容器卷的挂载也同"磁盘挂载"一样,既可以挂载也可以卸载:
umount [-ahnrvV][-t <文件系统类型>][文件系统]
那么容器卷也是一样可以卸载的:
# my-vol为卷名称
docker volume rm my-vol
下面还是以redis为例来验证一把!
容器卷的卸载
创建容器卷
除了前面介绍的启动时自动挂载,还可以手动创建容器卷:
# my-vol为卷名称docker volume create my-vol
执行一下上面的命令,并查看对应的卷列表:
然后具名挂载到redis上面去:
查看绑定关系:docker inspect test_redis
"Mounts": [{"Type": "volume","Name": "f81556f7b28978699ef93e996db714980eb6519be7fea5a5acfa4b2dfcc3fec2","Source": "/var/lib/docker/volumes/f81556f7b28978699ef93e996db714980eb6519be7fea5a5acfa4b2dfcc3fec2/_data","Destination": "/data","Driver": "local","Mode": "","RW": true,"Propagation": ""},{"Type": "volume","Name": "my-vol","Source": "/var/lib/docker/volumes/my-vol/_data","Destination": "/usr/etc/redis/data","Driver": "local","Mode": "z","RW": true,"Propagation": ""}]
那这个时候我们来卸载一下这个绑定关系:docker volume rm my-vol
发现不允许直接删除,那可能会怀疑:如果有正在容器运行的容器使用它就不能直接删除?
那先把这个容器停掉再来删除一下试试:
也不行。那只能把容器删除了再来试试:
成功了!如果有容器挂载了卷,不论容器处于什么状态都不能被直接删除!
卷挂载的方式
不知道你有没有发现一个问题,通过手动创建卷并挂载到容器上。那么这时候在卷目录下创建的文件去哪儿了呢,或者说具体存储在物理机的哪个位置?
先在容器里面创建一个文件my-vol.txt:
现在到宿主机里找一个这个文件my-vol.txt:
而这个目录就是前面查看redis的信息里面挂载对应的目录:
"Mounts": [{"Type": "volume","Name": "f81556f7b28978699ef93e996db714980eb6519be7fea5a5acfa4b2dfcc3fec2","Source": "/var/lib/docker/volumes/f81556f7b28978699ef93e996db714980eb6519be7fea5a5acfa4b2dfcc3fec2/_data","Destination": "/data","Driver": "local","Mode": "","RW": true,"Propagation": ""},{"Type": "volume","Name": "my-vol","Source": "/var/lib/docker/volumes/my-vol/_data","Destination": "/usr/etc/redis/data","Driver": "local","Mode": "z","RW": true,"Propagation": ""}]
由此发现容器卷下面的文件都在宿主机上面!
回顾卷挂载的命令:-v 宿主机路径:容器内路径
- 如果是宿主机命令是以"/"开头的绝对路径,就是指定路径挂载,而卷名称就是docker自动生成的,也是匿名挂载的一种特殊形式
- 如果是手动指定了卷名称,这种就是具名挂载
- 还有一种就是不指定宿主机路径,只写了容器内路径,docker也会自动生成卷名称,这种就是匿名挂载
容器卷与容器运行状态的关系
通过上面讨论提到了2个结论:
- 如果有容器挂载了卷,不论容器处于什么状态都不能被直接删除!
- 容器卷下面的文件都在"宿主机"上面!
而对于第2点的"宿主机"要视情况而定,如果是其它外设比如NFS这种,肯定就是网络文件系统里面了。那么如果挂载的卷在运行过程中,由容器产生了很多系统文件(比如服务日志、用户上传的业务文件)会不会由于容器的销毁而丢失呢?
稍微思考一下就会得出一个假设,容器卷内文件与容器的运行状态没有关系!就是不管容器是运行、停止、删除都不会对已有文件产生影响,否则不是违背了持久化的初衷么!
可以在刚才的例子里面验证一把,在my-vol.txt文件里面写入一个"Hello World!":

然后停止容器,在宿主机查看一下该文件内容:

由此可以做一个更大范围的推断,一个卷就算同时被多个容器挂载,也不会因为容器的状态而影响文件内容!
也就是意味着同一个服务多个部署副本可以挂载同一个卷!
在这个在官方的例子中是做为高可用的一种方式:
There are several ways to achieve this when developing your applications. One is to add logic to your application to store files on a cloud object storage system like Amazon S3. Another is to create volumes with a driver that supports writing files to an external storage system like NFS or Amazon S3.
---------------------------------------------- 以下为机译 -----------------------------------------------------
在开发应用程序时,有几种方法可以实现这一点。一种是向应用程序添加逻辑,将文件存储在类似AmazonS3的云对象存储系统上。另一种方法是使用支持将文件写入NFS或AmazonS3等外部存储系统的驱动程序创建卷。
容器卷的读写控制
由于容器卷可以同时被多个容器挂载,有些情况下可能对文件写入就会有区别了:比如控制节点可以写也可以读,从节点可能就不能写了。为此docker也允许在挂载的时候指定容器的读写权限:
回顾卷挂载的命令:-v 宿主机路径:容器内路径:权限
- 在容器内路径后面,接着指定权限
- r-代表读,w-代表写,ro-代表只读(read only),rw-代表可读可写
还是以前面的例子来验证一把,再运行一个容器test_redis2并挂载my-vol卷,指定权限为ro:

现在往my-vol.txt里面写入数据:

通过docker inspect来查看一下的信息:

关于-v与--mount的选择
卷挂载除了通过-v来使用以外还可以通过--mount方式。比如上面的-v my-vol:/usr/etc/redis/data可以替换为--mount source=my-vol,target=/usr/etc/redis/data:
docker run -it --name=test_redis3 --mount source=my-vol,target=/usr/etc/redis/data -v /root/redis/redis.conf:/usr/etc/redis/redis.conf -d redis
通过docker inspect来查看一下的信息:
一样的挂载成功!
关于-v与--mount的选择可以参考Choose the -v or --mount flag
相关文章:
docker系列9:容器卷挂载(下)
传送门 docker系列1:docker安装 docker系列2:阿里云镜像加速器 docker系列3:docker镜像基本命令 docker系列4:docker容器基本命令 docker系列5:docker安装nginx docker系列6:docker安装redis docker系…...
QT ERROR: Unknown module(s) in QT: xlsx怎么办
现象描述 QT编译c代码的时候,报这种QT ERROR: Unknown module(s) in QT: xlsx,应该如何解决? 这里,我简单记录一下自己的解决问题过程。有可能,对遇到同样的问题的你,也有所帮助 第一步 检查perl是否安装…...
npm install 卡在reify:rxjs: timing reifyNode的解决办法
今天要逆向跑一个electron,但是npm install一直卡在 reify:element-plus: timing reifyNode:node_modules/lodash Completed in 6664ms这里一动不动,一番研究之后发现可能跟用的镜像有关系,我原本是官方镜像,总感觉第三方镜像有一…...
VScode 无法连接云服务器
试了很多方法,比如更换VScode版本,卸载重装,删除配置文件 重启电脑,都无法成功。最后重置电脑后才连接上,但是重启服务器后又出现该问题。 方法一:修改环境 方法二:把vscode卸载干净重下...
Kafka 面试题(二)
1. 简述Kafka 的工作流程 ? Kafka的工作流程涉及多个关键组件和步骤,确保了消息的可靠传输和处理。以下是Kafka工作流程的简要概述: 生产者发布消息:生产者(Producer)是Kafka工作流程的起点,它…...
Spring Cloud Kubernetes 本地开发环境调试
一、Spring Cloud Kubernetes 本地开发环境调试 上面文章使用 Spring Cloud Kubernetes 在 k8s 环境中实现了服务注册发现、服务动态配置,但是需要放在 k8s 环境中才能正常使用,在本地开发环境中可能没有 k8s 环境,如何本地开发调试呢&#…...
基于二维CS-SCHT变换和扩频方法的彩色图像水印嵌入和提取算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ............................................................. % figure; % subplot(121);…...
设计模式——行为型模式——策略模式(含实际业务使用示例、可拷贝直接运行)
目录 策略模式 定义 组成和UML图 代码示例 实际业务场景下策略模式的使用 策略模式优缺点 使用场景 JDK中使用策略模式示例 参考文档 策略模式 定义 策略模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化…...
Rust:foo(x)、foo(x),还是foo(x.clone())?
一、一个实际问题 用一个线性代数库的求逆矩阵函数时,让我很不爽,我必须按照下面的形式写调用代码: ...if let Some(inv_mat) try_inverse(mat.clone()) {...}...注意 try_inverse 函数的参数传递形式,函数参数是 mat.clone() 而…...
「JavaEE」多线程案例1:单例模式阻塞队列
🎇个人主页:Ice_Sugar_7 🎇所属专栏:JavaEE 🎇欢迎点赞收藏加关注哦! 多线程案例分析 🍉单例模式🍌饿汉模式🍌懒汉模式🍌指令重排序 🍉阻塞队列&a…...
pdf2htmlEX:pdf 转 html,医学指南精细化处理第一步
pdf2htmlEX:pdf 转 html,医学指南精细化处理第一步 单文件转换多文件转换 代码:https://github.com/coolwanglu/pdf2htmlEX 拉取pdf2htmlEX 的 Docker: docker pull bwits/pdf2htmlex # 拉取 bwits/pdf2htmlex不用进入容器&…...
【webrtc】MessageHandler 6: 基于线程的消息处理:StunRequest实现包发送和超时重传
G:\CDN\rtcCli\m98\src\p2p\base\stun_request.cc使用OnMessage 实现包的发送和包的超时重传StunRequest 一个StunRequest 代表是一个独立的请求的发送STUN消息 要不是发送前构造好的,要不就是按照需要构建的使用StunRequestManager: 每一个STUNRequest 携带一个交互id 写入m…...
《Python编程从入门到实践》day22
# 昨日知识点回顾 方法重构、驾驶飞船左右移动、全屏显示 飞船不移动解决,问题出在移动变量x更新 # Ship.pysnipdef update(self):"""根据移动标志调整飞船的位置"""# 更新飞船而不是rect对象的x值# 如果飞船右移的标志和飞船外接…...
介绍 ffmpeg.dll 文件以及ffmpeg.dll丢失怎么办的五种修复方法
ffmpeg.dll 是一个动态链接库文件,属于 FFmpeg运行库。它在计算机上扮演着非常重要的角色,因为它提供了许多应用程序和操作系统所需的功能和组件。当 ffmpeg.dll 文件丢失或损坏时,可能会导致程序无法正常运行,甚至系统崩溃。下面…...
AI换脸原理(6)——人脸分割介绍
一、介绍 人脸分割是计算机视觉和图像处理领域的一项重要任务,它主要涉及到将图像中的人脸区域从背景或其他非人脸区域中分离出来。这一技术具有广泛的应用场景,如人脸识别、图像编辑、虚拟背景替换等。 在计算机视觉(CV)领域,经典的分割技术可以主要划分为三类:语义分…...
【C++并发编程】(二)线程的创建、分离和连接
文章目录 (二)线程的创建、分离和链接创建线程:示例线程的分离(detach)和连接(join) (二)线程的创建、分离和链接 创建线程:示例 线程(Thread&a…...
利用生成式AI重新构想ITSM的未来
对注入 AI 的生成式 ITSM 的需求,在 2023 年 Gartner AI 炒作周期中,生成式 AI 达到预期值达到顶峰后,三分之二的企业已经将生成式 AI 集成到其流程中。 你问为什么这种追求?在预定义算法的驱动下,IT 服务交付和管理中…...
完美解决AttributeError: module ‘backend_interagg‘ has no attribute ‘FigureCanvas‘
遇到这种错误通常是因为matplotlib的后端配置问题。在某些环境中,尤其是在某些特定的IDE或Jupyter Notebook环境中,可能会因为后端配置不正确而导致错误。错误信息提示 module backend_interagg has no attribute FigureCanvas 意味着当前matplotlib的后…...
CMakeLists.txt语法规则:条件判断中表达式说明一
一. 简介 前面学习了 CMakeLists.txt语法中的 部分常用命令,常量变量,双引号的使用。 前面一篇文章也简单了解了 CMakeLists.txt语法中的条件判断,文章如下: CMakeLists.txt语法规则:条件判断说明一-CSDN博客 本文…...
《QT实用小工具·五十三》会跑走的按钮
1、概述 源码放在文章末尾 该项目实现了会逃跑的按钮: 两个按钮,一个为普通按钮,另一个为会跑走的按钮 鼠标移到上面时,立刻跑掉 针对鼠标、键盘、触屏进行优化 随机交换两个按钮的文字、偶尔钻到另一个按钮下面、鼠标移开自…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
《Docker》架构
文章目录 架构模式单机架构应用数据分离架构应用服务器集群架构读写分离/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构什么是容器,docker,镜像,k8s 架构模式 单机架构 单机架构其实就是应用服务器和单机服务器都部署在同一…...
热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...
电脑桌面太单调,用Python写一个桌面小宠物应用。
下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡,可以响应鼠标点击,并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...
无需布线的革命:电力载波技术赋能楼宇自控系统-亚川科技
无需布线的革命:电力载波技术赋能楼宇自控系统 在楼宇自动化领域,传统控制系统依赖复杂的专用通信线路,不仅施工成本高昂,后期维护和扩展也极为不便。电力载波技术(PLC)的突破性应用,彻底改变了…...
