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

news2024/11/20 7:05:50

在这里插入图片描述

文章目录

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

更多相关内容可查看

文件分层

例:拉取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.coloradmin.cn/o/1899630.html

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

相关文章

昇思MindSpore学习笔记4-04生成式--GAN图像生成

摘要: 记录昇思MindSpore AI框架使用GAN生成式对抗网络模型生成图像的原理和实际使用方法、步骤。包括环境准备、数据集下载、数据加载、隐码、构建生成器与判别器、模型训练、模型推理等。 一、概念 GAN生成式对抗网络模型 (Generative Adversarial Networks) …

停车场小程序的设计

管理员账户功能包括:系统首页,个人中心,车主管理,商家管理,停车场信息管理,预约停车管理,商场收费管理,留言板管理 微信端账号功能包括:系统首页,停车场信息…

IDEA创建Spring项目无法使用Java8的解决方案

文章目录 一,创建Project,无法选择Java81,无法选择Java82,选择JDK17报错 二,原因分析1,Spring Boot将来会全力支持Java17,不再维护支持Java8的版本 三,解决方案1,使用国内…

AndroidKille更新apktool插件-cnblog

AndroidKiller不更新插件容易报错 apktool插件更新 网址 Releases iBotPeaches/Apktool (github.com) 找到apktool管理器 填入apktool位置,并输入apktool名字 选择默认的apktool版本 x掉,退出重启 可以看到反编译完成了 dex2jar 更新 网址 Release…

数据库系统原理 | 查询作业1

整理自博主本科《数据库系统原理》专业课自己完成的实验课查询作业,以便各位学习数据库系统概论的小伙伴们参考、学习。 *文中若存在书写不合理的地方,欢迎各位斧正。 专业课本: ​ ———— 本次实验使用到的图形化工具:Heidisql…

Python酷库之旅-第三方库Pandas(006)

目录 一、用法精讲 10、pandas.DataFrame.to_excel函数 10-1、语法 10-2、参数 10-3、功能 10-4、返回值 10-5、说明 10-6、用法 10-6-1、数据准备 10-6-2、代码示例 10-6-3、结果输出 11、pandas.ExcelFile类 11-1、语法 11-2、参数 11-3、功能 11-4、返回值 …

模型驱动开发(Model-Driven Development,MDD):提高软件开发效率与一致性的利器

目录 前言1. 模型驱动开发的原理1.1 什么是模型驱动开发1.2 MDD的核心思想 2. 模型驱动开发的优势2.1 提高开发效率2.2 确保代码一致性2.3 促进沟通和协作2.4 方便维护和扩展 3. 实现模型驱动开发的方法3.1 选择合适的建模工具3.1.1 UML3.1.2 BPMN3.1.3 SysML 3.2 建模方法3.2.…

SQL注入基础入门

文章目录 前言SQL注入基本操作SQL注入类型分类数字型字符型搜索型xx型Json型数据类型提交的方式 SQL注入的位置分类报错注入报错注入实战案例 SQL注入语句分类insert注入update注入delete注入 编码Tips:Mysql版本区别information_schema数据库详解 其他注入手段宽字…

宿舍报修小程序的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,基础数据管理,论坛管理,故障上报管理,新闻信息管理,维修人员管理 微信端账号功能包括:系统首页,新闻信息…

Java项目:基于SSM框架实现的个人博客网站管理系统分前后台【ssm+B/S架构+源码+数据库+开题报告+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的个人博客网站管理系统 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观、操作简单、…

使用vue3+js+ele-plus实现国际化

先看看是不是你想要的 本文只涉及到中文和英文两种语言,若需其他语言请到ele-plus官网进行下载1、首先使用 npm i vue-i18n 命令下载i18n依赖包 npm i vue-i18n 2、在views文件夹内新建一个i18n文件,在i18n文件夹内新建三个文件2.1、新建 zh-cn.…

14-33 剑和诗人7 - 大模型语言和 DBCopilot 方法实现数据民主化

长期以来,数据库一直是海量信息的守护者,但访问这些知识历来是只有拥有专业技术技能的人才能享有的特权。这造成了巨大的知识壁垒,阻碍了数据访问的民主化,并使许多个人和组织无法获得这些存储库中包含的见解。 数据民主化的主要…

Renesas R7FA8D1BH (Cortex®-M85) ADC模块应用

目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 FSP和KEIL配置ADC 2.1 ADC硬件接口 2.2 FSP配置ADC 3 软件功能实现 3.1 FSP生成项目 3.2 FSP ADC模块库函数介绍 3.2.1 库函数列表 3.2.2 函数介绍 4 ADC功能代码 4.1 编写代码 4.2 代码…

无人机云台类型及作用

无人机云台主要分为三种类型: 单轴云台:仅支持单向旋转,适合拍摄平滑的延时摄影和全景照片。 双轴云台:支持水平和垂直旋转,可用于拍摄流畅的视频和运动物体。 三轴云台:全面支持所有旋转轴,…

ModuleNotFoundError: No module named ‘blinker._saferef‘

报错信息&#xff1a; 截图 代码 File "D:\Code\Python\flask-api\.venv\Lib\site-packages\seleniumwire\webdriver.py", line 28, in <module>from seleniumwire import backend, utilsFile "D:\Code\Python\flask-api\.venv\Lib\site-packages\selen…

充分利用东芝 TB67H450FNG 实现电机控制需求

在当今快速发展的技术环境中&#xff0c;高效且可靠的电机控制对于各种应用来说都是至关重要的&#xff0c;无论是工业机械还是消费电子产品。东芝的 TB67H450FNG&#xff0c;一款PWM斩波型直流有刷电机驱动器&#xff0c;以其高电压和大电流驱动能力脱颖而出&#xff0c;能够满…

[SAP ABAP] 函数Function

Function函数与子例程类似&#xff0c;按照功能将代码模块化 我们可以使用事务码SE37查看需要使用的函数以及对该函数进行测试 我们也可以对STRING_SPLIT_AT_POSITION函数进行测试 1.函数调用 我们可以使用事务码SE38进入ABAP编辑器界面&#xff0c;使用"模式/Pattern&q…

51单片机基础11——蓝牙模块控制亮灭

串口初试——蓝牙模块 蓝牙模块的使用1. 软硬件条件2. 蓝牙模块3. 代码(分文件处理之后的代码) 蓝牙模块的使用 1. 软硬件条件 单片机型号&#xff1a;STC89C52RC开发环境&#xff1a;KEIL4烧录软件串口通信软件&#xff1a;stc-isp蓝牙模块&#xff1a;HC-04LED模块(高电平点…

利用Redis bitmap 实现签到案例

数据库实现 设计签到功能对应的数据库表 CREATE TABLE sign_record (id bigint NOT NULL AUTO_INCREMENT COMMENT 主键,user_id bigint NOT NULL COMMENT 用户id,year year NOT NULL COMMENT 签到年份,month tinyint NOT NULL COMMENT 签到月份,date date NOT NULL COMMENT 签…

项目部署_持续集成_Jenkins

1 今日内容介绍 1.1 什么是持续集成 持续集成&#xff08; Continuous integration &#xff0c; 简称 CI &#xff09;指的是&#xff0c;频繁地&#xff08;一天多次&#xff09;将代码集成到主干 持续集成的组成要素 一个自动构建过程&#xff0c; 从检出代码、 编译构建…