当前位置: 首页 > news >正文

docker的目录挂载与卷映射

文章目录

    • 一、目录挂载
          • 背景
          • 定义
          • 使用
    • 二、卷映射
          • 背景
          • 定义
          • 区别
          • 使用
          • docker对卷的操作

一、目录挂载

背景

上一文,我们提了docker exec进入容器修改页面很麻烦,所以在这里,我们学习一个新的容器使用方法,叫“目录挂载”

定义

长话短说,依据我的理解,是做了一个映射,一个从docker容器到主机的一个映射

使用

命令示例如下:

docker run -d -p 8885:80 -v /app/ng_html:/usr/share/nginx/html --name my_test nginx
  • -d 即 --detach,表示以分离模式运行容器。也就是容器会在后台运行,不会将容器的输出信息显示在当前终端上。使用此选项后,容器启动后会返回容器的 ID。
  • -p 8885:80 即 --publish,用于将容器内的端口映射到宿主机的端口。这里的 8885 是宿主机的端口,80 是容器内的端口。这意味着当你在宿主机上访问 localhost:8885 时,实际上会访问到容器内的 80 端口,也就是 Nginx服务默认监听的端口。
  • -v /app/ng_html:/usr/share/nginx/html 即 --volume,用于将宿主机的目录挂载到容器内的目录。/app/ng_html 是宿主机上的目录,/usr/share/nginx/html 是容器内 Nginx服务默认的网站根目录。通过这种挂载方式,你可以直接在宿主机的 /app/ng_html目录下修改文件,这些修改会实时反映到容器内的网站根目录中,从而实现数据的共享和持久化。
  • --name my_test 用于为新创建的容器指定一个名称。这里将容器命名为 my_test,方便后续对容器进行管理,例如使用 docker start my_test、docker stop my_test 等命令来启动或停止该容器。
  • nginx这是要基于其创建容器的镜像名称。Docker 会先检查本地是否存在 nginx 镜像,如果不存在,则会从 Docker Hub上下载该镜像,然后基于该镜像创建并启动容器。
    在这里插入图片描述
    这样就完成了目录挂载,如果你本地没有app/ng_html这个被docker挂载的目录,没关系,docker会自己帮你mkdir,此时,你的被挂载地址是空的,所以,你打开你服务器的映射端口(这里是服务器的8885映射docker容器里的80)
    在这里插入图片描述
    下面,我们在服务器的ng_html创建文件,观察docker的容器是否能解析服务器的这个地址
    在这里插入图片描述
    打开服务器网址,刷新
    在这里插入图片描述
    Right~
    同时,在docker exec对里面文件同样有用;删除容器,本地服务器的文件夹依然存在,所以下次你还可以用这个映射;
    补充外部知识,echo后单箭头>是写入,>>是追加

二、卷映射

背景

这还有个问题,nginx里有配置文件吧,我要修改这个,我就还得docker exec进容器,那目录挂载有时显的很鸡肋啊。诶~所以咱还可以使用卷映射来解决这个问题。
在引入卷映射之前,我们需要表明,-v /app/ng_conf:/etc/nginx 也可以将配置文件挂载到本地,但会发生如下报错
在这里插入图片描述
因为映射完,外面的文件夹是空,然后映射到容器里面也是空,所以显示no such file。所以我们想,能不能在外面操作的同时,一启动,就同步文件的内容呢

定义

卷映射指的是把宿主机上的目录或者文件,挂载到容器内的指定路径上。这样一来,容器就可以访问和操作宿主机上的数据,而且宿主机对数据的修改也能马上在容器里体现出来,反之亦然。

区别

然而,这卷映射和目录挂载有啥区别嘞
这里放两个引用,博主写的蛮好。
理论分析:

https://blog.csdn.net/Cai181191/article/details/133791784?fromshare=blogdetail&sharetype=blogdetail&sharerId=133791784&sharerefer=PC&sharesource=m0_73118788&sharefrom=from_link

一个总结:数据卷挂载适合多个容器共享数据,而目录挂载适合单个容器与主机之间进行数据交换。
实践区分:

https://blog.csdn.net/wangye135/article/details/142303233?fromshare=blogdetail&sharetype=blogdetail&sharerId=142303233&sharerefer=PC&sharesource=m0_73118788&sharefrom=from_link

在实践方面,我再写一下我的观察:
目录挂载和卷挂载,-v后面都写目录:容器地址
更严谨地说,目录挂载是-v 本地目录:容器内目录,卷挂载是-v 数据卷名:容器目录
所以得出,不同的是,目录挂载的本机目录是/xxx/xx....的形式,而卷挂载仅仅是写一个地址,即没有/,例子见下面的示列,仅有ngconf
(因为一个是地址,一个是数据卷的名称)
在这里插入图片描述

使用

命令:

docker run -d -p 8885:80 -v /app/ng_html /usr/share/nginx/html -v ng_conf:/etc/nginx --name my_test_v nginx

在这里插入图片描述
同时,docker里面挂载的卷都在/var/lib/docker/volumes/的文件夹下面
在这里插入图片描述
你看,里面的ng_conf就是我们通过上面命令建立的文件夹
cd进去可以看到nginx映射过来的配置文件
在这里插入图片描述

docker对卷的操作

主要核心:

docker volume

比如,docker volume ls可以看里面创建的卷
在这里插入图片描述

docker volume create 卷名字

这可以创建卷

docker volume inspect ng_conf

这可以看指定卷的信息,比如存放的位置
在这里插入图片描述
attention:删除容器,挂载的目录和创建的卷都不会被删除

相关文章:

  • Nginx部署spa单页面的小bug
  • SQLite + Redis = Redka
  • NCCL使用指南-进阶篇
  • (个人题解)第十六届蓝桥杯大赛软件赛省赛C/C++ 研究生组
  • 架构师面试(二十九):TCP Socket 编程
  • MapStruct复制失败,属性为null,与lombok有关系
  • 【Flink运行时架构】重要概念
  • linux多线(进)程编程——(1)前置知识
  • HTML5/JS/Vue与Java后端技术类比(AI创作)
  • SpringBoot对接火山引擎大模型api实现图片识别与分析
  • 深入理解Liunx文件系统与日志分析
  • 尚硅谷2019版Java网络编程笔记
  • HBase客户端metacache缓存过期报错
  • Mybatis 中 mappers标签 package的使用
  • 一种基于学习的多尺度方法及其在非弹性碰撞问题中的应用·
  • 【Linux】VLAN配置命令
  • 【数据结构_6上篇】有关链表的oj题
  • 【含文档+PPT+源码】蛋糕商城预定App的设计与实现
  • HTML5新特性
  • 在springboot项目中调用第三方天气api服务
  • 体坛联播|欧冠巴萨3比3战平国米,柯洁未进入国家集训队
  • 迪卡侬回应出售中国业务30%股份传闻:始终扎根中国长期发展
  • 五一去哪儿| 追着花期去旅行,“赏花经济”绽放文旅新活力
  • 2025年度中国青年五四奖章暨新时代青年先锋奖评选揭晓
  • “ChatGPT严选”横空出世了,“DeepSeek严选”还要等多久?
  • 这座“蚌埠住了”的城市不仅会接流量,也在努力成为文旅实力派