docker数据卷

Docker 容器的数据卷的使用 快速上手 Docker 容器的数据卷的使用,面向保姆级教程。 阅读详情

​ Docker的镜像是由一系列的只读层组合而来的,当启动一个容器时,Docker加载镜像的所有只读层,并在最上层加人一个读写层。这个设计使得Docker可以提高镜像构建、存储和分发的效率,节省了时间和存储空间,然而也存在如下问题:

  • ​容器中的文件在宿主机上存在形式复杂,不能在宿主机上很方便地对容器中的文件进行访问。
  • 多个容器之间的数据无法共享。
  • 当删除容器时,容器产生的数据将丢失。

为了解决这些问题,Docker引人了数据卷(volume)机制。volume是存在于一个或多个容器中的特定文件或文件夹,这个目录以独立于联合文件系统的形式在宿主机中存在,并为数据的共享与持久化提供以下便利:

  • volume在容器创建时就会初始化,在容器运行时就可以使用其中的文件。
  • volume能在不同的容器之间共享和重用。
  • 对volume中数据的操作会马上生效。
  • 对volume中数据的操作不会影响到镜像本身。
  • volume的生存周期独立于容器的生存周期,即使删除容器,volume仍然会存在,没有任何容器使用的volume也不会被Docker删除。

​ Docker供了volumedriver口,通过实现该接口,我们可以为Docke溶器提供不同的volume存储支持。当前官方默认实现了local这种volumedriver,它使用宿主机的文件系统为Docker容器提供volume。

数据卷的使用方式

​ 为容器添加volume,类似于Linux的mount操作,用户将一个文件夹作为volume挂载到容器上,可以很方便地将数据添加到容器中供其中的进程使用。多个容器可以共享同一个volume,为不同容器之间的数据共享提供了便利。

  1. 创建volume

    # 用户可以使用docker volume create创建一个volume,以下命令创建了一个指定名字的volume
    $sudo docker volume create一name vol_simple
    
    # 用户在使用docker run或docker create创建新容器时,也可以使用一v标签为容器添加volume,以下命令创建了一个随机名字的volume,并挂载到容器中的/data目录下。
    $sudo docker run -d -v /data ubuntu /bin/bash
    
    # 使用docker volume inspect命令可以获得该volume包括其在宿主机中该文件夹的位置等信息。
    $sudo docker volume inspect vol_ simple
    {
    "Name":"vol_ simple",
    "Driver":"local",
    "Mountpoint":"/var/lib/docker/volumes/vol_simple/_data"
    }
    
  2. 挂载volume

    # 除了上面创建volume时使用的挂载方式之外,Docker同时也允许我们将宿主机上的目录挂载到容器中。
    $sudo docker run -v /host/dir:/container/dir ubuntu /bin/bash
    
  3. 使用Dockerfile添加volume

    # 使用VOLUM[指令向容器添加volumeo
    VOLUME /data
    # 在使用docker build命令生成镜像并且以该镜像启动容器时会挂载一个volume到/data。与上文中vol_ simple例子类似,如果镜像中存在/data文件夹,这个文件夹中的内容将全部被复制到宿主机中对应的文件夹中,并且根据容器中的文件设置合适的权限和所有者。
    
    
  4. 共享volume(–volume-from)

    # 在使用docker run或docker create创建新容器时,可以使用--volumes-from标签使得容器与已有的容器共享volume 
    $sudo docker run --rm --it --name vol_use --volumes-from vol_ simple ubuntu /bin/bash
    
    
  5. 删除volume

    ​ 如果创建容器时从容器中挂载了volume,在/var/lib/docker/volumes下会生成与volume对应的目录,使用docker rm删除容器并不会删除与volume对应的目录,这些目录会占据不必要的存储空间,即使可以手动删除,因为有些随机生成的目录名称是无意义的随机字符串,要知道它们是否与未被删除的容器对应也十分麻烦。所以在删除容器时需要对容器的volume妥善处理。在删除容器时一并删除volume有以下3种方法:

    • 使用docker volume rm <volume_name>删除volume。
    • 使用docker rm -v <container_name>删除容器。
    • 在运行容器时使用docker run --rm,–rm标签会在容器停止运行时删除容器以及容器所挂载的volume。
  6. 备份、恢复或迁移volume

    # 备份volume可以使用以下方法。
    $sudo docker run --rm --volumes-from vol_simple -v $(pwd):/backup ubuntu tar cvf /backup/data.tar /data
    
    # 恢复volume可以使用以下方法。
    $sudo docker run --it --name vol_bck -v /data ubuntu /bin/bash
    $sudo docker run --rm --volumes-from vol_bck -v $(pwd):/backup ubuntu tar xvf /backup/data.tar -C /
    
    
数据卷原理解读

​ 前面已经提到,Docker的volume的本质是容器中一个特殊的目录。在容器的创建过程中,Docker会将宿主机上的指定目录(一个以volume ID为名称的目录,或者指定的宿主机目录)挂载到容器中指定的目录上,这里使用的挂载方法是绑定挂载(bind mount ),故挂载完成后的宿主机目录和容器内的目标目录表现一致。

​ 所以,Docker daemon在为容器挂载目录的过程中着重处理的事情就是是如何组装出合适的mount指令,而在源码中,挂载点这个结构体中则包含了组装mount命令所有需要的信息。

  1. 创建volume

    • 解析参数并生成参数列表,每一个参数描述了一个volume和容器的对应关系或是一个容器与其他容器共享volume的情况。
    • 初始化并使用参数列表中的参数生成挂载点列表,这一过程在创建容器时执行,即在宿主机和容器文件目录下创建上述挂载点中所需的路径。
    • 将挂载点列表传递给libcontainer,按照挂载点列表中指定的路径、mount参数、读写标志执行所有的mount操作,完成从宿主机到容器内挂载点的映射,这一过程在容器启动时才会执行。
  2. 删除volume

    ​ 删除volume主要有前面提到的两种方法,第一,使用docker volume rm命令进行删除,第二,使用docker run一rm和docker rm -v在删除容器时删除所关联的volume。
    ​ 使用第一种方式删除volume时,Docker首先会检查是否还有容器在使用这个volume,如果这个volume还被其他容器所使用,则返回错误信息,并终止删除。如果没有容器在使用这个volume ,那么Docker将这个volume在宿主机上对应的目录删除,并删除其维护的本地volume列表中的相关信息。
    ​ 在使用第二种方式进行volume删除时,其volume的删除过程与第一种类似,不过需要注意的是,这种删除的方式会过滤掉挂载点中Named字段为true的volume,也就是说这种方式并不会对命名的volume进行删除。

  3. volume相关配置文件

    ​ Docker的每个容器在/var/lib/docker/containers文件夹下有一个以容器ID命名的子文件夹,这个子文件夹中的config.json文件是这个容器的配置文件,可以从中看到这个容器所使用的volumeID以及它们的可写情况。如果你要查看volume的具体信息,你可以在/var/lib/docker/volumes文件夹下找与volume ID或者volume名字命名的子文件夹,这个子文件夹中的data目录存储了该volume中的所有内容。

Docker数据卷挂载 简单的挂载方式:docker run -it --rm --name test1 -v /lee:/data1:rw -v /etc/passwd:/data2/passwd busybox(-v表挂载,将主机的/lee目录挂载于容器的data1目录,并且设置rm已读模式)注释:容器内的mysql信息保存于主机的/var/lib/docker/volumes/mysqldate/_date内,如果将mysql容器删除的话,内容依然存在。(该目录会被存储于/var/lib/docker/volume内) 阅读详情

相关推荐

【Docker】数据卷技术和数据卷容器

如果docker01与docker02共享卷,docker02与docker03共享卷,删除了docker01,不影响docker02和docker03对共享数据的访问。数据卷容器(Data Volume Container):是一种 “专门挂载数据卷并供其他容器挂载” 的普通容器,常被称为 “本节中,会新介绍一种方式来实现镜像的构建,同时实现容器对数据卷的挂载。去实现数据卷的共享。,前两点可以用数据卷技术,后一点就是数据卷技术和数据卷容器。的数据卷技术,如果要实现2个容器共享同意卷,需要。

weixin_48618536的博客 1297

Docker数据卷

1.为什么需要数据卷?⊙ω⊙ 看这篇 Docker容器数据卷详解 Docker数据卷 Docker数据卷详解

哈哈 1889

海康VisionMaster表面缺陷滤波实战:从参数调优到工业检测避坑指南

本文深入探讨海康VisionMaster表面缺陷滤波技术在工业检测中的应用,从参数调优到ROI绘制与Blob分析的协同策略,提供金属外壳、锂电池铝壳等复杂表面的缺陷检测实战指南。通过多级滤波架构和动态ROI生成法,显著提升检出率至98.7%,误检率低于0.5%,为工业质检提供智能化解决方案。

ujm5678901的博客 323

Docker——数据卷命令

容器与数据耦合的问题 数据卷:volume,是一个虚拟的目录,指向宿主机文件系统中的某个目录 数据卷的作用:将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全 数据卷操作: 比如说,我们在宿主机文件系统中修改,一定会立即反应到数据卷(volumes)对应的容器内部,不用再进入容器内部修改 也方便了数据的共享第二个容器的config目录也来挂载config数据卷,也就是说两个容器可以挂载同一个卷,我们在宿主机文件系统中做的一切修改,这两个容器也能看到,这就是数据共

weixin_51351637的博客 4434

实验三 Gmapping建图

自主移动机器人第三次实验课,内容包括:(1)turtlebot的gmapping建图;(2)rosbag的使用;(3)gazebo中的gmapping建图。

lj164567487的博客 4647

二叉树的操作之统计二叉树中节点的个数

一,问题描述 给定一颗二叉树,已知其根结点。 ①计算二叉树所有结点的个数 ②计算二叉树中叶子结点的个数 ③计算二叉树中满节点(度为2)的个数   二,算法分析 找出各个问题的基准条件,然后采用递归的方式实现。 ①计算二叉树所有结点的个数 1)当树为空时,结点个数为0,否则为根节点个数 加上 根的左子树中节点个数 再加上 根的右子树中节点的个数 借助遍历二叉树的思路,每访问一个结...

weixin_34200628的博客 4567

【Docker】Docker Volume(存储卷)

什么是存储卷。

Elena's Blog 5333

XILINX偶然加载不成功的问题原因及解决方法

本文为明德扬原创文章,转载请注明出处! 一、项目背景 明德扬(MDY)在2021年承担了多个基于XILINX芯片的研发项目,包括VPX网络透明传输项目(芯片为XC7K325T-2FBG900)、某高端测试仪项目(芯片为XCKU060-FFVA1156)、某网闸设备项目(芯片为XC7Z030-FBG676)等,另外,明德扬自研了基于XC7K325T-2FBG900和基于XC7K410T-2FBG900芯片的核心板,在XILINX研发领域拥有丰富的经验。即使拥有丰富经验和积累,每个新项目我们均...

6034

docker卷--docker volumes 使用学习

docker卷--docker volumes 使用学习

岳来的博客 9521

手把手教你用光耦搭建安全隔离电路:从洗衣机控制板到PLC输入模块实战

本文通过洗衣机控制板驱动高压电机和PLC输入模块采集现场信号两个实战场景,手把手教你使用光耦搭建安全隔离电路。文章详细解析了电路架构、关键器件选型、参数计算、仿真验证及PCB布局避坑技巧,并对比了光耦与数字隔离器的适用场景,帮助电子工程师掌握这门保障系统稳定与安全的必备技能。

h6j7k8l9p0的博客 462

思科模拟器Cisco Packet Tracer交换机的管理配置

一、交换机的管理方式:带内管理和带外管理 通过交换机的 Console 端口管理交换机属于带外管理;这种管理方式不占用交换机的网络端口,第一次配置交换机必须利用 Console 端口进行配置。 通过 Telnet、拨号等方式属于带内管理。 二、控制台配置思科交换机 1.新建拓扑图 新建拓扑,选择console线连接交换机和PC,一端接交换机的console口,一端接PC的RS 232 口(...

qq_37992321的博客 2万+

Docker Volume(存储卷)

Docker存储卷学习

爱敲代码的三毛的博客 3031

第二天 原来Labview语言结构也挺自然(2.1 顺序结构)

新建项目文件StructureTest.lvproj,新建四个子VI(FlatSequence.vi、CaseStructure.vi、LoopStructure.vi、EventStructure.vi),具体新建流程可以参考1.2节。

weixin_38637405的博客 1002

docker的数据卷

Docker数据卷(Volumes)是一种在容器之间持久化和共享数据的方法。数据卷(Data Volumes)是一个可供容器使用的特殊目录,它将宿主机操作系统目录映射到容器,是宿主机目录与容器目录之间映射的桥梁。容器内的数据和文件系统的改动,都是发生在镜像栈最上面的容器层。容器内产生的这些文件系统和数据都是临时的,当把容器被删除时,这些数据也会跟着被删除。但是数据卷是不属于联合文件系统的,当容器被删除后数据卷中的数据任然会被保留下来。数据卷可以被多个容器挂载,实现数据的共享;

YaoXTao的专栏 1863

AgentScope Java 入门:Spring AI Alibaba 与 AgentScope 的定位与区别

摘要:Spring AI Alibaba是阿里基于Spring AI开发的本地化AI应用框架,旨在服务Java开发者。它提供模型接入、函数调用、RAG等功能,并与阿里云基础设施深度集成。同时,阿里开源了多智能体框架AgentScope,其Java版(AgentScope-Java)专注于Agentic设计理念。两者将协同发展:Spring AI Alibaba侧重Spring生态集成,AgentScope-Java强化智能体能力。未来计划包括支持AgentScope、升级Admin平台,以及推进Server

SmartSi 1522

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Docker 数据卷详解

目录一、数据卷简介1、引言2、什么是数据卷3、为什么使用数据卷?二、数据卷的基本使用1、创建数据卷2、查看所有数据卷3、查看数据卷信息三、Docker安装nginx并使用数据卷配置同步映射四、Docker 安装MySQL并使用数据卷实现数据持久化五、具名和匿名挂载1、匿名挂载2、具名挂载3、具名挂载、匿名挂载和指定路径挂载如何区分4、拓展六、DockerFile 一、数据卷简介 1、引言 docker的镜像是由多个只读的文件系统叠加在一起形成的。当我们在我启动一个容器的时候,docker会加载这些只读层并

weixin_46822367的博客 3552

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Docker之数据卷的使用

数据卷是 Docker 中最常用的数据管理方式之一。数据卷是容器与主机之间共享的持久化存储,独立于容器的生命周期。数据卷可以用于存储应用程序数据、配置文件等。容器可以通过挂载数据卷来访问和修改其中的数据。数据卷的好处包括数据的持久性、容器之间的共享数据,以及方便数据备份和恢复。

weixin_74352229的博客 1875

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Docker数据卷详解

Docker数据卷详解

qq_36305027的博客 2132

docker 数据卷

Docker数据卷是Docker中的一个核心机制,用于实现容器间数据的持久化和共享。它是宿主机上的一个特殊目录,可以供一个或多个容器使用。容器删除时,不会删除其挂载的数据卷,也不会存在类似的垃圾机制对容器存在的数据卷进行处理。:Docker数据卷是在宿主机上创建的目录或文件系统,它独立于容器的生命周期。这意味着即使容器停止或删除,数据卷中的数据仍然会被保留,从而实现了数据的持久化存储。:数据卷可以在不同的容器之间挂载和复用,使得多个容器能够访问到相同的数据源。

平时不搬砖的博客 1724

docker容器之数据卷篇

创建一个容器,该容器既挂载了需要备份的数据卷(有volumes-from参数指定),又挂载了用来备份数据的数据卷(可以用-v参数指定),通过tar压缩命令,将volumes-from参数指定的需要备份的数据卷,压缩到用来备份的数据卷中(等同于保存到了宿主机对应的目录中)。创建一个临时容器,既挂载了用于存放还原数据的数据卷容器,又挂载了存有备份数据的数据卷,然后使用tar命令,将备份的数据解压到存放还原数据的数据卷中。创建的数据卷默认是可以读写的,这适合于绝大多数情况,也可以将卷设置为只读的。

2302_76703990的博客 3140

Docker 数据卷

Docker 的理念: 将运行的环境打包形成容器运行,运行可以伴随着容器,但是我们希望对数据做持久化,同时希望容器之间能够共享数据。Docker产生的数据,如果不通过docker commit 生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。Docker为了保存数据就使用了Docker数据卷。

程序猿进阶 1336

Docker—容器数据卷

1.什么是容器数据卷 2.数据卷的使用 3.实战MySQL同步数据 4.卷 常用命令 5.匿名挂载与具名挂载 5.1 匿名挂载 5.2 具名挂载 6.数据卷容器

可达鸭的博客 4367

Docker——容器数据卷

Docker——容器数据卷

贝尔摩德苦艾酒 7509
上一篇: docker存储管理
下一篇: docker网络管理
KingDragon_Baron
博客等级 码龄12年 55粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值