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

Docker-07.Docker基础-数据卷挂载

一.案例

首先我们通过一则案例来引出问题。

我们要修改nginx容器内的html目录下的index.html文件,并且要将静态资源部署到nginx的html目录,就要首先知道该html目录的所在位置。

我们首先查看nginx镜像的帮助文档,

这里就是将有关静态资源目录的,这里面有一个说明:static-html-directory——静态的html目录。后面这个目录就是nginx容器内html目录的所在路径。 

我们通过docker进入到nginx容器内部,并cd到静态资源路径下,使用ls命令果然查看到有index.html文件。我们使用vi命令进行编辑,结果发现命令没有找到。这是为什么呢?

原因是docker的容器中并没有包含,只包含应用运行必备的系统函数。

那要在容器内修改资源非常困难,别说把文件拷贝进去了。

那该如何解决当前问题呢?这就要用到数据卷技术了。

二.数据卷

数据卷是一个虚拟目录,是容器和宿主机目录之间映射的桥梁。当我们创建数据卷时,数据卷会和容器中的文件进行关联和挂载,并且也会在宿主机中创建一个特定的目录去和数据卷进行关联。这样,宿主机文件系统和Nginx容器就通过数据卷间接关联了。当我们操作宿主机内部的文件时,Nginx容器也会执行同样的操作。反之亦然。双方修改同修改,删除同删除。

那么问题来了,我们该怎么样去创建数据卷呢?

知道了如何创建数据卷,那么我们要怎样将容器挂载在数据卷上呢?

还是使用docker run命令,使用“-v 数据卷:容器内目录”进行数据卷的挂载。数据卷名称可以任意,只要不与其他数据卷名称冲突即可。

注意:

1.当我们要进行数据卷挂载时,要在容器被创建的同时进行挂载,否则后续将无法挂载。如果创建时未挂载,以后将没有办法再挂载。

2.如果数据卷不存在将自动挂载,这也就意味着我们不用执行docker volume create命令来创建数据卷。

三.命令

# 1.首先创建容器并指定数据卷,注意通过 -v 参数来指定数据卷
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx# 2.然后查看数据卷
docker volume ls
# 结果
DRIVER    VOLUME NAME
local     29524ff09715d3688eae3f99803a2796558dbd00ca584a25a4bbc193ca82459f
local     html# 3.查看数据卷详情
docker volume inspect html
# 结果
[{"CreatedAt": "2024-05-17T19:57:08+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/html/_data","Name": "html","Options": null,"Scope": "local"}
]# 4.查看/var/lib/docker/volumes/html/_data目录
ll /var/lib/docker/volumes/html/_data
# 可以看到与nginx的html目录内容一样,结果如下:
总用量 8
-rw-r--r--. 1 root root 497 12月 28 2021 50x.html
-rw-r--r--. 1 root root 615 12月 28 2021 index.html# 5.进入该目录,并随意修改index.html内容
cd /var/lib/docker/volumes/html/_data
vi index.html# 6.打开页面,查看效果# 7.进入容器内部,查看/usr/share/nginx/html目录内的文件是否变化
docker exec -it nginx bash

当执行了创建镜像并挂载的操作之后,我们查看数据卷。通过以下命令:

docker volume ls

可以看到下面确实有一个名为html的数据卷。

接着我们查看挂载点,即该数据卷挂载到宿主机的哪个位置上了。我们执行命令:

docker volume inspect html

可以看到该数据卷挂载到宿主机的"/var/lib/docker/volumes/html/_data"路径上了。 

# 3.查看数据卷详情
docker volume inspect html
# 结果
[{"CreatedAt": "2024-05-17T19:57:08+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/html/_data","Name": "html","Options": null,"Scope": "local"}
]

这就展示了该数据卷的详细信息,其中Mountpoint展示了其挂载在宿主机上的详细位置。

我们可以进入到该目录下:

cd /var/lib/docker/volumes/html/_data

ll就可以看到nginx的html里面的内容了。

我们便可以在这里使用vi进行修改,但是并不用这么麻烦,我们只要双击index.html就可以进行修改了。 

 

拖拽即可上传到挂载点。

 访问静态资源可以直接看到。

接下来我们再次进入容器,查看有没有我们想要的静态资源:

可以看到1.jpeg,50x.html和index.html都有。说明在宿主机内做的操作在容器内都出现了。

总结

http://www.lryc.cn/news/610231.html

相关文章:

  • leetcode_11 盛最多水的容器
  • C++ stdset 与 stdmultiset 深度比较
  • pathspec ‘with_def_layout‘ did not match any file(s) known to git`
  • jenkins+gitlab自动发布系统
  • IntelliJIDEA上传GitHub全攻略
  • JVM学习专题(四)对象创建过程
  • 数据结构:如何判断一个链表中是否存在环(Check for LOOP in Linked List)
  • IDM(Internet Download Manager)是什么?它有什么作用
  • 微帧GPU视频硬编优化引擎:面向人工智能大时代的AI算法与硬编协同优化方案
  • C语言实现Elasticsearch增删改查API
  • 部署 Kibana 8.2.2 可视化管理 Elasticsearch 8.2.2 集群
  • 解决 PS暂存盘已满的五种方法
  • PSOFT Pencil+ 4.25 插件安装教程(适用于 3ds Max 2022-2025)
  • 【c51单片机利用p2口,外接八个流水灯实现流水灯效果1.3.5.7.2.4.6.8亮】2022-10-9
  • MinIO 服务日志与监控实战:日志配置、Webhook、事件通知、Prometheus+Grafana 可视化全流程指南
  • AI 编程学习网站分享:vibe-coding-tutorial
  • SpringCloud相关知识
  • 【测试】⾃动化测试常⽤函数
  • 银河麒麟V10一键安装DM8的脚本及高阶运维SQL分享
  • 力扣-994.腐烂的橘子
  • RHCA02
  • 飞算JavaAI编程插件:以AI之力赋能Java开发,让编码效率再升级
  • 0基礎網站開發技術教學(三) --(後端PHP篇)-- [內有2025最新可用 phpstudy2018下載鏈接]
  • ShowDoc与Docmost对比分析:开源文档管理工具的选择指南
  • numpy基础知识2
  • 《P1462 通往奥格瑞玛的道路》
  • 图的存储方式-邻接表
  • 超急评估:用提前计算分摊性能成本
  • C + +
  • 机器学习(12):拉索回归Lasso