首页 > 其他分享 >Docker-文件分层与数据卷挂载详解(附案例)

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

时间:2024-07-06 18:28:34浏览次数:7  
标签:容器 宿主机 详解 mysql 挂载 Docker data 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

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

标签:容器,宿主机,详解,mysql,挂载,Docker,data,docker
From: https://blog.csdn.net/Aaaaaaatwl/article/details/140183425

相关文章

  • 2、flask-run启动参数详解
    app.py这里 app.run(True,port=5001,host='0.0.0.0')fromflaskimportFlask#创建flask应用对象app=Flask(__name__)@app.route('/')#路由defhello_world():#视图函数return'HelloWorld!'#响应给前端#添加路由和视图函数@app.route......
  • Python分支结构详解
    在编程中,控制流结构是至关重要的,它决定了程序的执行顺序。Python提供了多种控制流结构,其中分支结构是基础且常用的。本文将详细介绍Python中的分支结构,包括顺序结构、选择结构、单分支、双分支、多分支、分支嵌套以及pass关键字的使用。1.顺序结构、选择结构顺序结构是最简......
  • 【Java】毕业设计个人博客系统 ---- 代码+详解
    目录博客系统项目分析1.数据库设计1.1设计库表1.2代码实现1.3创建项目1.4配置application.yml配置文件2.项目公共模块2.1实体类2.2公共层2.2.1统一返回结果实体类2.2.2统一返回结果处理2.2.3统一异常处理3.获取博客列表3.1持久层数据库相关操作3.2约定......
  • 详解C++完美转发
    我们先来看折叠规则引用折叠规则在C++中,引用折叠规则的主要目的是为了保证在模板推导过程中,对于参数T&&能够正确地推导出其最终的引用类型,以便进行参数传递时的正确行为。下面是引用折叠规则的总结:左值引用折叠:T&&折叠为T&T&&&折叠为T&这意味着如果一个左值引用......
  • Nuxt框架中内置组件详解及使用指南(一)
    title:Nuxt框架中内置组件详解及使用指南(一)date:2024/7/6updated:2024/7/6author:cmdragonexcerpt:本文详细介绍了Nuxt框架中的两个内置组件和的使用方法与功能。确保包裹的内容仅在客户端渲染,适用于处理浏览器特定功能或异步数据加载。而是一个实验性组件,用于在SSR过......
  • 基于Qwen2/Lllama3等大模型,部署团队私有化RAG知识库系统的详细教程(Docker+AnythingLLM
    自ChatGPT发布以来,大型语言模型(LargeLanguageModel,LLM,大模型)得到了飞速发展,它在处理复杂任务、增强自然语言理解和生成类人文本等方面的能力让人惊叹,几乎各行各业均可从中获益。然而,在一些垂直领域,这些开源或闭源的通用基础大模型也暴露了一些问题,主要体现在以下3个方面:......
  • HTML【详解】超链接 a 标签的四大功能(页面跳转、页内滚动【锚点】、页面刷新、文件下
    超链接a标签主要有以下功能:跳转到其他页面<ahref="https://www.baidu.com/"target="_blank">百度</a>href:目标页面的url地址或同网站的其他页面地址,如detail.htmltarget:打开目标页面的方式_self:在同一个网页中显示(默认值)_blank:在新的窗口中打开【常用】_......
  • Docker Compose 安装
    安装方案场景一:安装DockerDesktop获取DockerCompose的最简单且推荐的方法是安装DockerDesktop。DockerDesktop包括DockerCompose以及DockerEngine和DockerCLI,它们是Compose的先决条件。场景二:安装Compose插件如果您已经安装了DockerEngine和DockerCL......
  • Docker Compose 快速入门
    这是一个非规范性示例,仅突出显示了使用Compose可以执行的关键操作。第2步:在Compose文件中定义服务Compose简化了整个应用程序堆栈的控制,使您可以轻松地在单个易于理解的YAML配置文件中管理服务、网络和卷。在您的项目目录中创建一个名为的文件compose.yaml并粘贴以下......
  • MySQL主从复制详解
    MySQL主从复制详解MySQL主从复制是数据库环境中常用的一种数据同步技术,用于实现数据的高可用性和负载均衡。通过主从复制,可以将一个MySQL数据库服务器的数据实时地复制到一个或多个从库中。本文将介绍MySQL主从复制的原理、配置步骤和常见问题。一、MySQL主从复制的原理M......