玩转Docker(六):数据挂载与共享

文章目录

  • 〇、Docker的两种存放数据的资源
    • 1.Storage Driver
    • 2.Data Volume
    • 3.使用场景
  • 一、使用Data Volume
    • 1.`-v <host_path>:<container_path>`
    • 2.`-v <container_path>`挂载匿名卷
  • 二、数据共享
    • 1.容器和主机之间共享
    • 2.容器之间共享
      • (1)方法一:-v非匿名挂载
      • (2)方法二:Volume Container

〇、Docker的两种存放数据的资源

1.Storage Driver

存储驱动(storage driver)是Docker中负责管理容器镜像和容器数据的组件。它负责将容器的文件系统、元数据和存储卷等数据存储到宿主机的文件系统中。Docker支持多种存储驱动,每种存储驱动都有自己的特点和适用场景。

常见的存储驱动包括:

  1. overlay2:这是Docker默认的存储驱动,它支持联合文件系统,并提供了快速的容器启动和高效的存储利用率。

  2. aufs:这是早期的存储驱动,提供了类似overlay2的功能,但在一些方面性能不如overlay2。

  3. btrfs:这是基于Btrfs文件系统的存储驱动,提供了快速的容器启动和快照功能。

  4. zfs:这是基于ZFS文件系统的存储驱动,提供了高级的数据管理和快照功能。

2.Data Volume

数据卷(Data Volume)是Docker中用于持久化存储数据的机制。它允许容器将数据存储到宿主机的文件系统中,并且可以在容器之间共享数据。数据卷可以用于存储应用程序的配置文件、日志、数据库文件等持久化数据。

数据卷有以下特点:

  1. 持久化存储:数据卷中的数据在容器删除后仍然保留在宿主机上,因此可以实现数据的持久化存储。

  2. 容器间共享:多个容器可以共享同一个数据卷,从而实现容器之间的数据共享。

  3. 宿主机文件系统:数据卷实际上是宿主机文件系统中的一个目录,因此可以利用宿主机文件系统的特性来管理数据。

  4. 数据卷驱动:Docker支持多种数据卷驱动,用户可以根据需求选择合适的数据卷驱动来管理数据卷。

综上所述,存储驱动和数据卷是Docker中重要的存储相关概念。存储驱动负责管理容器镜像和容器数据的存储,而数据卷则提供了持久化存储和容器间数据共享的机制。这些概念对于理解Docker中的数据管理和持久化存储非常重要。

3.使用场景

在Docker中,存储通常用于以下情况:

  1. 持久化数据:当您需要容器中的数据在容器重启或重新部署后仍然保持不变时,您可以使用Docker的存储功能。这包括数据库文件、日志文件、配置文件等需要持久保存的数据。

  2. 数据共享:如果多个容器需要访问相同的数据,您可以使用Docker的存储功能来创建共享的数据卷,从而使得多个容器可以共享相同的数据。

  3. 数据备份:通过Docker的存储功能,您可以轻松地对容器中的数据进行备份,以防止数据丢失或损坏。

  4. 数据管理:使用Docker的存储功能可以更好地管理容器中的数据,包括数据的版本控制、快照、迁移等操作。

存储驱动和数据卷是Docker中的两种不同的存储策略,它们在使用场景上有一些区别:

  • 存储驱动的使用场景:
  1. 存储驱动主要用于管理容器镜像和容器的文件系统,它负责将容器的文件系统、元数据和存储卷等数据存储到宿主机的文件系统中。因此,存储驱动的主要使用场景是管理容器的文件系统和镜像的存储,以及提供容器的启动和运行所需的文件系统支持。

  2. 存储驱动的选择通常取决于性能、稳定性和特定的文件系统需求。不同的存储驱动具有不同的特点和适用场景,例如overlay2适合快速容器启动和高效的存储利用率,而zfs提供了高级的数据管理和快照功能。

  • 数据卷的使用场景:
  1. 数据卷主要用于容器中持久化存储数据,它允许容器将数据存储到宿主机的文件系统中,并且可以在容器之间共享数据。因此,数据卷的主要使用场景是实现容器中的持久化存储和容器间的数据共享。

  2. 数据卷可以用于存储应用程序的配置文件、日志、数据库文件等持久化数据,以及实现容器间的数据共享。它提供了一种灵活的机制,使得容器可以在不同的环境中共享和管理数据。

综上所述,存储驱动和数据卷在使用场景上有一些区别。存储驱动主要用于管理容器的文件系统和镜像的存储,而数据卷主要用于实现容器中的持久化存储和容器间的数据共享。根据具体的需求和场景,用户可以选择合适的存储策略来管理容器的存储和数据。

一、使用Data Volume

1.-v <host_path>:<container_path>

在Docker中,-v参数用于将宿主机的目录或文件挂载到容器中,从而实现宿主机和容器之间的文件共享。这个参数的基本语法是-v <host_path>:<container_path>,其中<host_path>是宿主机上的路径,<container_path>是容器中的路径。

例如,如果你想将宿主机上的/opt/data目录挂载到容器中的/data目录,可以使用以下命令:

docker run -v /opt/data:/data your_image

这将会把宿主机上的/opt/data目录挂载到运行的容器中的/data目录。这样,容器中对/data目录的操作实际上会直接影响到宿主机上的/opt/data目录,实现了宿主机和容器之间的文件共享。

  • 指定权限:

默认情况下,-v挂载到容器中的目录在容器中是可读可写,可指定为只读。

docker run -v /opt/data:/data your_image:ro
  • 挂载单个文件:

上面演示的都是挂载目录,其实还可以挂载单个文件。

docker run -v /opt/data/file_source:/data your_image/file_container

使用单一文件有一点要注意:host中的源文件必须要存在,不然会当作一个新目录bind mount给容器。

2.-v <container_path>挂载匿名卷

在Docker中,如果使用-v参数时不指定源 (可移植性强),即只指定目标路径,那么Docker会在宿主机的文件系统中创建一个匿名卷,并将其挂载到容器中指定的路径上。这样做的效果是在容器中创建一个匿名卷,用于存储容器内产生的数据。

例如,如果使用以下命令:

docker run -v /data ...

这将会在宿主机的文件系统中创建一个匿名卷,并将其挂载到容器中的/data路径上。这个匿名卷的具体路径会由Docker自动生成,并且通常是在/var/lib/docker/volumes/目录下。

  • 下面来演示一下:

启动一个httpd容器,并挂载匿名卷data_share

docker run -d -p 80:80 -v data_share httpd

通过docker inspect命令看一下具体的挂载信息

docker inspect 容器id

在这里插入图片描述

注意:挂载匿名卷不能指定权限(均为读写权限),也不能挂载单个文件(只能是目录)。

二、数据共享

1.容器和主机之间共享

docker cp可以在容器和host之间复制数据,当然我们也可以直接通过Linux的cp命令复制到 /var/lib/docker/volumes/xxx。

docker cp命令用于在容器和宿主机之间复制文件或目录。其基本语法如下:

docker cp <containerId>:<src_path> <host_path>
docker cp <host_path> <containerId>:<dest_path>

其中,<containerId>是容器的ID或名称,<src_path>是容器内的源路径,<host_path>是宿主机的目标路径,<dest_path>是容器内的目标路径。

举个例子,如果要将容器内的/app/file.txt文件复制到宿主机的/hostdir目录下,可以使用以下命令:

docker cp <containerId>:/app/file.txt /hostdir

如果要将宿主机的/hostdir/file.txt文件复制到容器内的/app目录下,可以使用以下命令:

docker cp /hostdir/file.txt <containerId>:/app

通过docker cp命令,可以方便地在容器和宿主机之间复制文件或目录,从而实现数据的传输和共享。

2.容器之间共享

(1)方法一:-v非匿名挂载

将共享数据放在主机上的共享目录中,然后将该目录挂载到多个容器中。具体挂载操作上面已经讲过了。

(2)方法二:Volume Container

Volume Container

Volume Container是一种设计模式,它专门用于管理数据卷。在这种模式下,我们创建一个专门用于挂载数据卷的容器,其他应用容器可以通过挂载这个Volume Container来访问数据卷。这种模式的好处是可以将数据卷的管理和维护与应用容器分离,使得数据卷的管理更加灵活和方便。

实操:

  1. 创建Volume Container:可以使用docker create命令创建一个专门用于挂载数据卷的容器,例如:

    docker create -v /data --name data_container busybox
    

    这将创建一个名为data_container的容器,用于挂载/data路径作为数据卷。

  2. 使用Volume Container:其他应用容器可以通过--volumes-from参数来挂载Volume Container中的数据卷,例如:

    docker run --volumes-from data_container -d --name app_container1 image1
    docker run --volumes-from data_container -d --name app_container2 image2
    

    这样,app_container1app_container2就可以共享data_container中的数据卷。

Data-packed Volume Container

Data-packed Volume Container是指将数据直接打包到容器中的数据卷中,使得容器本身就包含了数据。这种模式适用于一些需要将数据和应用打包在一起的场景,例如一些需要快速部署的应用或者一些需要便携式的数据处理工具。

实操:

  1. 创建Data-packed Volume Container:可以使用docker run命令直接将数据挂载到容器中,例如:

    docker run -v /host/data:/container/data -d --name data_packed_container image
    

    这将创建一个名为data_packed_container的容器,并将/host/data路径挂载到容器内的/container/data路径上。

  2. 使用Data-packed Volume Container:其他容器可以通过--volumes-from参数来挂载Data-packed Volume Container中的数据卷,例如:

    docker run --volumes-from data_packed_container -d --name app_container image
    

    这样,app_container就可以访问data_packed_container中的数据卷。

总的来说,Volume Container和Data-packed Volume Container是两种不同的数据卷管理模式,它们分别适用于不同的场景和需求。通过合理地使用这些模式,可以更好地管理和维护容器中的数据,从而提高容器化应用的灵活性和可维护性。

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

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

相关文章

Spark编程实验二:RDD编程初级实践

目录 一、目的与要求 二、实验内容 三、实验步骤 1、pyspark交互式编程 2、编写独立应用程序实现数据去重 3、编写独立应用程序实现求平均值问题 4、三个综合实例 四、结果分析与实验体会 一、目的与要求 1、熟悉Spark的RDD基本操作及键值对操作&#xff1b; 2、熟悉使…

Linux-----21、挂载

# 挂载命令 将硬件资源&#xff0c;或文件资源&#x1f4bf;&#xff0c;和&#x1f4c2;空目录&#x1f517;连接起来的过程 # mount linux 所有存储设备都必须挂载使用&#xff0c;包括硬盘 ​ 命令名称&#xff1a;mount ​ 命令所在路径&#xff1a;/bin/mount ​ 执行…

得帆信息创始人-张桐,受邀出席 BV百度风投AIGC主题论坛

近日&#xff0c;得帆信息创始人兼CEO张桐&#xff0c;作为百度风投被投代表企业创始人受邀出席“向未来&#xff0c;共成长” BV百度风投AIGC主题论坛。 与包括上海市徐汇区相关部门领导、百度集团相关事业部负责人及代表&#xff0c;以及来自国寿资本、中网投、麦顿投资的投资…

如何让32位.Net 应用打开3G开关

昨天刚分享了《如何让.NET应用使用更大的内存》&#xff0c;结果就有同学说&#xff0c;<最好加一下32位如何开启大内存&#xff0c;因为很多传统项目32位&#xff0c;实在迁移不动了>&#xff0c;那么&#xff0c;我就验证了一些可行的方案&#xff0c;发现都挺简单的。…

内网安全—Windows系统内核溢出漏洞提权

系统内核溢出漏洞提权 往缓冲区中写入超出限定长度的内容&#xff0c;造成缓冲区溢出&#xff0c;从而破坏程序的堆栈进而运行自己精心准备的指定代码&#xff0c;达到攻击的目的。 分类&#xff1a; 堆溢出 栈溢出 查找补丁的方法 1、手工查找补丁情况 systeminfo Wmic qfe…

Semaphore学习一

一、定义 是JUC包下的一个工具类&#xff0c;我们可以通过其限制执行的线程数量&#xff0c;达到限流的效果。 当一个线程执行时先通过其方法进行获取许可操作&#xff0c;获取到许可的线程继续执行业务逻辑&#xff0c;当线程执行完成后进行释放许可操作&#xff0c;未获取达到…

Python 全栈体系【四阶】(七)

第四章 机器学习 六、多项式回归 1. 什么是多项式回归 线性回归适用于数据呈线性分布的回归问题。如果数据样本呈明显非线性分布&#xff0c;线性回归模型就不再适用&#xff08;下图左&#xff09;&#xff0c;而采用多项式回归可能更好&#xff08;下图右&#xff09;。例…

数据安全传输基础设施平台(二)

5安全传输平台总体设计 5.1 方案特点 规范化&#xff1a;严格遵循各种相关规范设计。独立性&#xff1a;系统各子系统间互相独立&#xff0c;在保持系统间接口的前提下&#xff0c;各系统间的升级互不干扰。最小耦合性&#xff1a;各子系统进行严格功能分解&#xff0c;每个子…

PCL点云处理之点云置平(拟合平面绕中心旋转到绝对水平)(二百二十七)

PCL点云处理之点云置平(绕中心旋转到绝对水平)(二百二十七) 一、什么是点云置平二、算法流程三、算法实现一、什么是点云置平 有时候,我们处理的点云平面并非位于水平面,而是位于某个任一三维平面上,而大多数算法又只能在水平面处理,或者水平面的点云处理是相对更简单…

P2P应用

目录 一.P2P的简介 二.P2P的工作方式 1.具有集中目录服务器的P2P工作方式 2.具有全分布式结构的P2P文件共享程序 一.P2P的简介 P2P(对等连接)&#xff0c;是指两台主机在通信时&#xff0c;并不区分哪一个是服务请求方和哪一个是服务提供方。只要两台主机都运行了对等连接…

人工智能_机器学习069_SVM支持向量机_网格搜索_交叉验证参数优化_GridSearchCV_找到最优的参数---人工智能工作笔记0109

然后我们再来说一下SVC支持向量机的参数优化,可以看到 这次我们需要,test_data这个是测试数据,容纳后 train_data这个是训练数据 这里首先我们,导出 import numpy as np 导入数学计算包 from sklearn.svm import SVC 导入支持向量机包 分类器包 def read_data(path): wit…

从事开发近20年,经历过各种技术的转变和进步

1、jsp、javabean、servlet、jdbc。 2、Struts1、hibernate、spring。 3、webwork、ibatis、spring 4、Struts2、mybatis、spring 5、spring mvc &#xff0c;spring全家桶 6、dubbo&#xff0c;disconf 微服务&#xff0c;soa 7、springboot 全家桶 8、docker 9、dock…

AXure的情景交互

目录 导语&#xff1a; 1.erp多样性登录界面 2.主页跳转 3.省级联动​编辑 4. 下拉加载 导语&#xff1a; Axure是一种流行的原型设计工具&#xff0c;可以用来创建网站和应用程序的交互原型。通过Axure&#xff0c;设计师可以创建情景交互&#xff0c;以展示用户与系统的交…

力扣题目学习笔记(OC + Swift) 14. 最长公共前缀

14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 方法一 竖向扫描法 个人感觉纵向扫描方式比较直观&#xff0c;符合人类理解方式&#xff0c;从前往后遍历所有字符串的每一列&#xff0c;比较相同列上的…

出国旅游需要注意些什么

出国旅游是一种令人兴奋、令人期待的经历。然而&#xff0c;在进行这种经历之前&#xff0c;有几件事情是需要注意的。本文将为您介绍出国旅游需要注意的一些重要事项。首先&#xff0c;为了确保您的出国旅行顺利进行&#xff0c;您应该提前办理好您的签证和护照。不同国家对于…

Idea远程debugger调试

当我们服务部署在服务器上&#xff0c;我们想要像在本地一样debug,就可以使用idea自带的Remote JVM Debug 创建Remote JVM Debug服务器启动jar打断点进入断点 当我们服务部署在服务器上&#xff0c;我们想要像在本地一样debug,就可以使用idea自带的 Remote JVM Debug) 创建Rem…

flask搞个简单登录界面

登录界面 直接放上login.html模板&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Lo…

JVM-11-运行时栈帧结构

“栈帧”&#xff08;Stack Frame&#xff09;则是用于支持虚拟机进行方法调用和方法执行背后的数据结构&#xff0c;它也是虚拟机运行时数据区中的虚拟机栈&#xff08;Virtual MachineStack&#xff09;的栈元素。 栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回…

docker在线安装nginx

1、查看所有镜像 1、不带容器卷常规启动nginx&#xff0c;命令如下 docker run --name nginx-test -p 8089:80 -d a6bd71f48f68 2、在宿主机创建/usr/local/data/nginxdocker/目录&#xff0c;在此目录下创建html和logs文件夹&#xff0c;然后将容器内的 nginx.conf 和 html 下…

01-从JDK源码级别彻底剖析JVM类加载机制

文章目录 类加载运行全过程类加载器和双亲委派机制类加载器初始化过程双亲委派机制为什么要设计双亲委派机制&#xff1f;全盘负责委托机制自定义类加载器 打破双亲委派机制Tomcat打破双亲委派机制Tomcat自定义加载器详解模拟实现Tomcat的JasperLoader热加载 补充&#xff1a;H…