docker挂载卷和宿主机的文件夹有何区别

挂载卷(Mounting Volume)在 Docker 中是一种将数据持久化的方法,它允许将一个目录或文件从宿主机挂载到容器内部。挂载卷可以是以下几种类型:

  1. 数据卷(Data Volume)

    • 数据卷是 Docker 的一个特性,它在 Docker 宿主机上存储数据,并且可以在容器之间共享和重用。数据卷独立于容器的生命周期,即使容器被删除,数据卷中的数据也不会丢失。
  2. 数据卷容器(Data Volume Container, DVC)

    • 数据卷容器是专门用于存储和管理数据卷的容器。它们可以作为数据卷的命名空间,使得数据卷的使用更加灵活。
  3. 绑定挂载(Bind Mount)

    • 绑定挂载是将宿主机的文件或目录挂载到容器内部的文件系统上。这种挂载方式允许容器访问宿主机上的文件系统,并且对挂载点的更改会反映到宿主机上。
  4. 临时文件系统(Tmpfs Mount)

    • 这种类型的挂载将容器内部的目录或文件挂载到内存中的临时文件系统。Tmpfs 挂载通常用于提高性能,因为内存读写速度比磁盘快,但数据在容器重启后会丢失。

挂载卷的使用场景包括:

  • 数据持久化:使用数据卷来存储需要持久化的数据,如数据库文件、应用配置等。
  • 数据共享:通过数据卷在多个容器之间共享数据。
  • 性能优化:使用 Tmpfs 挂载来提高读写速度。
  • 配置和密钥注入:通过绑定挂载将配置文件或密钥注入到容器中。

在 Docker Compose 中使用挂载卷的示例:

services:my_service:image: my_imagevolumes:- my_data_volume:/var/lib/my_service- /path/on/host:/path/in/containervolumes:my_data_volume:

my_data_volume 是一个命名的数据卷,my_data_volume就是名字,它不存在于宿主机中,只能通过docker volume命令看到,也就是只有容器才能访问,用于持久化服务的数据,相当于docker 开辟了一个特殊容器,这个容器只用来给别的容器当U盘。注意命名数据卷还需要全局声明,如最后一行。

/path/on/host:/path/in/container 是一个绑定挂载,将宿主机上的路径(/path/on/host)挂载到容器内部(/path/in/container),这样容器内部可以访问这个路径,但其实文件在宿主机上,类似于容器内和宿主机同步盘,可以单向传递密钥之类的只读文件,也可以作为双向的长期log文件夹。

Docker 挂载卷(Volumes)和宿主机的文件夹在使用上有一些关键的区别,这些区别主要体现在数据持久性、生命周期、可见性和使用场景上。以下是一些主要的区别:

  1. 生命周期

    • 挂载卷:Docker 卷的生命周期独立于容器,也独立于宿主机。即使容器被删除,卷中的数据仍然存在,直到显式地删除数据卷。
    • 宿主机文件夹:宿主机上的文件夹的生命周期依赖于宿主机的文件系统。
  2. 数据持久性

    • 挂载卷:用于数据持久化,卷中的数据在容器停止或删除后仍然由docker保留,容器重启或者升级不会会丢失数据,而且宿主机中无法操作挂载卷。
    • 宿主机文件夹:如果容器使用 bind mount 绑定宿主机上的文件夹,容器内的数据会反映到宿主机上,但宿主机上的文件夹删除后,容器内的数据也会丢失。
  3. 可见性

    • 挂载卷:仅 Docker 守护进程和容器可以访问卷,可以提供更好的数据隔离和安全性。
    • 宿主机文件夹:宿主机上的其他应用程序和用户也可以访问宿主机上的文件夹,或者是其他挂载了宿主机文件夹的容器,可能会带来安全风险。
  4. 管理方式

    • 挂载卷:可以通过 Docker 的 volume 命令进行管理,如 docker volume createdocker volume lsdocker volume rm 等。
    • 宿主机文件夹:作为宿主机文件系统的一部分,使用宿主机的文件管理工具进行管理。
  5. 使用场景

    • 挂载卷:适用于需要跨多个容器共享数据或持久化数据的场景。
    • 宿主机文件夹:适用于需要临时共享数据或容器需要访问宿主机特定文件的场景。
  6. 隔离性

    • 挂载卷:提供了一定程度的隔离,卷中的数据不会影响宿主机的其他部分。
    • 宿主机文件夹:与宿主机的文件系统直接相连,可能会受到宿主机上其他进程的影响。

举例:

1. 如果你需要密码文件才能让容器中的程序运行,但又不希望打包在容器镜像中,你可以让容器挂载宿主机的密码文件为只读。2. 如果你需要保存大量日志并宿主机中持久化保存或查询,那么可以挂载让容器挂载宿主机的某个文件,写入容器中的日志实际上是在宿主机中4. 如果你需要保存一些中间结果但容器被删除后也不丢失,同时不希望宿主机中的其他程序访问,那么保存在挂载卷中即可,它是docker单独管理并于宿主机隔离的docker u盘

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

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

相关文章

Linux常用命令(15)—grepsed命令(有相关截图)

写在前面: 最近在学习Linux命令,记录一下学习Linux常用命令的过程,方便以后复习。仅供参考,若有不当的地方,恳请指正。如果对你有帮助,欢迎点赞,关注,收藏,评论&#xf…

常见调试器介绍

目录 常见调试器 1.1 ST-Link 1.2 DAPLink 1.3 JLink 常见调试器 市面上有很多的调试器,下面是大家比较常见的一些调试器, 比如:ST-Link、DAPLink、JLink、Ulink等 1.1 ST-Link ST-Link是一种用于STM8及STM32系列单片机的调试器和下载…

在线预览多类型文件_全栈

目录 一、下载运行项目 二、项目功能 三、前端项目引用 四、文件预览样式更改 在做项目时经常用到在线预览文件,给大家介绍一个好用的在线预览文件项目。使用技术是后端Java,前端Freemarker模板。 FreeMarker 特别适应与 MVC 模式的 Web 应用&#x…

Python --- 如何修改Jupyter Notebook保存文件的路径?

如何修改Jupyter Notebook在本地保存文件的默认路径? 一直以来都比较喜欢jupter notebook,自从用了以后就爱上了。平时用的时候,因为大多都是临时调用,每次在界面里直接new一个新的file就开干。 曾经也想过我创建的这些python文件…

MyBatis 源码分析-- getMapper(获取Mapper)

前言: 前面我们从源码层面梳理了 SqlSessionFactory、SqlSession 的创建过程,本篇我们继续分析一下 Mapper 的的获取过程。 初识 MyBatis 【MyBatis 核心概念】 MyBatis 源码分析–SqlSessionFactory MyBatis 源码分析–获取SqlSession 案例代码&am…

【arm扩容】新硬盘挂载操作说明

背景: 未经过扩容的arm设备不满足移植大镜像的条件。 需求: 我们要对arm设备扩容,现在要将一个500G的硬盘挂进去。而且要按照老arm设备的挂法,保持相同的目录结构。配置这台机器。 下面老arm设备的硬盘挂载相关信息。 lsblk …

【已解决】如何为qt表格设置复选框单击事件

本博文源于笔者正在处理的表格复选框的事件,这里遇到的问题是:想要为qt表格中每一行复选框设置单击事件,一开始不知道如何处理,后面研究学习了一下,故记录此博文。 问题原因 想要为qt表格中每一行复选框设置单击事件…

SSRF(2)

Gopher协议的利用 gopher协议是ssrf利用中最强大的协议 gopher协议支持发出GET、POST请求: 可以先截获get请求包和post请求包,再构成符合gopher协议的请求。 默认端口为70,一般需发送到80端口 如果发起post请求,回车换行需要使用%0D%0A&…

Java编程小练习题目

题目: 你和相亲对象正在餐厅里约会。键盘录入两个整数,用来分别表示你和对象的衣服的时髦度。(手动录入0-10之间的整数,不能录入其他的)。如果你的时髦度大于你对象的时髦度,相亲就成功,打印输出…

消息队列-概述-JMS和AMQP

JMS和AMQP JMS是什么 JMS(JAVA Message Service,java 消息服务)是 Java 的消息服务,JMS 的客户端之间可以通过 JMS 服务进行异步的消息传输。JMS(JAVA Message Service,Java 消息服务)API 是一个消息服务…

1950 Springboot汽修技能点评系统idea开发mysql数据库APP应用java编程计算机网页源码maven项目

一、源码特点 springboot 汽修技能点评系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统 具有完整的源代码和数据库&…

N32G031 I2C使用说明

目录 功能说明 使用指导 应用场景 总结 N32G031微控制器的I2C(Inter-Integrated Circuit)输出功能是一个重要的数字通信接口,用于与其他设备进行数据交换。以下是关于N32G031 I2C输出功能的完整说明和使用指导: 功能说明 接…

CGFloat转NSString保持原有的精度,末尾不添加0

问题阐述: 我们进行CGFloat转NSString可能会遇到一个问题 例如有一个CGFloat的值为2.1,转化成NSString后显示2.1000... 解决办法: 方法一: 如何解决呢,可以使用%g格式符,可以保证传入的不管是2还是2.1…

了解预防中间人攻击

什么是中间人(MITM)攻击? 中间人(MITM)攻击是一种网络安全威胁,其中攻击者设法在两个通信实体之间插入自己,从而能够拦截、篡改或转发这两个实体之间的通信。由于攻击者能够同时与双方进行通信…

提高开关电源效率一般做法

提高开关电源效率一般做法 开关电源的功耗包括由半导体开关、磁性元件和布线等的寄生电阻所产生的固定损耗以及进行开关操作时的开关损耗。对于固定损耗,由于它主要取决于元件自身的特性,因此需要通过元件技术的改进来予以抑制。在磁性元件方面,对于兼顾了集肤效应和…

第12天:前端集成与交互

第12天:前端集成与交互 目标 将前端框架与Django后端集成,实现前后端分离。 任务概览 选择一个前端框架并创建基础页面。使用AJAX或Fetch API与后端API交互。 详细步骤 1. 选择前端框架 选择一个适合项目的前端框架,如React、Vue.js或…

Google Adsense----Wordpress插入谷歌广告

1.搭建个人博客,绑定谷歌search consol,注册adsense 详细可以参考这个视频b站视频 2.将个人博客网站关联到Adsense 在adsense里新加网站,输入你的博客网址,双击网站 将这段代码复制到header.php的里面 在wordpress仪表盘的外观-主题文件编辑器,找到header.php将代码复制,…

如何在 Ubuntu 14.04 上使用 Iptables 实现基本防火墙模板

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 实施防火墙是保护服务器的重要步骤。其中很大一部分是决定强制执行对网络流量的限制的个别规则和策略。像 iptables 这样的防火墙…

HTTP/2 的 ALPN(应用层协议协商)

文章目录 HTTP/2 的 ALPN(应用层协议协商)详解什么是 ALPN?ALPN 的工作原理为什么使用 ALPN?ALPN 的优势示例 HTTP/2 的 ALPN(应用层协议协商)详解 什么是 ALPN? ALPN(Application…

全网最全!25届最近5年上海理工大学自动化考研院校分析

上海理工大学 目录 一、学校学院专业简介 二、考试科目指定教材 三、近5年考研分数情况 四、近5年招生录取情况 五、最新一年分数段图表 六、历年真题PDF 七、初试大纲复试大纲 八、学费&奖学金&就业方向 一、学校学院专业简介 二、考试科目指定教材 1、考试…