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

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

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

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

来自 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.mzph.cn/bicheng/6217.shtml

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

相关文章

预训练模型介绍

一、什么是GPT GPT 是由人工智能研究实验室 OpenAI 在2022年11月30日发布的全新聊天机器人模型, 一款人工智能技术驱动的自然语言处理工具 它能够通过学习和理解人类的语言来进行对话, 还能根据聊天的上下文进行互动,能完成撰写邮件、视频脚本、文案、翻译、代码等任务 二、 为…

【JVM】内存调优——内存泄漏、内存溢出

内存调优 什么是内存泄漏、内存泄漏&#xff1f; 内存泄漏&#xff1a;在Java中如果不再使用一个对象&#xff0c;但是该对象依然在GC ROOT的引用链上&#xff0c;这个对象就不会被垃圾回收器回收。内存溢出&#xff1a;内存的使用量超过了Java虚拟机可以分配的上限&#xff…

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

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

020、Python+fastapi,第一个Python项目走向第20步:ubuntu 24.04 docker 安装mysql8、redis(一)

系列文章 pythonvue3fastapiai 学习_浪淘沙jkp的博客-CSDN博客https://blog.csdn.net/jiangkp/category_12623996.html 前言 docker安装起来比较方便&#xff0c;不影响系统整体&#xff0c;和前面虚拟环境有异曲同工之妙&#xff0c;今天把老笔记本T400拿出来装了个ubuntu24…

Covalent Network(CQT)为 Arbitrum 生态提供 250 万美元的资助,以促进 Web3 的创新与发展

Covalent Network&#xff08;CQT&#xff09;作为 Web3 领先的“数据可用性”层&#xff0c;宣布将提供 250 万美元的资金以支持 Arbitrum 生态项目&#xff0c;包括 Arbitrum One、Nova、Orbit 或 Stylus。此举旨在通过提供资源和帮助&#xff0c;推动利用 Arbitrum 网络上 C…

【JVM】JMM 内存模型

JMM 概述 内存模型 java[内存模型](Java Memory Model) 和 [内存结构]JMM规定了在多线程下对共享数据的读写时&#xff0c;对数据的原子性 有序性 可见性的规则和保障。 原子性 原子性问题: i和i–不是原子性操作! 所以一个i指令会在执行过程中被另一个线程执行! 问题分…

牛客美团2024年春招第一场笔试【技术】解题

1.小美的平衡矩阵 小美拿到了一个n∗n的矩阵&#xff0c;其中每个元素是 0 或者 1。 小美认为一个矩形区域是完美的&#xff0c;当且仅当该区域内 0 的数量恰好等于 1 的数量。 现在&#xff0c;小美希望你回答有多少个i∗i的完美矩形区域。你需要回答1≤i≤n的所有答案 输出…

VSCode连接远程服务器时卡在审核(check)log.txt和pid.txt

诸神缄默不语-个人CSDN博文目录 VSCode就NM跟SB一样天天搁那儿更新&#xff0c;瞎JB更新&#xff0c;每次更新都要出一次兼容性问题&#xff0c;远程服务器不能连公网就上不去了&#xff0c;也没有显式提示&#xff0c;错误很明显就是在下载不了文件&#xff0c;用VSCode内置的…

Linux的有关权限的学习

1.认识权限在Linux中的表示 在Linux中&#xff0c;一切皆文件&#xff0c;而每个文件都会有其相对应的操作权限。那么&#xff0c;我们该怎么来认识他们呢&#xff1f; 首先我们可以看到&#xff0c;在每个test文件的前面都会有一个-rw-r--r--这个字符&#xff0c;而这个字符&…

ServiceNow 研究:通过RAG减少结构化输出中的幻觉

论文地址&#xff1a;https://arxiv.org/pdf/2404.08189 原文地址&#xff1a;rag-hallucination-structure-research-by-servicenow 在灾难性遗忘和模型漂移中&#xff0c;幻觉仍然是一个挑战。 2024 年 4 月 18 日 灾难性遗忘&#xff1a; 这是在序列学习或连续学习环境中出现…

Pycharm远程环境开发(保姆级详细步骤)

使用远程机器的python环境 同步一下linxu和window的文件 可以从远端下载到本地(如下图所示)&#xff0c;也可以从本地上传到linux&#xff0c;在左侧的目录里右键选择你所需要的上传文件点击deployment然后upload就行

k8s 资源组版本支持列表

1 kubernetes的资源注册表 kube-apiserver组件启动后的第一件事情是将Kubernetes所支持的资源注册到Scheme资源注册表中,这样后面启动的逻辑才能够从Scheme资源注册表中拿到资源信息并启动和运行API服务。 kube-apiserver资源注册分为两步:第1步,初始化Scheme资源注册表;…

Linux进程——Linux下常见的进程状态

前言&#xff1a;在进程学习这一块&#xff0c;我们主要学习的就是PCB这个进程控制块&#xff0c;而PBC就是用来描述进程的结构体&#xff0c;而进程状态就是PCB结构体中的一个变量。 本篇主要内容&#xff1a; 操作系统中的进程状态Linux下的进程状态 在开始之前&#xff0c;我…

AI学习指南-人工智能概述

欢迎来到人工智能的奇妙世界&#xff01;如果你是初学者&#xff0c;那么你来对地方了。今天&#xff0c;我们将一起探索人工智能&#xff08;AI&#xff09;的基本概念&#xff0c;看看它是如何分类的&#xff0c;它的应用有哪些&#xff0c;以及未来可能的发展方向。准备好了…

每日一题(力扣740):删除并获得点数--dp+思维

其实跟打家劫舍没啥区别 排序去重之后去考虑当前位置和前两个位置之间的关系即可&#xff0c;具体见代码&#xff1a; class Solution { public:int deleteAndEarn(vector<int>& nums) {int n nums.size();if (n 1) return nums[0];unordered_map<int, int>…

Java项目:基于SSM框架实现的在线医疗服务系统(ssm+B/S架构+源码+数据库+毕业论文+开题报告)

一、项目简介 本项目是一套基于SSM框架实现的在线医疗服务系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功能…

MES(制造执行系统)与PDCA循环,斩不断理还乱的关系。

MES系统算是B端系统中比较复杂的一种&#xff0c;这与我国制造业标准化程度较低有一定的关联&#xff0c;MES的存在就是要更好执行PDCA循环&#xff0c;二者关联是千丝万缕的&#xff0c;B系统提升专家借此为大家分享一下。 一、什么是PDCA PDCA&#xff08;Plan-Do-Check-Ac…

【系统架构师】-选择题(十一)

1、紧耦合多机系统一般通过&#xff08;共享内存&#xff09;实现多机间的通信。对称多处理器结构&#xff08;SMP&#xff09;属于&#xff08; 紧耦合&#xff09;系统。 松耦合多机系统又称间接耦合系统,—般是通过通道或通信线路实现计算机间的互连。 2、采用微内核的OS结构…

SQLite如何处理CSV 虚拟表(三十七)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite的DBSTAT 虚拟表&#xff08;三十六&#xff09; 下一篇:SQLite的扩展函数Carray()表值函数(三十八) ​ RFC4180格式是一种文本文件格式&#xff0c;被用于表格数据间的交互&#xff0c;也可将表格数据转化…

项目管理-项目范围管理1/2

1.项目范围管理-知识框架 2.范围管理-6个过程 项目范围管理&#xff0c;过程 6个&#xff0c;包括“规收定 创确控”&#xff1a; 规划范围管理收集需求定义范围创建WBS确认范围控制范围 2.1规划范围管理 &#xff08;1&#xff09;主要内容 4-3-2 &#xff08;2&#xf…