docker基础5——数据存储卷

news2024/11/26 1:33:34

文章目录

  • 一、基本了解
  • 二、存储卷
    • 2.1 docker挂载卷
    • 2.2 绑定挂载卷
    • 2.3 设置容器挂在卷权限
  • 三、数据卷容器
  • 四、数据卷容器迁移数据

一、基本了解

为什么会有存储卷?

  1. Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。
  2. 如果运行中的容器修改了现有的一个已经存在的文件,那么该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本依然存在,只是已经被读写层中该文件的副本所隐藏,这就是“写时复制(COW)”机制。
  3. 对于这种方式来说,我们去访问一个文件,修改和删除等一类的操作,其效率会非常的低,因为隔着很多层镜像。而要想绕过这种限制,我们可以通过使用存储卷的机制来实现。
    在这里插入图片描述

存储卷概念:

  • 存储卷就是将宿主机的本地目录文件,与容器内的某一目录建立绑定关系。
  • 当在容器中的这个目录下写入数据时,容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录。
  • 在宿主机上的这个与容器形成绑定关系的目录被称作存储卷。

存储卷优缺点:

  1. 关闭并重启容器,其数据不受影响,但删除Docker容器,则其更改将会全部丢失。
  2. 存储于联合挂载文件系统中,不易于宿主机访问。
  3. 容器间数据共享不便。
  4. 删除容器其数据会丢失。

存储卷分类:

  1. docker容器挂载卷。docker默认把容器的/目录挂载到本地/var/lib/docker/overlay2/[some volume id]/diff目录下。当容器删除后,本地的挂载目录数据也会被删除。
  2. 绑定挂载卷。自定义容器挂载目录,不能时容器的/目录,必须是容器/目录下的目录,比如/data目录。自定义本地挂载点。当容器删除后,本地挂载点数据不会被删除。
    在这里插入图片描述
    在这里插入图片描述

2种容器数据管理方式:

  • 存储卷(Data Volumes)
  • 数据卷容器(Data Volumes Containers)

1.测试docker容器挂在卷。当容器停止运行时,本地数据存在;当容器删除时,本地数据消失。
在这里插入图片描述

2.测试绑定挂在卷。当容器删除后,本地数据依然存在。
在这里插入图片描述

二、存储卷

2.1 docker挂载卷

  • 缺点:容器删除后,本地数据随之消失。
  • 语法:docker run -it --name CONTAINER_NAME -v VOLUMEDIR IMAGE_NAME

1.不指定容器挂载点,默认将容器的/目录挂载到本地/var/lib/docker/overlay2/…/diff目录。容器删除,本地数据消失。

docker container run -it --rm busybox /bin/sh

在这里插入图片描述
2.指定容器挂载点,将容器的/data目录挂载到本地/var/lib/docker/volumes/…/_data目录。容器删除,本地数据消失。
在这里插入图片描述

2.2 绑定挂载卷

  • 优点:容器删除,本地数据依然存在。
  • 语法:docker run -it --name CONTAINER_NAME -v HOSTDIR:VOLUMEDIR IMAGE_NAME

1.将容器内的/data目录挂载到本地/data目录。容器删除,本地数据依然存在。

在这里插入图片描述

2.创建一个nginx容器,将nginx网页目录映射到本地,在本地生成网页文件。

docker container run -d -p 80:80  -v /data/html/nginx:/usr/share/nginx/html nginx

在这里插入图片描述

2.3 设置容器挂在卷权限

  • docker挂载数据卷的默认权限是读写(rw),但一般设置为只读(ro),不让用户在容器内做修改,只能修改本地挂载出来的文件。

1.创建一个nginx容器,将容器内的/data目录映射到本地的/opt/qingjun目录,容器内的目录文件只能读不能写,本地可读可写。

docker run -d  --name web -v /opt/qingjun:/data:ro nginx

在这里插入图片描述

三、数据卷容器

  • 当2个容器之间需要共享持续更新的数据时,可以使用数据卷容器。
  • 单独起一个容器作为数据卷容器,专门存放数据,其他两个容器挂载这个容器即可。

1.测试挂在卷容器效果。

//创建数据卷容器db,/dbdata目录为其他容器需要挂载的目录。
docker run -itd -v /dbdata --name db centos /bin/bash


//创建业务容器,指定数据来源,挂载db容器。
docker run -itd --volumes-from db --name qingjun1 centos /bin/bash
docker run -itd --volumes-from db --name qingjun2 centos /bin/bash

//进入第一个业务容器写入数据。
docker exec -it qingjun1 /bin/bash
[root@87b8f5d5f5ce /]# cd dbdata/
[root@87b8f5d5f5ce dbdata]# echo '111' > baimu.txt

//进入第二个业务容器查看数据。
docker exec -it qingjun2 /bin/bash
[root@2c4657f3b70c /]# cd dbdata/
[root@2c4657f3b70c dbdata]# cat baimu.txt 
111

在这里插入图片描述

四、数据卷容器迁移数据

  • 可以利用数据卷容器对其中的数据卷进行备份、恢复,以实现数据的迁移。

1.备份数据。

//此时有数据卷容器db,/dbdata目录下有其他业务容器需要数据文件baimu.txt。
docker run -itd -v /dbdata --name db centos /bin/bash

//业务容器qingjun1的数据来自db容器。
docker run -itd --name qingjun1 --volumes-from db centos /bin/bash

//创建备份容器。指定备份数据来源db容器,所以bck容器有数据卷容器目录/dbtada
//bck备份容器里的/dbdata数据进行压缩打包存放到/bck下,并将/bck目录映射到本地当前目录。
//本地生成备份数据压缩包。
docker run -it --name bck -v $(pwd):/bck --volumes-from db centos tar -zcf /bck/test.tar.gz /dbdata

在这里插入图片描述
2.恢复数据。

//指定要把数据恢复到哪个容器里,该容器需要提前创建要存放恢复数据的目录。
docker run -it --name backup -v /www centos /bin/bash

//将本地当前目录的备份数据挂载到backup容器中的/data目录,并解压挂载卷容器backup中数据压缩包到/www目录。
docker run -it --volumes-from backup -v $(pwd):/data centos tar xf /data/test.tar.gz -C /www

在这里插入图片描述

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

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

相关文章

【杂谈理解】STM32定时器启动模式

STM32定时器启动方式 前言 事情的起因本来是探究为什么在中断模式下的回调中函数中,我不小心加了延时函数为什么会导致崩溃,很遗憾啊,没看出来,不过需要在中断事件中延时的话,倒是可以用轮询模式下的配置。本文探究HA…

Aurix TC3xx系列MCU ADC采集时间计算方法(四)

文章目录 1 前言2 各阶段时间的计算方法2.1 计算公式2.2 采样阶段2.3 转换阶段2.4 降噪阶段2.5 校准阶段3 采集时间示例>>返回总目录<< 1 前言 在项目开发前期评估阶段,会比较关注ADC的采集时间,我们可以给出一个大概的采样的时间0.5us~1.2us左右,但是对于精确…

Python爬虫-贝壳二手房

前言 本文是该专栏的第3篇,后面会持续分享python爬虫案例干货,记得关注。 本文以某二手房网为例,如下图所示,采集对应城市的二手房源数据。具体思路和方法跟着笔者直接往下看正文详细内容。(附带完整代码) 正文 地址:aHR0cHM6Ly9zei5rZS5jb20vZXJzaG91ZmFuZy8= 目标:…

代理模式(java)

目录 结构 静态代理案例 代码实现 售票类 火车站类 代理类 测试类 优缺点 优点 缺点 结构 代理&#xff08;Proxy&#xff09;模式分为三种角色&#xff1a; 抽象主题&#xff08;Subject&#xff09;类&#xff1a; 通过接口或抽象类声明真实主题和代理对象实现的业务…

git cherry-pick 的使用

cherry-pick 精心挑选的意思&#xff0c;即可以从一个分支上挑选一个&#xff08;或多个&#xff09;修改&#xff0c;提交到当前分支上&#xff0c;不过 cherry-pick 只能是本地操作&#xff0c;即源分支上必须有的commit 才能 cherry-pick。遇到的情况可能是&#xff0c;源分…

JMeter的使用(2)

JMeter生成测试报告使用的是Ant(Maven)构建工具来生成HTML的测试报告。 ant执行的条件是需要有build.xml的文件的&#xff0c;build.xml文件里面主要编写三个内容&#xff1a; 1、定义了被执行的测试脚本 2、定义了测试报告的目录 3、定义了自动发送邮件 HTTP COOKIE管理器&am…

cgo调用,高效快速稳定,无内存碰撞

一、背景 因为密码学有很多较快的算法是基于c或c纂修&#xff0c;而工程上主要以go语言为主&#xff0c;所以在此梳理一些go调用c常见问题和用例。 有很多奇特的方式进行传输&#xff0c;但是想要性能最优还是以指针传输作为主要传输方式。 一些简单的计算可以直接使用c编写…

Python中数据和JSON互相转换

什么是json JSON是一种轻量级的数据交互格式。可以按照JSON指定的格式去组织和封装数据 。JSON本质上是一个带有特定格式的字符串主要功能&#xff1a;json就是一种在各个编程语言中流通的数据格式&#xff0c;负责不同编程语言中的数据传递和交互. 类似于&#xff1a; 国际通…

Apache Struts2漏洞复现之s2-001漏洞复现

0x01 声明&#xff1a; 仅供学习参考使用&#xff0c;请勿用作违法用途&#xff0c;否则后果自负。 0x02 简介&#xff1a; Apache Struts 2是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java ServletAPI&#xff0c;鼓励开发者采用MVC架构…

LeetCode45.Jump-Game-II<跳跃游戏II>

题目&#xff1a; 思路&#xff1a; 从上次大神那里获得的灵感 这题问的是次数,那么我们需要确保 1,能否跳到终点 2,得到次数. 第一次条获得的是nums[0],那么第一个数就是我们第一次能跳跃的范围.每次在范围里获得最大值.并且次数加一.然后进入下一次范围;即可得到次数; 代码…

sql中with as用法/with-as 性能调优/with用法

文章目录 一、概述二、基本语法三、使用场景3.1、定义CTE,并为每列重命名3.2、多次引用/多次定义3.3、with与union all联合使用3.4、with返回多种结果的值3.5、with与insert使用 四、递归查询4.1、语法4.2、使用场景4.2.1、用with递归构造1-10的数据4.2.2、with与insert递归造数…

C++OpenCV(6):图像阈值操作

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 &#x1f506; OpenCV项目地址及源代码&#xff1a;点击这里 文章目录 图像阈值化 图像阈值化 阈值又叫临界值&#xff0c;是指一个效应能够产生的最低值或最高值。 例如我们选择的阈值为125&#xff0c;则…

AI课堂教学质量评估系统算法 yolov7

AI课堂教学质量评估系统通过yolov7网络模型框架利用摄像头和人脸识别技术&#xff0c;AI课堂教学质量评估系统实时监测学生的上课表情和课堂行为。同时&#xff0c;还结合语音识别技术和听课专注度分析算法&#xff0c;对学生的听课专注度进行评估&#xff0c;生成教学质量报告…

SQL与NoSQL数据库选型及实际业务场景探讨

在企业系统架构设计中&#xff0c;选择合适的数据库类型是一项关键决策。本文将对比SQL和NoSQL数据库的特点&#xff0c;分析它们在数据模型、可扩展性、一致性与事务、查询复杂性与频率&#xff0c;以及性能与延迟等方面的优势和劣势。同时&#xff0c;结合轻易云数据集成平台…

专项练习-1数据结构-02字符串

1. 下面关于「串」的叙述中&#xff0c;哪一个是不正确的&#xff1f;&#xff08; &#xff09; A 串是字符的有限序列 B 空串是由空格构成的串 C 模式匹配是串的一种重要运算 D 串既可以采用顺序存储&#xff0c;也可以采用链式存储 正确答案&#xff1a;B 官方解析&…

在vscode中运行Hbuilder创建的项目

想必习惯使用vscode的人突然使用HBuilder很不习惯吧&#xff0c;但是HBuilder创建的项目本身没有调试功能。当你有一个app项目但又不想使用HBuilder编写&#xff0c;需要浏览器调试的时候&#xff0c;你这时就需要一个插件了&#xff1a;uni run 插件 基于HBuilderX的采用unia…

【数据标注】yolo系列中 labelme 标记的 json 文件转 txt 文件保存

在深度学习领域中&#xff0c;数据的标注方式和对应的数据格式确实五花八门。下面是一些常见的标注方式和对应的数据格式&#xff1a; 目标检测标注方式&#xff1a;对于图像目标检测任务&#xff0c;常见的标注方式包括Bounding Box、Mask、Keypoint等。其中&#xff0c; Boun…

Postman怎么做接口测试-以简单的登录接口为例

我们就以登录某测试系统为例子&#xff0c;实现在Postman上做接口测试 一、首先打开系统首页首页&#xff0c;做一个登录操作&#xff08;目的是获取接口url及参数&#xff09;&#xff1a;一般在公司做接口测试的时候页面还没有出来&#xff0c;我们需要根据接口文档进行接口…

java学习(二):反射

系列文章目录 https://editor.csdn.net/md/?articleId131757340 文章目录 系列文章目录参考【1】注解1. 什么是注解2. 内置注解3. 元注解4.自定义注解 【2】反射--基本概念一、反射的基本概念1. 为什么要用反射&#xff1f;2. 什么是反射&#xff1f;3. 用和不用反射的区别&a…

spring复习:(49)@Configuration配置类上的注解是在哪里被解析的?

主类示例源代码如下&#xff1a; 配置类源码如下&#xff1a; 进入context.register方法&#xff1a; 进入this.reader.register方法&#xff1a; 进入registerBean方法&#xff1a; 进入doRegisterBean方法&#xff1a; 进入AnnotatedGenericBeanDefinition构造方法&am…