Docker 基础使用(3) 存储卷

文章目录

  • 存储卷的含义
  • 存储卷的分类
  • 存储卷的作用
  • 存储卷的使用
  • 存储卷实际使用案例 ---- MySQL灾难恢复
  • 存储卷的局限

Docker 基础使用(0)基础认识
Docker 基础使用 (1) 使用流程概览
Docker 基础使用(2) 镜像与容器
Docker 基础使用(3) 存储卷

存储卷的含义

存储卷中指的是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系,当在容器中的对应目录下写入数据时,容器会将其内容直接写入到宿主机上的对应目录。在宿主机上的这个与容器形成绑定关系的目录被称作存储卷。 卷(机制)的本质是文件或者目录,它可以绕过默认的联合文件系统,直接以文件或目录的形式存在于宿主机上。

在这里插入图片描述

存储卷的分类

管理卷:管理卷是由 Docker 维护和管理的卷,它们可以在容器之间共享和重用。这种类型的卷对于需要持久化数据的场景非常有用,因为它们可以更容易地进行备份、迁移和扩展。

解释:管理卷默认映射到宿主机的/var/lib/docker/volumes 目录下, 只需要在容器内指定容器的挂载点是什么,而被绑定宿主机下的那个目录,是由容器引擎 daemon 自行创建一个空的目录,或者使用一个已经存在的目录,与存储卷建立存储关系. 这种方式极大解脱用户在使用卷时的耦合关系,缺陷是用户无法指定那些使用目录

绑定数据卷:绑定数据卷允许将主机上的文件或目录直接挂载到容器中,从而使容器可以访问主机文件系统中的数据。这种方式非常灵活,但也增加了对主机文件系统的依赖。

解释:绑定数据卷映射到宿主机指定路径下,在宿主机上的路径要人工的指定一个特定的路径,在容器中也需要指定一个特定的路径,使两个已知的路径建立关联关系。

临时数据卷:临时数据卷是在容器运行时创建的卷,用于存储临时数据。一旦容器被删除,临时数据卷也会被删除,因此适合于临时性的数据存储需求。

解释:映射到于宿主机内存中,一旦容器停止运行,tmpfs mounts 会被移除,数据就会丢失,用于高性能的临时数据存储

在这里插入图片描述

存储卷的作用

  1. 满足容器内业务数据持久化的需求。
  2. UnionFS 对于修改删除等,一般效率非常低, 使用存储卷可以提高效率。
  3. 方便容器与宿主机的通信
  4. 方便同一宿主机上容器间的通讯

存储卷的使用

先看基础指令(无需记忆随用随查)

创建存储卷
docker volume create
查看卷详细信息 
docker volume inspect
列出卷 
docker volume ls
删除卷,需要容器不被使用的情况下
docker volume rm
删除不使用的本地卷
docker volume prune

创建存储卷,创建存储卷的两种常见方式

docker volume create my_volume创建一个使用 my_volume 存储卷的容器,并将存储卷挂载到容器中的 /path/in/container 路径上
docker run -d --name my_container -v my_volume:/path/in/container my_image

存储卷实际使用案例 ---- MySQL灾难恢复

  1. 拉取mysql 镜像

在这里插入图片描述

  1. 启动容器

在这里插入图片描述

docker container run --name mysql-demo 
-e MYSQL_ROOT_PASSWORD=wsk -itd 
-v /data/myworkdir/mysql-data:/var/lib/mysql mysql:5.7

这条命令的含义是创建一个名为mysql-demo的Docker容器,使用MySQL 5.7镜像。其中-e MYSQL_ROOT_PASSWORD=wsk 指定了MySQL的root用户密码为"wsk",-v /data/myworkdir/mysql-data:/var/lib/mysql将本地主机的/data/myworkdir/mysql-data目录挂载到容器内的/var/lib/mysql目录,以持久化存储MySQL数据。 -itd参数分别表示以交互模式运行,并且在后台以守护进程模式运行容器。

  1. 查看挂载信息
    在这里插入图片描述
    docker container inspect mysql-demo | grep "Mounts" -A 10

这条命令的含义是使用docker container inspect命令来获取名为mysql-demo的Docker容器的详细信息,并通过grep命令筛选出包含"Mounts"关键词的行及其后续10行的信息。这样可以查看容器中挂载的文件系统信息,包括挂载的源路径、目标路径等。

  1. 连接 MySQL 的 shell, 创建数据库与表结构(建库建表省略)
docker container exec -it mysql-demo /bin/bash

在这里插入图片描述
在这里插入图片描述

docker container exec -it mysql-demo /bin/bash

这条命令的含义是在名为mysql-demo的Docker容器中以交互模式执行/bin/bash命令,即进入容器的bash shell环境,以便在容器内部进行命令操作和调试。

进入bash shell环境,提示符发生改变,输入指令进入mysql。

5 . 在宿主机中查看 volume
在这里插入图片描述

  1. 模拟MySQL容器意外终止并删除

在这里插入图片描述

docker stop mysql-demo
docker rm mysql-demo
  1. 再此启动新的demo并验证数据是否恢复成功

在这里插入图片描述
在这里插入图片描述
发现数据任然存在。

完整指令为

docker container run --name mysql-demo -e MYSQL_ROOT_PASSWORD=wsk -itd -v /data/myworkdir/mysql-data:/var/lib/mysql mysql:5.7
docker container inspect mysql-demo | grep "Mounts" -A 10
docker container exec -it mysql-demo /bin/bash
mysql -u root -p
在数据库中插入数据docker stop mysql-demo
docker rm mysql-demodocker container run --name new-mysql-demo -e MYSQL_ROOT_PASSWORD=wsk -itd -v /data/myworkdir/mysql-data:/var/lib/mysql mysql:5.7
docker container exec -it new-mysql-demo /bin/bash
mysql -u root -p
查看数据

存储卷的局限

1. 不能跨主机(物理上的宿主机)

docker 存储卷是使用其所在的宿主机上的本地文件系统目录,也就是宿主机有一块磁盘,这块磁盘并没有共享给其他的 docker 主机,容器在这宿主机上停止或删除,是可以重新再创建的,但是不能调度到其他的主机上,这是 docker 本身没有解决的问题

2. 启动流程复杂

从前面的实操过程中可以看出,容器有一个问题,容器的启动一般与进程的启动不太一样,就是容器启动时选项比较多,如果下次再启动时,很容器会忘记它启动时的选项,所以最好有一个文件来保存容器的启动。

这就需要容器编排工具的引入。一般情况下,是使用命令来启动操作 docker, 但是可以通过文件来读,也就读文件来启动,读所需要的存储卷等,但是它也只是操作一个容器,如果要几十上百个容器操作,就需要专业的容器编排工具。

对于有状态要持久的集群化组件,如 mysql 的主从。部署维护一个 Mysql 主从需要运维知识、经验整合进去才能实现所谓的部署,扩展或缩容,出现问题后修复,必须要了解集群的规模有多大,有多少个主节点,有多少个从节点,主节点上有多少个库,这些都要一清二楚,才能修复故障,这些就强依赖于运维经验这种复杂的场景往往还是需要人力,很难有完美的工具出现。

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

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

相关文章

LeetCode24_两两交换链表中的节点

. - 力扣(LeetCode) 一、题目: 二、模拟 1. 第一步 2. 第二步:current next.next 3. 第三步: next.next current 4. 第四步:pre.next next; 到这里为止实现了两个节点的交换 5. 第五步:pre current;…

【机器学习】朴素贝叶斯算法及其应用探索

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 朴素贝叶斯算法及其应用探索引言1. 朴素贝叶斯基本概念1.1 贝叶斯定理回顾1.2 朴…

基于 Spring Boot 博客系统开发(十三)

基于 Spring Boot 博客系统开发(十三) 本系统是简易的个人博客系统开发,为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。🌿🌿🌿 基于 Spring Boot 博客系统开发(十二)&…

【Linux-Uboot】

Linux-Uboot ■ Uboot使用 串口软件(超级终端)接受文件■ ■ Uboot使用 串口软件(超级终端)接受文件 添加链接描述 ■

NGINX之location和rewrite

一.NGINX常用的正则表达式 二.Location location作用:对访问的路径做访问控制或者代理转发 1.location 常用的匹配规则: 进行普通字符精确匹配,也就是完全匹配^~ / 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 …

JVM学习-监控工具(一)

使用数据说明问题,使用知识分析问题,使用工具处理问题 无监控,不调优! 命令行工具 在JDK安装目录下,可以查看到相应的命令行工具,如下图 jps(Java Process Status) 显示指定系统内所有的Hotpot虚拟机…

【自然语言处理】文本情感分析

文本情感分析 1 任务目标 1.1 案例简介 情感分析旨在挖掘文本中的主观信息,它是自然语言处理中的经典任务。在本次任务中,我们将在影评文本数据集(Rotten Tomato)上进行情感分析,通过实现课堂讲授的模型方法&#x…

OpenStack无效数据清空脚本

​​​​​​​介绍 在以openstack为底层开发的一些项目中,常常会遇到项目中数据与openstack数据不同步的问题,为了简化清空无效数据的繁琐,提供以下脚本便于运维操作。 环境变量 [rootcloud ~]# cat admin.sh export OS_USERNAMEadmin ex…

蓝图collapseNodes很有用

学到了,选中N个节点后,再右键collapseNode,可以使代码很清晰,双击后可以看到相应的代码,具有层次感。

【python科学文献计量】关于中国知网检索策略的验证,以事故伤害严重程度检索为例

关于中国知网检索策略的验证,以事故伤害严重程度检索为例 1 背景2 文献下载3 数据处理1 背景 由于要进行相关研究内容的综述,需要了解当前我国对于事故伤害严重程度的研究现状,采用国内较为知名的检索网站(中国知网)进行文献数据集检索 由于最近知网出bug,检索的结果在…

【最新鸿蒙应用开发】——使用axios完成手机号注册业务

使用Axios请求实现目标效果图: 短信验证码登录 校验图形验证码,校验通过 发送短信验证码到用户手机上,可通过在线 WebSocket查看:wss://guardian-api.itheima.net/verifyCode 根据 手机号 短信验证码 实现登录 更新图形验证码…

日本指数实时API接口

日本 指数 实时API接口 # Restful API https://tsanghi.com/api/fin/index/JPN/realtime?token{token}&ticker{ticker}指定指数代码,获取该指数的实时行情(开、高、低、收、量)。 更新周期:实时。 请求方式:GET。…

CV每日论文--2024.6.4

1、Mixed Diffusion for 3D Indoor Scene Synthesis 中文 标题:用于 3D 室内场景合成的混合扩散 简介:这篇论文提出了一种名为MiDiffusion的混合离散-连续扩散模型,用于从给定的房间类型、平面图和可能存在的物体中合成逼真的3D室内场景。 作者指出,该…

【Unity实战篇 】 | Unity实现UGUI颜色渐变,支持透明渐变

前言 【Unity实战篇 】 | Unity实现UGUI颜色渐变,支持透明渐变一、双层颜色渐变1.1 组件属性面板1.2 效果及代码 二、多层颜色渐变2.1 组件属性面板2.2 效果及代码 总结 前言 在Unity中UGUI的实现图片和文字颜色渐变效果是一个很常见的需求。下面就来看一下颜色渐变…

机器学习中的集成学习

💬内容概要 1 集成学习概述及主要研究领域 2 简单集成技术  2.1 投票法  2.2 平均法  2.3 加权平均 3 高级集成技术  3.1 Bagging  3.2 Boosting  3.3 Bagging vs Boosting 4 基于Bagging和Boosting的机器学习算法  4.1 sklearn中的Bagging算法  4.2 sklea…

1961. 检查字符串是否为数组前缀 - 力扣

1. 题目 给你一个字符串 s 和一个字符串数组 words ,请你判断 s 是否为 words 的 前缀字符串 。 字符串 s 要成为 words 的 前缀字符串 ,需要满足:s 可以由 words 中的前 k(k 为 正数 )个字符串按顺序相连得到&#xf…

大型语言模型的工作原理(LLM:从零学起)

目录 一、说明 二、LLM如何运作 三、预训练:基本模型 四、微调:培训助手 五、RLHF:从人类反馈中强化学习 六、提示工程 七、总结 一、说明 这是我们谈论LLM系列的第二篇文章。在本文中,我们旨在为大型语言模型 (LLM&am…

企业微信hook接口协议,ipad协议http,chatid转群id

chatid转群id 参数名必选类型说明uuid是String每个实例的唯一标识,根据uuid操作具体企业微信 请求示例 {"uuid":"3240fde0-45e2-48c0-90e8-cb098d0ebe43","chatid":"wrO9o4EAAAeR_nSlmjeX1RWrKAKxN8jQ" } 返回示例 {&…

【银河麒麟V10服务器OS-系统根分区扩容】指导教程手册

【银河麒麟V10服务器OS-系统根分区扩容】指导教程手册 环境信息:VMware虚拟软件16.0 首先查看KylinOS服务器版本:nkvers 备注: (Tercel) 版本是 V10 SP1 版本, (Sword) 版本是 V10 SP2 版本, (Lance) 版本是 V10 …

UE4 使用样条线做鱼儿封闭路径动画

描述:鱼儿的游动动画的特点 1.通常是始终保持Y (Pitch)轴角度不变 2.调头的时候改变的是Z轴角度 效果:调头的时候比较自然 蓝图: 最后为了让鱼儿有恒定的游动速度,增加以下蓝图节点,游动速度为50