docker系列9:容器卷挂载(下)

news2024/12/23 17:55:37

 传送门

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!":

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

由此可以做一个更大范围的推断,一个卷就算同时被多个容器挂载,也不会因为容器的状态而影响文件内容!

也就是意味着同一个服务多个部署副本可以挂载同一个卷!

来自 Volumes | Docker Docs

在这个在官方的例子中是做为高可用的一种方式:

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

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

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

相关文章

基于yolov8的苹果腐败检测系统,系统既支持图像检测,也支持视频和摄像实时检测(pytorch框架)【python源码+UI界面+功能源码详解】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 基于yolov8的苹果腐败检测系统&#xff0c;系统既支持图像检测&#xff0c;也支持视频和摄像实时检测_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov8的苹果腐败检测系统是在pytorc…

QT:label标签/进度条的使用

文章目录 设置不同格式的文本显示图片文本对齐/自动换行/缩进/边距LCDNumber倒计时 ProgressBar进度条 设置不同格式的文本 在文本格式中&#xff0c;存在富文本&#xff0c;makedown格式的文本&#xff0c;还有纯文本&#xff0c;下面就依据这三个进行举例 #include "w…

MySQL-SQL执行流程及原理

1、SQL执行流程 2、查询流程 查询缓存&#xff1a; MySQL服务器如果在查询缓存中存在该SQL语句&#xff0c;就直接将结果返回给客户端&#xff0c;没有就进入解析器解析阶段。&#xff08;MySQL 8.0 删除该功能&#xff09;解析器&#xff1a;在解析器中对SQL语句进行语法及语…

G1 - 生成对抗网络(GAN)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 理论知识生成器判别器基本原理 环境步骤环境设置数据准备模型设计模型训练模型效果展示 总结与心得体会 理论知识 生成对抗网络&#xff08;Generative …

Docker 加持的安卓手机:随身携带的知识库(一)

这篇文章聊聊&#xff0c;如何借助 Docker &#xff0c;尝试将一台五年前的手机&#xff0c;构建成一个随身携带的、本地化的知识库。 写在前面 本篇文章&#xff0c;我使用了一台去年从二手平台购入的五年前的手机&#xff0c;K20 Pro。 为了让它能够稳定持续的运行&#xf…

如何让 PDF 书签从杂乱无序整洁到明丽清新

1、拉取书签&#xff08;详细步骤看文末扩展阅读&#xff09; 原状态 —— 杂乱无序 自动整理后的状态 —— 错落有致&#xff0c;但摩肩接踵 2、开始整理 全选自动整理后的书签&#xff0c;剪切 访问中英混排排版优化 - 油条工具箱 https://utils.fun/cn-en 1 粘贴 → 2 …

SwiftUI 5.0(iOS 17.0,macOS 14.0+)新 Inspector 辅助视图之趣味漫谈

概览 在 SwiftUI 开发中,苹果为我们提供了多种辅助视图用来显示额外信息从而极大丰富了应用的表现力,比如:Alert、Sheet、ContextMenu 等等。 从 SwiftUI 5.0(iOS 17+)开始, 又增加了一种全新的辅助视图:Inspector。 在本篇博文中,您将学到如下内容: 概览1. Inspe…

自定义拦截器jwt登录校验接口模拟账号登录

五一闲在宿舍&#xff0c;本来想写一个自己的简易博客网站&#xff0c;发现vue基础太差&#xff0c;做不出来页面效果于是便放弃&#xff0c;但也没有完全放弃。于是我分析了一下简易博客的后端实现流程&#xff0c;除了最基本的crud以外&#xff0c;在自己目前的对接口的分析中…

MATLAB 微积分

MATLAB 微积分 MATLAB提供了多种方法来解决微分和积分问题&#xff0c;求解任意程度的微分方程式以及计算极限。最重要的是&#xff0c;您可以轻松求解复杂函数的图&#xff0c;并通过求解原始函数及其导数来检查图上的最大值&#xff0c;最小值和其他文具点。 本章将讨论微…

Linux专栏08:Linux基本指令之压缩解压缩指令

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Linux专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Linux基本指令之压缩解压缩指令 编号&#xff1a;08 文章目录 Linu…

在2-3-4树上实现连接与分裂操作的算法与实现

在2-3-4树上实现连接与分裂操作的算法与实现 引言1. 维护2-3-4树结点的高度属性伪代码示例 2. 实现连接操作伪代码示例 3. 证明简单路径p的划分性质4. 实现分裂操作伪代码示例 C代码示例结论 引言 2-3-4树是一种平衡搜索树&#xff0c;它保证了树的高度被有效控制&#xff0c;…

python实验一 简单的递归应用

实验一 实验题目 1、兔子繁殖问题(Fibonacci’s Rabbits)。一对兔子从出生后第三个月开始&#xff0c;每月生一对小兔子。小兔子到第三个月又开始生下一代小兔子。假若兔子只生不死&#xff0c;一月份抱来一对刚出生的小兔子&#xff0c;问一年中每个月各有多少只兔子。 &…

uniapp 应用闪退、崩溃异常日志捕获插件(可对接网络上报)插件 Ba-Crash

应用闪退、崩溃异常日志捕获插件&#xff08;可对接网络上报&#xff09; Ba-Crash 简介&#xff08;下载地址&#xff09; Ba-Crash 是一款uniapp应用闪退、崩溃异常日志捕获插件&#xff0c;支持对接网络上报、设置提示等等&#xff0c;方便对一些远程问题、原生问题进行分…

【云原生】Docker 实践(五):搭建私有镜像 Harbor

【Docker 实践】系列共包含以下几篇文章&#xff1a; Docker 实践&#xff08;一&#xff09;&#xff1a;在 Docker 中部署第一个应用Docker 实践&#xff08;二&#xff09;&#xff1a;什么是 Docker 的镜像Docker 实践&#xff08;三&#xff09;&#xff1a;使用 Dockerf…

基于node.js+css+html+mysql博客系统

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、Php、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

C#描述-计算机视觉OpenCV(4):图像分割

C#描述-计算机视觉OpenCV&#xff08;4&#xff09;&#xff1a;图像分割 前言用 GrabCut 算法分割图像实例展示 前言 本文中如果有什么没说明的地方&#xff0c;大概率在前文中描述过了。 C#描述-计算机视觉OpenCV&#xff08;1&#xff09;&#xff1a;基础操作 C#描述-计算…

第十五届蓝桥杯省赛大学B组(c++)

很幸运拿了辽宁赛区的省一,进入6月1号的国赛啦... 这篇文章主要对第十五届省赛大学B组(C)进行一次完整的复盘,这次省赛2道填空题6道编程题: A.握手问题 把握手情景看成矩阵: 粉色部分是7个不能互相捂手的情况 由于每个人只能和其他人捂手, 所以黑色情况是不算的 1和2握手2和…

快速掌握Element-Ul,构建高效网页应用【AI写作】

首先&#xff0c;这篇文章是基于笔尖AI写作进行文章创作的&#xff0c;喜欢的宝子&#xff0c;也可以去体验下&#xff0c;解放双手&#xff0c;上班直接摸鱼~ 按照惯例&#xff0c;先介绍下这款笔尖AI写作&#xff0c;宝子也可以直接下滑跳过看正文~ 笔尖Ai写作&#xff1a;…

JavaScript继承的方法和优缺点

原型链继承 让一个构造函数的原型是另一个类型的实例&#xff0c;那么这个构造函数new出来的实例就具有该实例的属性。 优点&#xff1a; 写法方便简洁&#xff0c;容易理解。 缺点&#xff1a; 在父类型构造函数中定义的引用类型值的实例属性&#xff0c;会在子类型原型上…

逻辑回归实战 -- 是否通过考试

http://链接: https://pan.baidu.com/s/1-uy-69rkc4WjMpPj6iRDDw 提取码: e69y 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 数据集下载链接 这是个二分类问题&#xff0c;通过x1,x2两个指标得出是否通过考试的结论。 逻辑回归的激活函数是sigmoid函数&…