Docker 基础使用(3) 存储卷

news2024/11/27 2:19:38

文章目录

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

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

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

相关文章

Windows系统电脑本地部署AI音乐创作工具并实现无公网IP远程使用

文章目录 前言1. 本地部署2. 使用方法介绍3. 内网穿透工具下载安装4. 配置公网地址5. 配置固定公网地址 前言 本文主要介绍如何在Windows系统电脑上快速本地部署一个文字生成音乐的AI创作工具MusicGPT,并结合cpolar内网穿透工具实现随时随地远程访问使用。 MusicG…

Python 可变长参数的魔法:灵活函数设计的秘密

哈喽,大家好,我是木头左! 什么是可变长参数? 在 Python 中,可变长参数允许你向函数传入任意数量的参数,而无需预先定义它们的个数。这为编写更加灵活和通用的函数提供了可能。可变长参数主要有两种形式&am…

OpenCV的小部件最基本范例

OpenCV也有与PYQT类似的小部件,例如滑块slider。OpenCV可以用与PYQT类似的“信号与槽”方法,也可以在函数中直接查询小部件的值。 import cv2 import numpy as npcv2.namedWindow(Show1) image np.zeros((100, 400, 3), np.uint8) # 创建一个空白内容…

微服务网关Gateway(下)

CSDN 的小伙伴们,大家好呀,我是苍何。 这篇文章我们继续来说下我们项目中用到的微服务网关 Gateway 的技术点。主要涵盖过滤器,限流处理以及黑白名单配置。 过滤器 网关中的过滤器,有点类似 SpringMVC 里面的拦截器 Intercepto…

mysql中 redo日志(上)

大家好。我们知道InnoDB 存储引擎是以页为单位来管理存储空间的,我们进行的增删改查操作其实本质上都是在访问页面。而在真正访问页面之前,需要把在磁盘上的页缓存到内存中的Buffer Pool之后才可以访问。那么我们思考一个问题:如果我们只在内…

【漏洞复现】锐捷校园网自助服务系统 login_judge.jsf 任意文件读取漏洞(XVE-2024-2116)

0x01 产品简介 锐捷校园网自助服务系统是锐捷网络推出的一款面向学校和校园网络管理的解决方案。该系统旨在提供便捷的网络自助服务,使学生、教职员工和网络管理员能够更好地管理和利用校园网络资源。 0x02 漏洞概述 校园网自助服务系统/selfservice/selfservice…

路由黑洞处理

今天BGP基础实验碰到了路由黑洞 BGP承载于IGP之上,BGP路由天生要递归,才能找出口 在E的BGP去A,下一跳只有B,但是流量走了两条路,c和d BGP路由黑洞: 控制层面可达,数据层面不可达; 路由条目在BG…

阿里云搭建物联网平台+MQTT.fx接入阿里云

文章目录 本篇介绍一、阿里云物联网平台搭建二 、MQTT客户端接入阿里云物联网平台总结 本篇介绍 本篇搭建了阿里云物联网平台,使用MQTT.fx接入阿里云,上传温湿度数据 使用到的软件:阿里云、MQTT.fx 一、阿里云物联网平台搭建 首先创建一个物…

【AI大模型】 应用开发基础

目录 迎接 AGI 时代 什么是 AI? AGI 和AIGC 大模型 AI 能干什么? 大模型落地情况综述 Killer App 没有影 AI 原生待证明 成功落地大模型五要素 大模型是怎样工作的? 通俗原理 略深一点的通俗原理 再深一点点 用好 AI 的核心心法…

C#知识|通过ADO.NET实现应用程序对数据库的查询操作。

哈喽,你好啊,我是雷工! 前边学习了通过ADO.NET实现C#应用程序对数据库的增、删、改操作。 接下来接着学习查询操作,以下为学习笔记。 查询返回有两种类型,一种是单行单列的单一结果,一种是结果集,首先了解查询结果是单行单列结果的写法。 01 查询返回单一结果 以前方的…

【Redis学习笔记04】Jedis客户端(通用命令)

Java客户端操作Redis Java生态丰富,自定义的客户端非常多,常见的有Jedis、Lettuce、以及Spring整合后的RedisTemplate,但是对于初学者而言,从Jedis开始入门学习是非常容易上手的,因为Jedis中的API与原生Redis命令高度…

集合进阶相关基础及底层原理

集合体系结构 单列集合: Collenction 每次只能添加一个值,其中红色是接口,蓝色是实现类 图来自黑马程序员网课 List系列集合:添加的元素是有序,可重复,有索引 Set系列集合:添加的元素是…

--- JAVA 多态 ---

多态,顾名思义就时有多种形态,那咋样才嫩共有多种形态呢,再java中就是用不同的对象去调用同一个方法,产生了不同的结果。 看这段代码,我调用的是同一个方法,且只是传入的对象的不同,但是产生了不…

【数据结构】平衡二叉树(AVL树)

目录 前言 一、AVL树概念 二、AVL树节点定义 三、AVL树插入 1. 按照二叉搜索树的方式插入新节点 2. 维护节点的平衡因子与调整树的结构 a. 新节点插入较高左子树的左侧---左左:右单旋 b. 新节点插入较高右子树的右侧---右右:左单旋 c. 新节点插入…

【php实战项目训练】——thinkPhP的登录与退出功能的实现,让登录退出畅通无阻

👨‍💻个人主页:开发者-曼亿点 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 曼亿点 原创 👨‍💻 收录于专栏&#xff1a…

【LeetCode】两数相加(基于单向链表)难度:中等

目录 理清题目 解题思路 题目代码 运行结果 我们来看一下题目描述: 理清题目 首先题目要求链表中的节点的值必须在[0,9]之间也就是说我们要处理的数字必为正整数,因此就不会涉及到太复杂的计算,题目其实就是要求对两个链表中的节点的值分…

美业SaaS系统源码分享-收银管理的主要功能

美业SaaS系统 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 活动促销 PC管理后台、手机APP、iPad APP、微信小程序 ▶ 博弈美业-收银管理功能 1、同时支持支付宝和微信支付,具有简单便捷安全等优点,并且符…

vite+ts设置别名

准备工作 安装 types/node 避免代码爆红 npm install types/node一、根目录下 vite.config.ts 文件中配置 import { resolve } from path;resolve: {// 设置文件./src路径为 alias: [{find: ,replacement: resolve(__dirname, ./src)}] }二、根目录下 tsconfig.json 文件中配…

前端el-table-column使用template的新发现哈哈哈

记录一次无脑copy代码发现的新知识哈哈哈 新知识自己要去查阅相关知识学习&#xff0c;这里我没有描述噢 在el-table中的列el-table-column使用了多个button时&#xff0c;每个button都添加了<template slot-scope"scope">标签&#xff0c;导致只有其中一个but…

Makefile的入门学习

一、Makefile的入门学习 编译工具及构建工具介绍 在之前的课程&#xff0c;都是直接使用gcc对代码进行编译&#xff0c;这对简单的工程是可以的&#xff0c;但当我们遇到复杂的工程时&#xff0c;每次用gcc等编译工具去操作就会显得很低效。因此make工具就出现了&#xff0c;…