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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mysql之Specified key was too long; max key length is xx bytes异常

问题原因&#xff1a;mysq索引的字段都太长了 767字节是 MySQL 版本5.6(以及以前版本)中 InnoDB 表的最大索引前缀长度限制&#xff0c;MyISAM 表的长度为1,000字节。在 MySQL 版本5.7及以上版本中&#xff0c;这个限制增加到了3072字节。 如果对 utf8mb4编码的 varchar 字段设…

第七节JavaScript Promise

一、JavaScript Promise 1、简介 Promise是一个ES6提供的类&#xff0c;目的是更加优雅地书写复杂的异步任务。 由于Promise是ES6新增的&#xff0c;所以一些旧的浏览器并不支持&#xff0c;苹果的Safari 10和Windows的Edge 14版本以上的浏览器才支持&#xff0c;这个需要注…

[AutoSar]基础部分 RTE 02 S/R Port 显式/隐式

目录 关键词平台说明一、显式&#xff08;Explicit&#xff09;和隐式&#xff08;Implicit&#xff09;1.1 显式模式1.1.1code 二、隐式模式2.1 code 三、区别 关键词 嵌入式、C语言、autosar、EcuM、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语…

Content-Type是什么

目录 Content-Type是什么 获取方式 设置方式 常见类型 application/x-www-form-urlencoded multipart/form-data application/json text/xml text/html text/plain Content-Type是什么 Content-Type出现在请求标头和响应标头中&#xff0c;意思是内容类型&#xff0…

Ubuntu如何安装KVM

环境&#xff1a; 联想E14笔记本 Ubuntu20.04 问题描述&#xff1a; Ubuntu如何安装KVM 解决方案&#xff1a; 1.验证CPU是否支持硬件虚拟化 rootst-ThinkPad-E14:~# grep -Eoc (vmx|svm) /proc/cpuinfo 162.检查 VT 是否在 BIOS 中启用 安装 apt install cpu-checker …

论文阅读——Painter

Images Speak in Images: A Generalist Painter for In-Context Visual Learning GitHub - baaivision/Painter: Painter & SegGPT Series: Vision Foundation Models from BAAI 可以做什么&#xff1a; 输入和输出都是图片&#xff0c;并且不同人物输出的图片格式相同&a…

隐私计算介绍

这里只对隐私计算做一些概念性的浅显介绍&#xff0c;作为入门了解即可 目录 隐私计算概述隐私计算概念隐私计算背景国外各个国家和地区纷纷出台了围绕数据使用和保护的公共政策国内近年来也出台了数据安全、隐私和使用相关的政策法规 隐私计算技术发展 隐私计算技术安全多方计…

滴滴出行:驾龄不到一年有什么办法注册网约车?

驾龄不到一年有什么办法注册网约车&#xff1f;怎么解决网约车注册审核问题。我可以为您提供一些对于如何注册滴滴快车的信息。要注册为滴滴快车司机&#xff0c;你需要符合下列规范&#xff1a; 1.年龄在12-60岁左右&#xff0c;有C1或以上驾照&#xff0c;如果驾龄不够三年是…

JVM 垃圾回收详解

前言 什么是垃圾? 垃圾是指运行程序中没有任何引用指向的对象&#xff0c;需要被回收。 内存溢出和内存泄漏 内存溢出&#xff1a;经过垃圾回收之后&#xff0c;内存仍旧无法存储新创建的对象&#xff0c;内存不够溢出。 内存泄漏&#xff1a;又叫“存储泄漏”&#xff0…

【Leetcode】旋转矩阵

题目链接&#xff1a;https://leetcode.cn/problems/rotate-matrix-lcci/description/ 题目描述 给你一幅由 N N 矩阵表示的图像&#xff0c;其中每个像素的大小为 4 字节。请你设计一种算法&#xff0c;将图像旋转 90 度。 不占用额外内存空间能否做到&#xff1f; 示例 …

cefsharp120.1.8(cef120.1.8,Chromium120.0.6099.109)版本升级测试,其他版本H264版本

此版本最新版cef120.1.8,Chromium120.0.6099.109 此更新包括一个高优先级安全更新 This update includes a high priority security update. 说明&#xff1a;本版本暂时不支持264&#xff0c;其他H264版本参考119,116&#xff0c;114&#xff0c;110&#xff0c;109等版本 c…

mysql innodb知识记录

官方文档 官网架构图 innodb 特性 内存 buffer pool 采用优化后的LRU算法&#xff0c; 3/8 of the buffer pool is devoted to the old sublist.The midpoint of the list is the boundary where the tail of the new sublist meets the head of the old sublist.When In…

地牢边缘 DUNGEON LIMBUS中文免安装版

​《地牢边缘》是一款点阵图形式的像素风经典迷宫探索类游戏。玩家需要在游戏中收集多种装备&#xff0c;随机生成的无限地下城。在生死之际遇见的迷之铁匠和管理复活之村的年轻女性。为了找回遗失的记忆&#xff0c;进入更深的地下城。玩家还可以发展村落以及进化武器的多样化…

亚信安慧AntDB数据库助力智慧高速建设

随着新型智慧交通业务的迅速发展&#xff0c;各地高速公路在管控、收费和监测方面的数据管理变得至关重要。智慧公路信息化建设已成为高速公路建设的核心。AntDB数据库在某省级客户中发挥关键作用&#xff0c;帮助构建协同共享、高效的统一智慧管理平台&#xff0c;为高速公路的…

javascript 数组处理的两个利器: `forEach` 和 `map`(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

【AI基础设施】智算场景的资源管理系统与未来展望

高性能计算与智算场景 首先澄清两个概念&#xff0c;高性能计算与智算场景&#xff0c;高性能计算主要是面向天气预测、生物计算、材料计算等场景&#xff0c;而最近几年很火的智算主要是面向AI场景的计算&#xff0c;如语音识别、图像识别、自动驾驶等场景&#xff0c;我们可…

算法学习——栈与队列

栈与队列 栈与队列理论基础用栈实现队列思路代码 用队列实现栈思路代码 删除字符串中的所有相邻重复项思路代码 有效的括号思路代码 逆波兰表达式求值思路代码 滑动窗口最大值思路代码未完待续 前 K 个高频元素思路代码拓展 总结栈在系统中的应用括号匹配问题字符串去重问题逆波…

Linux常用网络指令

网络参数设定使用的指令 手动/自动设定与启动/关闭 IP 参数&#xff1a;ifconfig, ifup, ifdown ifconfig ifconfig常用于修改网络配置以及查看网络参数的指令 [rootwww ~]# ifconfig {interface} {up|down} < 观察与启动接口 [rootwww ~]# ifconfig interface {options…

6.s081操作系统Lab4: trap

文章目录 chapter 4概览4.1 CPU trap流程使用寄存器如果cpu想处理1个trap 4.2 用户态引发的trap4.2.1 uservec4.2.2 usertrap4.2.3 usertrapret和userretusertrapretuserret Lab4Backtrace (moderate)Alarm (hard) chapter 4 概览 trap的场景&#xff1a;系统调用&#xff0c…

CUDA C:线程、线程块与线程格

相关阅读 CUDA Chttps://blog.csdn.net/weixin_45791458/category_12530616.html?spm1001.2014.3001.5482 第一百篇博客&#xff0c;写点不一样的。 当核函数在主机端被调用时&#xff0c;它会被转移到设备端执行&#xff0c;此时设备会根据核函数的调用格式产生对应的线程(…