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-demo

docker 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 主从需要运维知识、经验整合进去才能实现所谓的部署,扩展或缩容,出现问题后修复,必须要了解集群的规模有多大,有多少个主节点,有多少个从节点,主节点上有多少个库,这些都要一清二楚,才能修复故障,这些就强依赖于运维经验这种复杂的场景往往还是需要人力,很难有完美的工具出现。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MetaGPT:重塑自然语言编程,多智能体引领模型训练的革新探索

近年来,人工智能(AI)和自然语言处理(NLP)领域取得了重大进展,MetaGPT作为一个多智能体框架,正引领着这一领域的变革。本文将深入探讨MetaGPT的核心技术、实际应用及其对未来编程模式的影响。 引…

Python保存为json中文Unicode乱码解决json.dump()

保存为json中文Unicode乱码: 可以看到,中文字符没有乱码,只是出现了反斜杠,此时解决方法应考虑是否进行了二次序列化。 一、原因1 在dump时加入ensure_asciiFalse 即可解决,即json.dump(json_data, f, indent4, en…

antd-vue - - - - - a-select结合i18n使用(踩坑问题)

antd-vue - - - - - a-select结合i18n使用&#xff08;踩坑问题&#xff09; 1. 当前代码 & 效果2. 解决办法 1. 当前代码 & 效果 <a-selectv-model:value"formState.quickSwitching":options"quickSwitchingOptions"search"handleSearch…

Linux.用户

使用su - 切换用户 切换root时要输入密码&#xff0c;但是看不到 创建用户组 groupadd用户组名&#xff0c;用getent查看有哪些组 getent group 创建用户 在root身份中使用gentent passwd 可以查当前的用户信息 使用getent group查看有哪些组 使用chmod修改权限 快捷方法…

S4 BP 维护

前台输入Tcode:BP 问候填写金税开票信息使用的开户行名称,注释填写金税开票信息使用的开户行代码 屏幕下滑按需填写其他数据,如:街道2,街道3,街道/门牌号,街道4,街道5,区域,邮编、城市、国家、地区、语言,电话(发票地址里的电话(必须是客户开票资料里提供的电话,会…

k8s部署(单点或)高可用consul集群

在 Kubernetes 集群上部署一个高可用的 Consul 集群&#xff0c;确保一个节点挂了之后不会影响已注册到 Consul 的服务。利用 StatefulSet 和无头服务 HeadLess 的选举机制来实现 Consul 集群的高可用性&#xff0c;数据持久化方式选择HostPath&#xff0c;通过 nodeSelector 节…

HTML基本元素包含HTML表单验证

可将以下代码复制另存为一个HTML文件浏览器打开自己去看看实际使用效果 <!DOCTYPE html> <html> <head> <meta charset"utf-8"><title>测试</title> </head> <body> <h1>很多事</h1> <h1><b&…

视频融合共享平台LntonCVS视频监控业务平台可视化智慧仓储应用方案

对于当前许多大型工厂和物流基地来说&#xff0c;仓库是存放物品的重要场所。仓储存放着大量货物&#xff0c;并且配备有大量辅助设备&#xff0c;因此需要全方位的监管以避免发生安全事故&#xff0c;造成财产损失。传统的人工巡检方式已经无法满足现有大规模监管的要求&#…

【第九课】空间数据基础与处理——空间参考处理

一、前言 地图图层中的所有元素都具有特定的地理位置和范围&#xff0c;这使得它们能够定 位到地球表面上相应的位置。精确定位地理要素对于制图和 GIS来说都至关 重要&#xff0c;而要正确地描述要素的位置和形状&#xff0c;需要引入一个用于定义位置的框 架———空间参考。…

从MLP到卷积

1.从MLP到卷积层 最近要做多通道的实验&#xff0c;所以重新将处理图像的基础模型回顾一下&#xff0c;什么是卷积&#xff1f;卷积本质是是一种特殊的全连接层。 1.1怎么w的权重从一个值变成了4维呢?可以这样理解&#xff0c;在此举一个例子&#xff1a; 其实本质可以看成&…

uniapp3步使用goeasy完成本地消息推送

1.注册登录goeasy&#xff0c;下载测试demo 2.替换demo中main.js中的key 3.打包一个H5&#xff0c;一个自定义基座。 h5发消息&#xff0c;app收消息&#xff0c;然后创建消息通知就好了。记得打开app的消息通知 demo很简单&#xff0c;demo都跑通了&#xff0c;在搬到自己项目…

NEJM新英格兰医学期刊文献在家如何查阅下载

今天收到的求助文献中有一篇是NEJM新英格兰医学期刊中的一篇文献&#xff0c;篇名“Osimertinib after Chemoradiotherapy in Stage III EGFR -Mutated NSCLC” 首先我们先简单了解一下NEJM新英格兰医学期刊&#xff1a; NEJM新英格兰医学期刊&#xff1a;New England Journa…

c# - - - winform 右下角气球提示通知

c# - - - winform 右下角气球提示通知 winform 右下角气球提示通知 1.1 winform 右下角气球提示通知 在工具箱中点击 NotifyIcon 控件&#xff0c;拖动到 Form1 窗体上添加这个控件。 在“提示”按钮的点击事件中写气球提示通知内容。 public partial class Form1 : Form {…

如何利用CXL技术突破内存墙?-2

为了解决这些问题&#xff0c;业界正积极寻求新的技术和标准&#xff0c;比如Compute Express Link (CXL)&#xff0c;它旨在通过提供标准化的高速互连来提高内存带宽、降低延迟&#xff0c;并简化内存扩展的软件集成&#xff0c;从而有效地打破内存墙的限制。 通过使用CXL&am…

i.MX8MP平台开发分享(RDC资源分配控制器篇)

1.spec RDC 配置信息被发送到结构端口、内存垫片、信号控制器和外设&#xff0c;以根据域分配控制访问。 结构使用与每个端口相关的域标识符&#xff0c;将此信息与总线事务一起包含在内。当从属加密垫圈遇到总线事务时&#xff0c;它会将事务域 ID 与 RDC 提供的允许域列表进…

同一个tomcat不同端口运行不同项目

第一步&#xff1a;修改 server.xml 文件 修改 tomcat 安装目录下 conf/server.xml 文件&#xff0c;需要几个端口就添加几个 Service 节点。 配置 2 个端口&#xff1a;9131 和 9133&#xff0c;于是增加两个 Service 节点。 每个 Service 节点的 name 属性值要设置不同的值…

2024最火爆的6款洗地机推荐,洗地机品质优秀品牌推荐

洗地机将吸尘、拖地、扫地三大功能合一&#xff0c;通过高效吸尘系统迅速吸走灰尘和杂物。内置清洁水箱和智能拖布设计&#xff0c;使其在拖地时能够根据地面材质和清洁需求&#xff0c;自动调节湿度和清洁力度&#xff0c;实现最佳清洁效果。无论是硬地板还是地毯&#xff0c;…

WHAT - 前端开发人员日常提效工具和应用程序

目录 Mac代码编辑器和IDE1. Visual Studio Code (VS Code)2. WebStorm3. VimVim 的优势常用命令&#xff1a;普通模式&#xff08;Normal Mode&#xff09;常用命令&#xff1a;插入模式&#xff08;Insert Mode&#xff09;常用命令&#xff1a;命令行模式&#xff08;Command…

接口自动化-预期值和实际值怎么写?

测试类当中 怎么做接口自动化&#xff0c;返回值校验&#xff0c;就是需要返回值的预期值和实际值进行对比 实际值如下 怎么拿到预期值$.msg?用正则表达式-提取值 建新的类-来编写用正则表达式拿到预期值 源码pattern 使用的compile的方法&#xff0c;传入的是字符串正则表…

[原创][Delphi多线程]TThreadedQueue的经典使用案例.

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delph…