【DevOps系列】Docker数据卷(volume)详解

news2024/11/14 20:46:13

【DevOps系列】Docker数据卷(volume)详解

文章目录

  • 【DevOps系列】Docker数据卷(volume)详解
    • 一、概述
    • 二、数据卷
    • 三、为什么使用数据卷volume
      • 数据卷的作用:
      • 数据卷的特点:
    • 四、数据卷volume基本操作
      • 4.1 创建数据卷
      • 4.2 查看数据卷
      • 4.3 查看数据卷详细信息
      • 4.4 数据卷删除
    • 五、数据卷的使用
      • 5.1 先创建数据卷在挂载
      • 5.2 创建容器使用数据卷
      • 5.3 直接挂载宿主机目录
        • 1). mount方式创建容器命令如下:
        • 2). -v方式创建命令如下:
      • 5.4 只读数据卷
        • 1). mount方式创建容器命令如下:
        • 2). -v方式创建(可以理解为简写方式):
      • 5.5 数据卷容器
        • 1).新建数据卷容器
        • 2).新建一个容器来使用数据卷容器
      • 5.6 数据卷容器
        • 1).数据卷的备份
        • 2).数据还原

一、概述

Docker的镜像是由多个只读的文件系统叠加在一起形成。启动一个容器的时候,docker会加载只读层并在只读层的上面(栈顶)增加一个读写层。如果需要修改只读层的文件,那么这个文件层需要复制到读写层。该文件的只读版本还在,只是被上面写层的文件副本隐藏。当删除docker或重新启动时,之前的更改文件会消失。在Docker中,只读层与读写层的组合称为Union File System(联合文件系统)。Docker将运用与运行的环境打包形成容器运行,Docker容器产生的数据,如果不通过docker commits生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有,为了能保存数据在Docker,Docker设计了一个机制既(Volume)

为了很好的实现数据保存和数据共享,Docker提出了Volume这个概念,就是绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上,这个目录或文件称为数据卷

二、数据卷

在这里插入图片描述

数据卷(Volume)是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供以下一些特性:

  • 数据卷可在容器之间共享或重用数据。
  • 卷中的更改可以直接生效。
  • 数据卷中的更改不会包含在镜像的更新中。
  • 数据卷的生命周期一直持续到没有容器使用它为止。

三、为什么使用数据卷volume

卷是在一个或多个容器内被选定的目录,为docker提供持久化数据或共享数据,是docker存储容器生成和使用的数据的首选机制。对卷的修改会直接生效,当提交或创建镜像时,卷不被包括在镜像中。

数据卷的作用:

  1. 持久化数据
  2. 共享数据

数据卷的特点:

  1. 即使生效
  2. 卷的更新不影响镜像
  3. 即使容器停止或被删除,卷默认也一致存在

四、数据卷volume基本操作

4.1 创建数据卷

使用如下命令可以创建一个数据卷

  • docker volume create 卷名
docker volume create db_vol

使用这种方式创建的数据卷可也被docker volume管理,如查看,删除等。

4.2 查看数据卷

docker volume ls

4.3 查看数据卷详细信息

  • docker volume inspect 卷名
docker volume inspect db_vol

4.4 数据卷删除

  • docker volume rm 卷名
docker volume rm db_vol

五、数据卷的使用

5.1 先创建数据卷在挂载

docker volume create data_volume

5.2 创建容器使用数据卷

docker run -d -it \
> --name volumetest \
> --mount source=data-vol,target=/data \
> ubuntu

注:加了“\”意为将最后的回车换行给注释了,系统理解为命令还没有结束,因而是继续等待用户进行输入,直到读到结束符。

简写方式(-v):

docker run -d -it \
> --name volumetest \
> -v data-vol:/data \
> ubuntu

5.3 直接挂载宿主机目录

通过这种方式不需要事先创建数据卷,直接指定宿主机的一个目录挂载到容器中,但宿主机中对应的目录要存在,否则会报一下异常

docker: Error response from daemon: invalid mount config for type "bind": bind source path does not exist: /root/vdata.

1). mount方式创建容器命令如下:

docker run -d -it \
> --name volumetest02 \
> --mount type=bind,source=/home/lisen/vdata,target=/vdata \
> ubuntu

2). -v方式创建命令如下:

docker run -dit --name volumetest02 -v /home/lisen/vdata:/vdata ubuntu

5.4 只读数据卷

创建的数据卷默认是可以读写的,这适合于绝大多数情况,也可以将卷设置为只读的

1). mount方式创建容器命令如下:

docker run -d -it \
> --name volumetest02 \
> --mount type=bind,source=/home/lisen/vdata,target=/vdata,ro \
> ubuntu

2). -v方式创建(可以理解为简写方式):

docker run -dit --name volumetest02 -v /home/lisen/vdata:/vdata:ro ubuntu

数据卷的主要作用是数据持久化和数据共享,所以一般不用只读方式。

5.5 数据卷容器

用途:数据卷容器主要目的是多个容器之间共享一些持续更新的数据,数据卷容器也是一个容器,专门提供数据卷给其他容器挂载。

1).新建数据卷容器

docker run -it -d --name data-volume-con -v /data ubuntu

2).新建一个容器来使用数据卷容器

docker run -it -d --name db-con-1 --volumes-from data-volume-con ubuntu

参数–volumes-from用于指定数据卷容器;进入新建的容器,在挂载的目录中(data目录,既创建数据卷容器时指定的目录)新建一个测试文件。

5.6 数据卷容器

1).数据卷的备份

创建一个容器,该容器既挂载了需要备份的数据卷(有volumes-from参数指定),又挂载了用来备份数据的数据卷(可以用-v参数指定),通过tar压缩命令,将volumes-from参数指定的需要备份的数据卷,压缩到用来备份的数据卷中(等同于保存到了宿主机对应的目录中)。

docker run --rm \
> --name backup \
> --volumes-from data-volume-con \
> -v /host-backup:/con-backup \
> ubuntu tar cvf /con-backup/backup200201.tar /data
  • –rm 参数,指定了创建的容器为临时容器,运行完后将自动删除,我们只是借助这个容器完成备份,备份完成后数据存放于宿主机中,容器自然也就不需要了。
  • –volumes-from 参数,指定了需要备份的数据卷容器
  • -v 参数,指定了用来备份数据的数据卷,/host-backup为宿主机目录,/con-backup为对应的容器目录
  • tar 命令完成数据压缩,注意压缩的源为容器目录,因为压缩命令实际上实在容器中执行的,确切的说是在backup容器中执行(–name参数指定的),压缩完成后自然也会保存到宿主机目录。

2).数据还原

新建一个数据卷容器,这个容器作为存放还原数据的容器。

docker run -it --name data-volume-con2 -v /data ubuntu

创建一个临时容器,既挂载了用于存放还原数据的数据卷容器,又挂载了存有备份数据的数据卷,然后使用tar命令,将备份的数据解压到存放还原数据的数据卷中。

  • –rm 参数,请参见“数据备份”部分的解释
  • –volumes-from 参数,指定用于保存还原数据的容器
  • -v 参数, 用于指定存有备份数据的数据卷,/host-backup是宿主机上用来存放备份数据的目录,将其挂载到容器的/container-back目录,tar命令通过/container-back

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

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

相关文章

YOLOv5训练自定义模型 训练

说明: 1、训练过程请参考官网:https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data 2、本课使用的是YOLOv5 6.1版本,其他版本训练过程可能有不同,请以官网为准 3、硬件:Windows 11 、GPU GeForce 3070Ti…

element-ui tree组件实现在线增删改

这里要实现一个tree 增删改 <!--oracle巡检项--> <template><div class"oracle_instanceType"><el-row type"flex" align"middle" justify"space-between"><iclass"el-icon-s-fold iBox"click&q…

班级成绩管理利器

在现代教育管理中&#xff0c;一款方便快捷的班级查询工具是老师们的必备利器。易查分就是这样一款工具&#xff0c;能够帮助老师和学生轻松地管理和查询成绩。传统的纸质成绩单已经被易查分的电子成绩单所取代&#xff0c;这种方式带来了方便快捷等多种优势&#xff0c;为学生…

笔记1.2 计算机网络结构

网络边缘 主机、网络应用 接入网络&#xff0c;物理介质 有线或无线通信链路 网络核心&#xff08;核心网络&#xff09;&#xff1a; 互联的路由器&#xff08;或分组转发设备&#xff09; 网络之网络 一、网络边缘 主机&#xff08;端系统&#xff09;&#xff1a; 位…

PHP通过pem文件校验签名异常

问题描述&#xff1a; 在对接第三方支付过程中&#xff0c;支付成功异步回调时&#xff0c;校验签名&#xff0c;一直无法通过。 但是在支付成功时有一个同步返回也需要校验签名&#xff0c;用的是同样的校验方法&#xff0c;都没有问题。 当把回调时传递的参数放在postman中&a…

Windows自带的远程桌面连接教程

文章目录 1.鼠标右键“我的电脑”-“属性”2.在左侧找到“远程设置”-在远程桌面设置处勾选“允许远连接到此计算机”3.关闭防火墙&#xff0c;根据使用的网络选择关闭对应的防火墙4.远程连接按WINR,输入mstsc&#xff0c;回车进入到远程桌面连接页面 1.鼠标右键“我的电脑”-“…

2023/9/15 -- C++/QT

作业&#xff1a; 1> 将工程文件进行注释 2> 03login_box.pro: QT core gui #core核心库 gui图形开发库greaterThan(QT_MAJOR_VERSION, 4): QT widgets #4.0版本以上自动包含widgets库CONFIG c11 #支持C11版本# The following define makes your compiler em…

Elasticsearch 8.10 中引入查询规则 - query rules

作者&#xff1a;Kathleen DeRusso 我们很高兴宣布 Elasticsearch 8.10 中的查询规则&#xff01; 查询规则&#xff08;query rules&#xff09;允许你根据正在搜索的查询词或根据作为搜索查询的一部分提供的上下文信息来更改查询。 什么是查询规则&#xff1f; 查询规则&…

Linux MyFile

在之前&#xff0c;我们应该都多少接触过了C语言的文件管理&#xff0c;fopen&#xff0c;fclose&#xff0c;fputs....等函数的用法&#xff0c;也分析了系统层面上C语言是如何实现文件管理的。 回顾 上一个文章&#xff0c;我们讲解了十分重要的知识&#xff0c;在文件被打…

组合拳SSRF+redis未授权访问

目录 一、SSRF 二、redis未授权访问 三、组合利用 1.写入Webshell 2.反弹shell 一、SSRF 一台web服务器对其他服务器发起请求&#xff0c;以加载其他服务器的web内容或数据 但因请求参数没有进行严格过滤&#xff0c;攻击者可能会通过SSRF漏洞来访问敏感数据、执行未经授…

Deformable Convolution 可变形卷积

论文&#xff1a;https://openaccess.thecvf.com/content_ICCV_2017/papers/Dai_Deformable_Convolutional_Networks_ICCV_2017_paper.pdf 代码&#xff1a;https://github.com/4uiiurz1/pytorch-deform-conv-v2/blob/master/deform_conv_v2.py 参考博文&#xff1a;可变形卷…

【哈希加密算法】MD5和SHA-1基本介绍和使用!

一、哈希算法 哈希算法&#xff0c;根据碰撞概率&#xff0c;输出的长度越长&#xff0c;就越难产生碰撞&#xff0c;也就越安全。 常用的哈希算法如下&#xff1a; &#xff08;1&#xff09;哈希算法的用途 数据加密&#xff1a;哈希算法可以将原始数据转换成不可逆的加密字…

第二章:25+ Python 数据操作教程(第二十一节PIP连接错误:SSL 证书验证失败解决办法)

在公司网络中安装 python 包时最常见的问题是 SSL 证书验证失败。有时公司会屏蔽网络中的某些网站&#xff0c;因此员工无法访问这些网站。每当他们尝试访问这些网站时&#xff0c;都会显示“由于公司政策&#xff0c;访问被拒绝”。它会导致到达主要 python 网站时出现连接错误…

(面试经典刷题)挑战一周刷完150道-Python版本-第3天(40个题)-I(前10个题)

一、长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 可以是暴…

数据结构与算法(C语言版)P1---算法效率

算法的效率&#xff1a;算法的时间复杂度和空间复杂度 【本节目标】 1.算法效率2.时间复杂度3.空间复杂度4.常见时间复杂度以及复杂oj练习 1、算法效率 1.1、如何衡量一个算法是的好坏 如何衡量一个算法的好坏呢&#xff1f;比如斐波那契数列&#xff1a; long long Fib(…

面试官:我们深入聊聊Java虚拟机吧

哈喽&#xff01;大家好&#xff0c;我是奇哥&#xff0c;一位专门给面试官添堵的职业面试员 文章持续更新&#xff0c;可以微信搜索【小奇JAVA面试】第一时间阅读&#xff0c;回复【资料】更有我为大家准备的福利哟&#xff01; 文章目录 前言面试Java虚拟机内存模型垃圾收集器…

2023年CRM系统成功落地的5个标准

企业做CRM选型时都在思考投入产出比&#xff0c;花费上万元、甚至几十万元和几个月的时间购买和实施CRM&#xff0c;能否为公司带来降本增效的变革&#xff1f;CRM上线后&#xff0c;需要多长时间才能真切地看到效果&#xff1f;评估CRM的使用效果&#xff0c;需要每个企业制定…

【C++STL基础入门】queue基础使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、队列是什么二、queue的基础使用2.1 queue的构造函数2.2 queue的属性函数 总结 前言 C标准模板库&#xff08;STL&#xff09;提供了一系列强大的容器和算法…

vi/vim编辑器

vi和vim区别 vi 和 vim 是常见的文本编辑器&#xff0c;以下是它们之间的区别&#xff1a; 功能和特性&#xff1a; vi 是最早的版本&#xff0c;是在早期Unix系统中广泛使用的编辑器。vi 相对较简单&#xff0c;功能主要集中在基本的文本编辑操作上&#xff0c;如插入、删除、…

MyBatis: 配置文件解析流程

XmlConfigurationBuilder类来解析配置文件。 调用了build方法&#xff0c;其代码如下&#xff1a; 其中通过parse方法返回一个Configuration对象&#xff0c;在传递给build方法。 parse方法代码如下&#xff1a; 其中调用了parseConfiguration方法&#xff0c; 可以看到其中…