Docker-文件分层与数据卷挂载详解(附案例)

在这里插入图片描述

文章目录

    • 文件分层
    • 数据卷挂载的含义
    • 数据卷挂载实践
    • 数据卷挂载案例
    • 数据卷挂载方式
    • 数据卷常用命令
    • 容器间数据共享

更多相关内容可查看

文件分层

例:拉取mysql5.7的镜像,在继续拉取mysql5.8的镜像,会出现一部分文件已存在的现象

在这里插入图片描述

这种分层技术 是 docker 强大的功能点之一 会减少很多的冗余文件 每一个镜像 都设置为宝塔形,进行分层 当某一个镜像依赖于另一个镜像的分层 时会先判断 该层是否已存在 如果存在 则不下载 ,仅仅下载镜像所需的额外部分。 类似于盖楼房 一层一层的堆积上层依赖于下层。 那么当删除镜像的时候呢 ,也会查看自己构成镜像的所有层 如果 自己的某层级在被另一个镜像所依赖(使用)则会忽略删除该层。

数据卷挂载的含义

个人理解:将容器跟服务器进行绑定,改容器的东西,服务器挂载的文件也随之改变,反之亦可

主要用途有:

  • 数据持久化:容器的生命周期结束后,其中的数据会被删除。如果你希望容器的数据能够持久保存,就需要使用数据卷挂载。
  • 数据共享:如果你希望多个容器能够共享同一份数据,也可以使用数据卷挂载。

数据卷挂载实践

  1. 在run 镜像的时候 使用-v 参数 来实现 宿主目录与虚拟机目录进行挂载映射(前提是在你的本地根目录新建一个test文件)
docker run -d  -p 6888:6379 --name aaa -v /test:/data redis

在这里插入图片描述

命令解析

  • docker run:这是 Docker 的一个命令,用于运行一个容器。
  • -d:这个参数表示以“后台运行”的方式启动容器。
  • -p 6888:6379:这个参数表示将容器的 6379 端口映射到宿主机的 6888 端口。
  • –name aaa:这个参数表示将运行的容器命名为 “aaa”。
  • -v /test:/data:这个参数表示将宿主机的 “/test” 目录挂载到容器的 “/data” 目录。
  • redis:这是 Docker 镜像的名字,这条命令会运行一个 “redis” 的容器。

2.进入容器的data路径

docker exec -it test /bin/bash

在这里插入图片描述
3.重新开一个窗口,进入test路径下

在这里插入图片描述
4.进行测试,在data下创建,测试test中是否也会自动生成

5.进行测试,在test下创建,测试data中是否也会自动生成

总结几点:
1.将容器跟服务器进行绑定,改容器的东西,服务器挂载的文件也随之改变,反之亦可
2.删除文件 也是同步的,无论是删除宿主机上文件 还是容器内部文件都会进行同步删除
3.删除容器,不会删除外部宿主机的目录

数据卷挂载案例

本案例为:mysql 数据挂载同步验证(如果不进行挂载我们是无法访问容器内部的)

1.拉取mysql镜像

docker pull mysql:5.7.30

在这里插入图片描述
2.镜像挂载

注:官方指明mysql 配置文件路径:/etc/mysql/conf.d、数据存储路径:/var/lib/mysql

docker run -d -p 7000:3306 -v /docker/mysql/conf:/etc/mysql/conf.d -v /docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.30

在这里插入图片描述

命令解析:

  • docker run:Docker 的命令,用于运行一个新的容器。
  • -d:以后台模式运行容器。
  • -p 7000:3306:将容器的 3306 端口映射到宿主机的 7000 端口。这样,你就可以通过宿主机的 7000 端口来访问容器中的 MySQL 服务了
  • -v /docker/mysql/conf:/etc/mysql/conf.d:将宿主机的 /docker/mysql/conf 目录挂载到容器的 /etc/mysql/conf.d 目录。这样,你就可以通过修改宿主机的 /docker/mysql/conf
    目录中的文件来更改 MySQL 的配置了。
  • -v /docker/mysql/data:/var/lib/mysql:将宿主机的 /docker/mysql/data 目录挂载到容器的 /var/lib/mysql 目录。这样,MySQL 的数据就会保存在宿主机的 /docker/mysql/data
    目录,即使容器被删除,数据也不会丢失。
  • -e MYSQL_ROOT_PASSWORD=123456:设置环境变量 MYSQL_ROOT_PASSWORD 的值为 123456。这是 MySQL 服务的 root 用户的密码。
  • mysql:5.7.30:要运行的 Docker 镜像的名称和标签。这里是 MySQL 服务的 5.7.30 版本

3.Navicat连接测试

在这里插入图片描述
4.用navicat创建一个新的数据库并在数据库中创建一张表并插入数据 ----然后到挂载的宿主机目录以及容器中查看
在这里插入图片描述

进入宿主机挂载路径查看

在这里插入图片描述
进入容器挂载路径查看
在这里插入图片描述

注:容器删除,数据不会丢失,可以重新挂载新的容器示例,所以有想删库跑路的小伙伴,要注意以下哦

数据卷挂载方式

挂载方式有: 匿名挂载,具名挂载 ,指定路径挂载

查看所有挂载卷列表

docker volume ls

在这里插入图片描述

  1. 匿名挂载
    一串唯一且随机的编码 直观上看 不知道其具体的名字 以及挂载到宿主机上的路径

使用 -v 参数的时候 仅仅指定 容器内部挂载路径 不指定外部 这种命令挂载的卷 都是匿名挂载

# -v 后 未指定宿主机路径以及挂载名
docker run -d -v /data redis

2.具名挂载
即在容器与宿主机进行挂载的时候指定一个名字

#-v 参数后 指点挂载的卷名:/容器内路径
docker run -d -v names:/data --name jumingguazai  redis

3.查看卷所在的宿主机位置

具名挂载的通过以下命令查询

docker volume inspect 卷名

匿名挂载的会挂载到 默认目录 /var/lib/docker/volumes/ 下

数据卷常用命令

在这里插入图片描述

容器间数据共享

查看容器详细信息

docker inspect 容器Id/容器别名

如图:Source是宿主机挂载路径,Destination是容器内挂载路径
在这里插入图片描述
容器之间使用数据卷挂载命令 --volumes-from 要挂载容器ID

docker run -it --name mysql2 --volumes-from zen_shamir  mysql:5.7.30 /bin/bash

可以看到我们之前创建的数据库也挂载过来了
在这里插入图片描述
在创建一个mysql2的子容器 道理同理

docker run -it --name mysql3 --volumes-from mysql2  mysql:5.7.30 /bin/bash

在这里插入图片描述

宿主机------>mysql----->mysql2------>mysql3
宿主机跟容器之间通过-v 容器跟容器直接通过–volumes from

看到这,建议大家多动手实践,有过实践在真实的工作场景中才能得心应手!!

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

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

相关文章

同花顺问财选股,使用自然语言的形式调接口选股

http形式的接口调用问财接口:https://stockapi.com.cn/v1/base/xuangu?strategy创业板,竞价涨幅大于1,竞价量比大于1 代码中调用该接口调试数据。

cmake编译源码教程(一)

1、介绍 本次博客介绍使用cmake编译平面点云分割的源代码,其对室内点云以及TLS点云中平面结构进行分割,分割效果如下: 2、编译过程 2.1 源代码下载 首先,下载源代码,如下所示,在该文件夹下新建一个build文件夹,用于后续生成sln工程。 同时,由于该库依赖open…

什么是 DDoS 攻击及如何防护DDOS攻击

自进入互联网时代,网络安全问题就一直困扰着用户,尤其是DDOS攻击,一直威胁着用户的业务安全。而高防IP被广泛用于增强网络防护能力。今天我们就来了解下关于DDOS攻击,以及可以防护DDOS攻击的高防IP该如何正确选择使用。 一、什么是…

springboot云南特色民宿预约系统-计算机毕业设计源码81574

目 录 第 1 章 引 言 1.1 选题背景 1.2 选题目的 1.3 论文结构安排 第 2 章 系统的需求分析 2.1 系统可行性分析 2.1.1 技术方面可行性分析 2.1.2 经济方面可行性分析 2.1.3 法律方面可行性分析 2.1.4 操作方面可行性分析 2.2 系统功能需求分析 2.3 系统性需求分析…

文件读写操作之c语言、c++、windows、MFC、Qt

目录 一、前言 二、c语言文件读写 1.写文件 2.读文件 三、c文件读写 1.写文件 2.读文件 四、windows api文件读写 1.写文件 2.读文件 五、MFC文件读写 1.写文件 2.读文件 六、Qt文件读写 1.写文件 2.读文件 七、总结 一、前言 我们在学习过程中&#xff0c…

idea使用技巧---超实用的mybatisX插件

一、使用原因 传统创建mybatis项目之后,在mapper接口和xml映射文件之间手动切换非常麻烦:不仅需要记住文件的所在位置,而且每次在mapper当中添加一个新的接口,都需要单独手动点开xml再编写sql; eg:在item…

前端面试题22(js中sort常见的用法)

JavaScript 的 sort() 方法是数组的一个非常强大的功能,用于对数组的元素进行排序。这个方法直接修改原数组,并返回排序后的数组。sort() 的默认行为是将数组元素转换为字符串,然后按照字符串的 Unicode 字典顺序进行排序。这意味着如果你试图…

优化路由,优化请求url

1、使用父子关系调整下使其更加整洁 2、比如说我修改了下url,那所有的页面都要更改 优化:把这个url抽出来,新建一个Api文件夹用于存放所有接口的url,在业务里只需要关注业务就可以 使用时 导包 发请求 如果想要更改路径,在这里…

docker-compose Install gitlab 17.1.1

gitlab 前言 GitLab 是一个非常流行的开源 DevOps 平台,用于软件开发项目的整个生命周期管理。它提供了从版本控制、持续集成/持续部署(CI/CD)、项目规划到监控和安全的一系列工具。 前提要求 Linux安装 docker docker-compose 参考Windows 10 ,11 2022 docker docker-c…

Zookeeper分布式锁原理说明【简单易理解】

Zookeeper 非公平锁/公平锁/共享锁 。 1.zookeeper分布式锁加锁原理 如上实现方式在并发问题比较严重的情况下,性能会下降的比较厉害,主要原因是,所有的连接都在对同一个节点进行监听,当服务器检测到删除事件时,要通知…

【Kafka】Kafka生产者开启幂等性后报错:Cluster authorization failed.

文章目录 背景解决服务端配置ACL增加授权 背景 用户业务需求,需要开启生产者的幂等性,生产者加了配置:enable.idempotence true用户使用的集群开启了ACL认证:SASL_PLAINTEXT/SCRAM-SHA-512用户生产消息时报错:org.ap…

惕佫酰假托品合酶的发现-文献精读28

Discovering a mitochondrion-localized BAHD acyltransferase involved in calystegine biosynthesis and engineering the production of 3β-tigloyloxytropane 发现一个定位于线粒体的BAHD酰基转移酶,参与打碗花精生物合成,并工程化生产惕佫酰假托品…

Git在多人开发中的常见用例

前言 作为从一个 svn 转过来的 git 前端开发,在经历过git的各种便捷好处后,想起当时懵懂使用git的胆颤心惊:总是害怕用错指令,又或者遇到报错就慌的场景,想起当时查资料一看git指令这么多,看的头晕眼花&am…

Java继承和多态

一.继承 继承顾名思义即一方可以把另一方的东西啊传承到自己手里。 例如猫和狗都是动物。动物都有吃饭,喝水等行为,也有年龄,体重的属性。 那么我们在定义猫和狗的时候就没必要去重复写,而是我们可以定义一个动物类&#xff0c…

[Labview] 改写表格内容并储存覆盖Excel

在上一个功能的基础上,新增表格改写保存功能 [Labview] Excel读表 & 输出表单中选中的单元格内容https://blog.csdn.net/Katrina419/article/details/140120584 Excel修改前: 修改保存后,动态改写储存Excel,并重新写入新的表…

这款新的 AI 语音助手击败了 OpenAI,成为 ChatGPT 最受期待的功能之一

OpenAI 推迟了 ChatGPT 令人印象深刻的语音模式,这让许多 AI 聊天机器人的粉丝感到不安,但他们现在可能已经被挖走了。法国人工智能开发商 Kyutai 推出了一款名为 Moshi 的实时语音 AI 助手。 Moshi 旨在通过语音(如 Alexa 或 Google Assista…

matlab 花瓣线绘制

matlab 花瓣线绘制 clc,clear,close all; % 创建一个范围内的 x 和 y 值 x linspace(-1.5, 1.5, 100); y linspace(-1.5, 1.5, 100);% 创建一个网格来表示 x 和 y 值的组合 [X, Y] meshgrid(x, y);% 计算方程的左边和右边的值 LHS1 X.^2 Y.^2; RHS1 X.^4 Y.^4;LHS2 X.…

如何在前端网页实现live2d的动态效果

React如何在前端网页实现live2d的动态效果 业务需求: 因为公司需要做机器人相关的业务,主要是聊天形式的内容,所以需要一个虚拟的卡通形象。而且为了更直观的展示用户和机器人对话的状态,该live2d动画的嘴型需要根据播放的内容来…

mipi协议中的calibration和scramble模式

在MIPI(Mobile Industry Processor Interface)协议中,calibration(校准)和scramble(加扰)模式是两个重要的特性,它们分别用于优化数据传输的准确性和减少信号干扰。以下是对这两个模式的详细解析: Calibration(校准)模式 目的与功能: 校准模式主要用于优化和补偿由…

冯诺依曼体系结构与操作系统(Linux)

文章目录 前言冯诺依曼体系结构(硬件)操作系统(软件)总结 前言 冯诺依曼体系结构(硬件) 上图就是冯诺依曼体系结构图,主要包括输入设备,输出设备,存储器,运算…