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

【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.rhkb.cn/news/133198.html

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

相关文章

android注解之APT和javapoet

前言 前面我们已经讲过注解的基本知识,对于注解还不太了解的,可以去看一下之前的文章, android 注解详解_袁震的博客-CSDN博客。 之前我们在讲注解的时候,提到过APT和JavaPoet,那么什么是APT和JavaPoet呢&#xff1…

人工智能安全-6-SQL注入检测

0 提纲 概述SQL注入方法SQL注入的检测方法SQL语句的特征提取天池AI上的实践 1 概述 SQLIA:SQL injection attack SQL 注入攻击是一个简单且被广泛理解的技术,它把 SQL 查询片段插入到 GET 或 POST 参数里提交到网络应用。 由于SQL数据库在Web应用中的…

Qt(day1)

思维导图 Qt实现第一个web的基础页面 #include "mywnd.h" #include "ui_mywnd.h" #include<QLabel> #include<QLineEdit> #include<qpushbutton.h>MyWnd::MyWnd(QWidget *parent): QMainWindow(parent), ui(new Ui::MyWnd) {ui->set…

Redis的介绍、安装和配置

文章目录 一、redis官网二、redis是什么三、能干嘛总体功能一图概述优势小总结 三、Redis的下载与安装Redis的安装Redis迭代演化和Redis7新特性新特性部分说明Redis的安装 安装步骤总结Redis的卸载 一、redis官网 https://redis.io/ 中文官网&#xff1a;http://www.redis.cn/…

【【萌新编写risc-v之软件的学习使用】】

萌新编写risc-v软件的学习使用 对于vscode我其实没什么好说的 就是先配置好环境 其实vscde作为一个编译器的软件 其实并不需要指望能往里面加载多少功能 我们需要做的就是赋予编辑器更好用的功能和体验 有些人会在vscode里面甚至加入波形 仿真 我觉得不如交给 vivado来用 在vs…

【计算机网络】传输层协议——TCP(下)

文章目录 1. 三次握手三次握手的本质是建立链接&#xff0c;什么是链接&#xff1f;整体过程三次握手过程中报文丢失问题为什么2次握手不可以&#xff1f;为什么要三次握手&#xff1f; 2. 四次挥手整体过程为什么要等待2MSL 3. 流量控制4. 滑动窗口共识滑动窗口的一般情况理解…

【面试经典150 | 双指针】两数之和

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;暴力枚举方法二&#xff1a;哈希表方法三&#xff1a;二分法方法四&#xff1a;双指针 知识回顾写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢…

【推荐】赴日IT课程 做赴日IT我该学什么?

许多想要做赴日IT的朋友问我说&#xff0c;我都该准备什么&#xff0c;或者我该学些什么才能达到可以做赴日程序员的水平呢&#xff1f;今天我就来跟大家聊一下这个问题。要说做准备&#xff0c;你需要有全日制大专及以上的学历才能获得赴日的资格&#xff0c;如果没有我们就先…

Scrum敏捷开发端到端管理流程

Leangoo领歌是Scrum中文网&#xff08;scrum.cn&#xff09;旗下的一款永久免费的敏捷研发管理工具。 Leangoo领歌覆盖了敏捷研发全流程&#xff0c;它提供端到端敏捷研发管理解决方案&#xff0c;包括小型团队敏捷开发&#xff0c;规模化敏捷SAFe&#xff0c;Scrum of Scrums…

Vue3 Ajax(axios)异步

文章目录 Vue3 Ajax(axios)异步1. 基础1.1 安装Ajax1.2 使用方法1.3 浏览器支持情况 2. GET方法2.1 参数传递2.2 实例 3. POST方法4. 执行多个并发请求5. axios API5.1 传递配置创建请求5.2 请求方法的别名5.3 并发5.4 创建实例5.5 实例方法5.6 请求配置项5.7 响应结构5.8 配置…

PAL/NTSC/1080I和interlaced scan(隔行扫描)

目录 1.PAL/NTSC和1080I 2.PAL/NTSC/1080I的timing 2.1 NTSC的垂直同步 2.2 PAL的垂直同步​编辑 2.3 1080i50FPS的vic20的时序 3.interlaced video timing实现说明 1.PAL/NTSC和1080I NTSC 和PAL 是两种不同视讯标准, 两种都是CRT时代遗留下的产物, 也都使用Interlace技术…

3D WEB轻量化引擎HOOPS Commuicator技术概览(一):数据导入与加载

HOOPS Communicator是一款功能强大的SDK&#xff0c;适用于基于Web的高级工程应用程序&#xff0c;代表HOOPS Web平台的Web开发组件。使用HOOPS Communicator&#xff0c;您可以构建一个在 Web浏览器中提供3D模型的Web应用程序。 HOOPS Communicator可以本地加载多种模型格式。…

Postman应用——初步了解postman

Postman 是一个用于构建和使用 API 的 API 平台&#xff0c;Postman 简化了 API 生命周期的每个步骤并简化了协作&#xff0c;可以更快地创建更好的 API。 Postman 包含一个基于Node.js的强大的运行时&#xff0c;允许您向请求&#xff08;request&#xff09;和分组&#xff…

今晚8点,iPhone15开启预售

北京时间9月15日晚8点&#xff0c;备受全球果粉期待的苹果iPhone15系列手机正式开启预售。此次预售在苹果官网Apple Store在线商店、天猫Apple Store官方旗舰店以及Apple Store官方在线商店微信小程序同步进行。 今年苹果公司将Apple Store在线商店、天猫Apple Store官方旗舰店…

【JAVA】项目部署

IDEA部署maven&#xff1a;https://www.cnblogs.com/ckfuture/p/15821541.html MySQL数据库安装&#xff1a;https://blog.csdn.net/SoloVersion/article/details/123760428 SQLyog安装&#xff1a; https://blog.csdn.net/qq_43543789/article/details/107997510 git安装&a…

JDBC基本概念

什么是JDBC JDBC概念 JDBC&#xff08;Java DataBase Connectivity&#xff09;是一套统一的基于Java语言的关系数据库编程接口规范。 该规范允许将SQL语句作为参数通过JDBC接口发送给远端数据库&#xff0c; …

电子技术基础(三)__第1章电路分析基础_第13篇__正弦交流电的相量表示

本文讲解 正弦交流电的稳态分析————正弦量的相量表示 一 基本概念 接下来&#xff0c; 注意: 大写字母 上 加点 表示相量 例如&#xff1a; 因为这里有 I m I_{m} Im​ 是幅值&#xff0c; 所以此相量称为幅值相量。 相量 其实就是一个复数&#xff0c; 表示正弦量的复…

弗恩基 Flex-N-Gate EDI 需求分析

弗恩基Flex-N-Gate是一家总部位于美国伊利诺伊州的汽车零部件制造公司。该公司成立于1956年&#xff0c;由亿万富翁企业家 Shahid Khan 创办。Flex-N-Gate 主要专注于设计、制造和供应汽车外部和内部零部件&#xff0c;包括前后保险杠系统、灯具、车门零件、悬挂系统等。 该公…

IOMesh 为 KubeVirt 提供高效稳定的持久化存储支持(附用户实践)

7 月 11 日&#xff0c;KubeVirt 社区正式宣布发布 Kubernetes 原生虚拟机管理插件 KubeVirt v1.0。这一版本发布不仅标志着 KubeVirt 已进化为生产就绪的虚拟机管理解决方案&#xff0c;也为正在使用虚拟化环境的用户提供了更多元的云化转型路线&#xff1a;搭配 Kubernetes 持…

【结构型】享元模式(Flyweight)

目录 享元模式(Flyweight)适用场景享元模式实例代码&#xff08;Java&#xff09; 享元模式(Flyweight) 运用共享技术有效地支持大量细粒度的对象。&#xff08;业务模型的对象进行细分得到科学合理的更多对象&#xff09; 适用场景 一个应用程序使用了大量的对象。完全由于…