Docker-将宿主机目录直接挂载到容器

一、需求

创建并运行一个MySQL容器,将宿主机目录直接挂载到容器
要求:
①挂载 /tmp/mysql/data 到 mysql 容器内数据存储目录
②挂载 /tmp/mysql/conf/hmy.cnf 到 mysql 容器的配置文件
③设置 MySQL 密码

二、语法

  目录挂载与数据卷挂载的语法是类似的:

都是使用 -v 选项

  • -v [宿主机目录]:[容器内目录]
  • -v [宿主机文件]:[容器内文件]

三、实现

1.下载资料

  链接为:mysql-5.7.25

2.将资料中的 mysql.tar 上传到虚拟机

直接借助 FinalShell工具将文件拖过来就可以,如果不懂可以参考博客:Linux-上传、下载

在这里插入图片描述

3.通过load命令加载为镜像

docker load -i mysql.tar # 加载镜像

docker images # 查看所有镜像

在这里插入图片描述

4.创建目录 /tmp/mysql/data

mkdir -p /tmp/mysql/data

5.创建目录 /tmp/mysql/conf

mkdir -p /tmp/mysql/conf

6.将资料提供的 hmy.cnf 文件上传到 /tmp/mysql/conf

  切换目录

cd /tmp/mysql/conf

  拖动

在这里插入图片描述

7.启动容器(挂载 + 设置密码)

  之前在 Docker Hub 上查到的文档:因为我们直接挂载的话会将容器内的配置文件 hmy.cnf 覆盖掉,但是我们不像这样,所以我们将我们的文件挂载到容器的 /etc/mysql/conf.d 这个目录下

在这里插入图片描述

docker run \ # 运行容器
    --name my-mysql5 \ # 给容器起名字
    -e MYSQL_ROOT_PASSWORD=root \ # 配置环境变量,即给 root 用户配置密码
    -p 3306:3306 \ # 端口映射
    -v /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf \ # 挂载 hmy.cnf 文件(配置文件)
    -v /tmp/mysql/data:/var/lib/mysql \ # 挂载 data 目录(数据存储目录)
    -d \ # 后台运行
    mysql:5.7.25  # 镜像名字:标签

  这里我遇到一个问题,如果直接将命令复制过去的话,那个换行符 \ 就不管用了,必须得手动输入才行,有没有佬知道在评论区告诉一下

在这里插入图片描述

8.可以看到 data 目录挂载成功

在这里插入图片描述

9.使用 Navicat 连接

在这里插入图片描述

四、覆盖情况

  在Docker中,当宿主机目录被挂载到容器内目录时,可能会出现覆盖的情况。具体分析如下:
  如果宿主机目录不存在而容器内的目录存在,宿主机将会用一个空的目录覆盖容器原有的目录。虽然挂载成功,但容器内对应的目录将被清空。如果宿主机目录存在而容器内目录不存在,宿主机目录将被挂载到容器内,容器内将多出一个挂载的目录。
  此外,宿主机文件挂载到容器文件夹会启动失败,而同名文件夹挂载则可以启动成功,此时宿主机文件夹会覆盖容器内部的文件夹。同样,同名文件挂载会启动成功,宿主机文件会覆盖容器的文件。
  不过,当容器启动后,其内部镜像自带的文件并没有被重写覆盖,而是被隐藏了。这原理类似于Linux的mount挂载,所以与其说是覆盖,不如说是目录挂载会掩盖。

五、数据卷挂载的方式对比

1.数据卷挂载耦合度低,由 docker 来管理目录
2.目录挂载耦合度高,需要我们自己管理目录


在这里插入图片描述
  数据卷挂载与目录直接挂载是Docker中的两种不同挂载方式,它们各自具有一些优点和缺点,适用于不同的使用场景。
  数据卷挂载的优点主要在于它的数据持久性和可共享性。数据卷是一个虚拟目录,它将宿主机目录映射到容器内目录,这样方便我们操作容器内文件,或者方便迁移容器产生的数据。数据卷可以被多个容器共享,容器之间可以通过这个数据卷进行数据交换。此外,数据卷挂载的好处是可以将数据从容器中分离出来,方便备份和迁移,同时也可以避免容器被删除时数据的丢失。因此,对于需要共享数据或者需要保证数据持久性的情况,数据卷挂载是一个很好的选择。
  而目录直接挂载的优点在于它的简单性和灵活性。在宿主机目录和容器内目录之间建立直接的映射关系,使得数据的读写和访问更加直观。而且,由于数据直接存储在宿主机上,不需要通过数据卷进行中转,因此在某些情况下可能具有更好的性能。此外,对于一些小型应用或者临时性的任务,可能并不需要持久化的存储空间,这时使用目录直接挂载可以节省一些资源。
  总的来说,选择数据卷挂载还是目录直接挂载,需要根据实际需求来决定。如果需要保证数据的持久性和可共享性,或者需要避免容器被删除时数据的丢失,可以选择数据卷挂载;如果只是需要简单、快速地访问和操作数据,并不需要持久化的存储空间,那么目录直接挂载可能更加适合。

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值