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

2023-12-19

〇、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_container1 app_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是两种不同的数据卷管理模式,它们分别适用于不同的场景和需求。通过合理地使用这些模式,可以更好地管理和维护容器中的数据,从而提高容器化应用的灵活性和可维护性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

玩转Docker(六):数据挂载与共享 的相关文章

随机推荐

  • 软件测试/测试开发/人工智能丨如何通过分组 AUC 从不同的维度验证模型的能力

    通过分组 AUC Area Under the Curve 从不同维度验证模型的能力是一种有效的方法 特别适用于面对多个子群体或子问题的场景 以下是一些步骤 以及在不同维度验证模型性能时可能的一些策略 步骤 定义分组维度 确定模型性能需要在
  • 简单搭建一个Python自动化测试框架

    1 安装 Python 首先需要安装Python 可以从官网下载对应的版本 安装完成后 可以在终端中输入python来检查是否安装成功 2 安装pip pip是Python的包管理工具 用于安装和管理Python模块 可以在终端中输入以下命
  • zkSend — — 在Sui上发红包像发电子邮件一样简单

    12月14日 知名区块链媒体平台The Block发表了这篇关于对Mysten Labs联合创始人Adeniyi Abiodun的采访 文中 我们 指代该媒体 数据均为截止撰写文章时数据 以下是正文 两年前 当五名前Facebook工程师创
  • 玩转Docker(七):Docker Compose

    文章目录 一 什么是Docker Compose 二 一个完整的例子 一 什么是Docker Compose Docker Compose是一个用于定义和运行多个Docker容器应用的工具 它使用YAML文件来配置应用的服务 网络 卷等 通
  • NFTScan | 12.11~12.17 NFT 市场热点汇总

    欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总 周期 2023 12 11 2023 12 17 NFT Hot News 01 Pudgy Penguins 衍生 NFT Lil Pudgys 过去一天
  • nodejs使用nodejieba

    Nodejieba是一个基于Node js平台的中文分词模块 用于将中文文本切分成有意义的词汇 它是结巴中文分词的Node js版本 结巴分词是一种开源的中文分词工具 广泛应用于中文自然语言处理领域 优点 高性能 Nodejieba的底层实
  • 判断API接口优劣的标准

    随着互联网的发展 API接口已经成为了应用程序之间进行数据交互的重要方式 然而 在众多的API接口中 如何判断其优劣呢 本文将介绍一些判断API接口优劣的标准 一 稳定性和可用性 一个优秀的API接口必须具备稳定性和可用性 稳定性是指接口在
  • 蚂蚁集团5大开源项目获开放原子 “2023快速成长开源项目”

    12月16日 在开放原子开源基金会主办的 2023开放原子开发者大会 上 蚂蚁集团主导开源的图数据库TuGraph 时序数据库CeresDB 隐私计算框架隐语SecretFlow 前端框架OpenSumi 数据域大模型开源框架DB GPT入
  • 【ranger】CDP环境 更新 ranger 权限策略会发生低概率丢失权限策略的解决方法

    一 问题描述 我们的 kafka 服务在更新 添加 ranger 权限时 会有极低的概率导致 MM2 同步服务报错 报错内容 Not Authorized 但是查看 ranger 权限是赋予的 并且很早配置的权限策略也会报错 相关组件版本
  • 软件测试/测试开发|最容易上手的Ubuntu虚拟机安装教程

    简介 我们在日常的学习和工作中 经常需要我们在Linux系统上部署环境或者执行测试 但是有时候服务器资源并没有这么好申请 特别是当我们在学习时 购买服务器会增加我们的成本 在这个时候 我们就可以使用虚拟机了 我们使用虚拟机来安装Linux系
  • 用友出席操作系统大会,携手麒麟软件深度服务企业数智化

    12月15日 操作系统大会 openEulerSummit2023在北京召开 用友受邀参加麒麟软件分论坛 与行业大咖一道 共话产业链生态引领基础软件加速技术创新 在企业数智化转型大潮中 用友聚合各行各业生态伙伴 共同营建全球领先的数智商业创
  • 云服务器1核1G能干什么?

    随着云计算技术的不断发展 云服务器已经成为企业和个人用户的重要选择 其中 1核1G的云服务器是市场上比较常见的一种配置 那么 1核1G的云服务器有哪些用途呢 搭建小型网站或个人博客 对于一些小型网站或个人博客来说 并不需要太多的计算资源和存
  • ant-design-vue三级菜单

  • 如何入门Appium-移动端自动测试框架?

    Appium是一个开源跨平台移动应用自动化测试框架 既然只是想学习下Appium如何入门 那么我们就直奔主题 文章结构如下 为什么要使用Appium 如何搭建Appium工具环境 超详细 通过demo演示Appium的使用 Appium如何
  • Jtti:常见的数据库服务器的启动方法

    数据库服务器的启动方法取决于所使用的数据库管理系统 DBMS 以下是一些常见数据库服务器的启动方法 MySQL MariaDB 在Linux上 使用以下命令启动MySQL服务器 sudo service mysql start 或者 sud
  • 2023建筑行业薪资趋势?如何提高建筑设计效率呢?

    12月6日 国外著名 建筑可视化网站CGarchitect 公布了其2023年建筑可视化薪资调查结果 详细描述了行业内的薪资趋势 调查表明 占比较高的是有16 04 的年收入低于10000美元 约71000人民币 其次是11 75 的受访者
  • Scala多线程爬虫程序的数据可视化与分析实践

    一 Scala简介 Scala是一种多种类型的编程语言 结合了针对对象编程和函数式编程的功能 它运行在Java虚拟机上 具有强大的运算能力和丰富的库支持 Scala常用于大数据处理 并发编程和Web应用程序开发 其灵活性和高效性编程成为编写
  • 基于PaddleOCR搭建身份证识别web api接口

    前言 通过 这篇文章 基于PaddleOCR的DBNet神经网络实现全网最快最准的身份证识别模型 开发的身份证识别模型 还无法进行部署应用 这篇文章就已经开发好的代码如何部署 并如何通过api的接口进行访问进行讲解 项目部署 以window
  • 图片编辑软件怎样使用?整理好的方法都在这里了

    马上迎来毕业季啦 各位准毕业生们除了在 奋笔疾书 自己的毕业论文 是不是也在准备拍摄毕业照呢 大家在校园里度过了各种美好时光 如今即将告别这个充满青春和梦想的地方 走向新的人生阶段 而作为人生中一个重要的节点 当然需要通过拍摄毕业照 来留下
  • 玩转Docker(六):数据挂载与共享

    文章目录 Docker的两种存放数据的资源 1 Storage Driver 2 Data Volume 3 使用场景 一 使用Data Volume 1 v