速通Docker === 目录挂载 卷映射

ops/2025/1/18 18:54:15/

 

目录

目录挂载

1. 目录挂载的基本概念

2. 挂载命令

3. 配置Nginx启动页

4. 注意事项

卷映射

1. 创建数据卷

2. 运行Nginx容器并挂载数据卷 

3. 查找数据卷的宿主机路径

4. 修改配置文件 

5. 重启Nginx容器

6. 验证Nginx是否正常工作

Docker挂载总结

目录挂载

卷映射

区别


目录挂载

1. 目录挂载的基本概念

目录挂载是将宿主机上的目录或文件直接映射到容器内的指定路径,从而实现数据的共享和同步。这种方式特别适用于开发和测试环境。

Docker 容器是临时的,容器被删除后,容器内的数据也会随之丢失。通过目录挂载,可以将数据存储在宿主机上,即使容器被删除,数据仍然保留。

2. 挂载命令

这里会自动创建本机目录 语法: -v 本机目录 : 容器内目录

将宿主机的 /host/data 目录挂载到容器内的 /container/data 目录,容器内的数据会持久化到宿主机的 /host/data 目录中。

docker run -v /host/data:/container/data my_image

 例如我将Docker容器的Nginx资源目录挂载到宿主机指定目录

使用-v--mount参数可以在启动容器时挂载宿主机目录。例如,将宿主机的/opt/nginx/html目录挂载到容器的/usr/share/nginx/html目录:

 docker run -d -p 80:80 -v /opt/nginx/html:/usr/share/nginx/html nginx:latest

3. 配置Nginx启动页

假设你已经将宿主机的/opt/nginx/html目录挂载到容器的/usr/share/nginx/html目录,你可以在宿主机的/opt/nginx/html目录中创建或修改index.html文件,这个文件将作为Nginx的启动页。

例如,创建一个简单的index.html文件:

# 进入文件
cd /opt/nginx/html# 写入index.html
echo 1111 > index.html

4. 注意事项

  • 数据覆盖问题:如果宿主机的挂载目录为空,容器内的对应目录内容会被清空,以宿主机为主

  • 多容器共享:多个容器可以共享同一个挂载目录,但需要注意数据一致性和权限管理

  • 数据同步: 容器内改变文件, 宿主机也会改变

 # 进入容器内部docker exec -it 8d0e0501e1ba bash# 进入文件cd /usr/share/nginx/html# 追加内容echo 3333 >> index.html# 退出交互exit# 插看当前工作目录pwd# 查看内容已经修改了cat index.html

卷映射

区分目录挂载和卷映射,可通过挂载的路径中是否包含 / 或者 ./来判断

在 Docker 中,卷映射(Volume Mounting)是将 Docker 管理的卷(Volume)挂载到容器内的某个路径

Docker会自动创建一个存储位置,即使在容器初始启动的时候就和容器内部的文件保持完全一致。

映射后的配置文件会保持同步,即修改了宿主机映射的配置文件后,容器内部的配置文件也会同步修改

即使删除容器,卷内的数据仍会保存下来。

例如要映射nginx配置文件,启动时可以使用 -v <volume_name>:/etc/nginx 命令

映射的文件统一放在/var/lib/docker/volumes/<volume-name> 目录下

# 命令查看所有卷
docker volume ls# 创建一个卷
docker volume create <volume_name># 查看卷信息
docker volume inspect <volume_name>

1. 创建数据卷

首先,我们需要创建一个Docker数据卷,用于存放Nginx的配置文件。可以使用以下命令创建数据卷:

docker volume create nginx-config

2. 运行Nginx容器并挂载数据卷 

接下来,运行Nginx容器,并将创建的数据卷挂载到容器的配置文件目录。使用以下命令:

docker run -d --name my-nginx -p 80:80 -v nginx-config:/etc/nginx nginx

这里,-v nginx-config:/etc/nginx 参数表示将 容器内部 /etc/nginx  目录 挂载到 数据卷 nginx-config 下

3. 查找数据卷的宿主机路径

为了修改配置文件,我们需要找到数据卷在宿主机上的路径。可以使用以下命令查看数据卷的详细信息:

docker volume inspect nginx-config

该命令会输出数据卷的详细信息,包括其在宿主机上的路径。通常,路径会类似于 /var/lib/docker/volumes/nginx-config/_data

 

[{"CreatedAt": "2025-01-17T23:45:51+08:00",  // 数据卷创建时间"Driver": "local",  // 数据卷驱动类型,这里为本地驱动"Labels": null,  // 数据卷的标签信息,这里为空"Mountpoint": "/var/lib/docker/volumes/nginx-config/_data",  // 数据卷在宿主机上的挂载点路径"Name": "nginx-config",  // 数据卷的名称"Options": null,  // 数据卷的配置选项,这里为空"Scope": "local"  // 数据卷的作用范围,这里为本地}
]

详细解释

  • CreatedAt:表示数据卷创建的时间,格式为ISO 8601标准时间。

  • Driver:表示数据卷的驱动类型。这里使用的是 local 驱动,即数据卷存储在宿主机的本地文件系统中。

  • Labels:用于给数据卷添加标签,方便管理和查询。这里为空,表示没有添加任何标签。

  • Mountpoint:表示数据卷在宿主机上的挂载点路径。你可以在这个路径下找到数据卷中的文件和目录。

  • Name:表示数据卷的名称,这里为 nginx-config

  • Options:用于指定数据卷的配置选项,如权限设置等。这里为空,表示使用默认配置。

  • Scope:表示数据卷的作用范围。这里为 local,表示数据卷仅在本地宿主机上有效。

4. 修改配置文件 

找到数据卷的宿主机路径后,可以直接在该路径下编辑Nginx的配置文件。例如,编辑 nginx.conf 文件:

vi /var/lib/docker/volumes/nginx-config/_data/nginx.conf

在配置文件中,可以进行各种配置,例如设置虚拟主机、反向代理等。编辑完成后,保存并退出。 

查看容器内部文件是否同步修改

# 进入容器
docker exec -it 33fb2fd4632e  bash
# 进入文件
cd /etc/nginx
# 查看内容是否修改
cat nginx.conf
# 退出
exit

5. 重启Nginx容器

修改配置文件后,需要重启Nginx容器以使配置生效。可以使用以下命令重启容器:

docker restart my-nginx

6. 验证Nginx是否正常工作

最后,打开浏览器,访问 http://localhost,如果配置成功,你将看到Nginx的欢迎页面或你自定义的页面。

 

Docker挂载总结

目录挂载

  • 概念:将宿主机目录或文件映射到容器内指定路径,实现数据共享和同步,防止容器删除后数据丢失。

  • 命令docker run -v /host/path:/container/path image

  • 特点:直接操作宿主机文件系统,适用于临时数据共享和开发测试。

卷映射

  • 概念:将Docker管理的卷挂载到容器内路径,Docker自动创建存储位置,映射文件同步,容器删除后卷数据保留。

  • 命令

    • 查看卷:docker volume ls

    • 创建卷:docker volume create volume_name

    • 查看卷信息:docker volume inspect volume_name

    • 挂载卷:docker run -v volume_name:/container/path image

  • 特点:通过Docker命令管理,数据存储在Docker管理的卷中,适用于长期数据存储和对数据管理要求较高的场景。

区别

  • 数据存储位置:目录挂载存储在宿主机指定目录,卷映射存储在Docker管理的卷中。

  • 管理方式:目录挂载直接操作宿主机文件,卷映射通过Docker命令管理卷。

  • 适用场景:目录挂载适合临时数据共享和开发测试,卷映射适合长期数据存储和高数据管理要求场景。


http://www.ppmy.cn/ops/151157.html

相关文章

C++学习记录

本文章建立在已学C语言的基础上 第一阶段 生成随机数函数&#xff1a;rand()。rand()%100指的是生成0~99的随机数。这样生成的随机数每次都是一样顺序出现的&#xff0c;为了防止这个问题出现&#xff0c;我们可以使用随机数种子&#xff0c;如下代码 #include<iostream&…

【Uniapp-Vue3】vite.config中安装插件unplugin-auto-import自动导入vue和uniapp

对着项目右键-->使用命令行窗口打开所在目录&#xff0c;就会弹出终端 在终端中输入如下命令&#xff0c;后回车。 npm install unplugin-auto-import 在项目目录下创建vite.config.js 在vite.config.js文件中输入如下代码&#xff1a; import { defineConfig } from vi…

wow-agent---task2使用llama-index创建Agent

一&#xff1a;创造俩个函数&#xff0c;multiply和add作为fuction calling被LLM当做工具来使用&#xff0c;实现计算一个简单的计算题&#xff1a; from llama_index.llms.ollama import Ollama from llama_index.core.agent import ReActAgent from llama_index.core.tools …

如何制作符合自己设备的FLM下载算法

如何制作符合自己设备的FLM下载算法 --------以I.MXRT1062 QSPI FLAH为例&#xff08;串行qspi nor flash&#xff09; 本文介绍一种基于i.mxrt1062的外挂flah的qspi nor flash下载算法FLM的一种方法&#xff0c;Flash 编程算法是一种用于擦除或下载应用程序到 Flash 设备的软…

【开源免费】基于Vue和SpringBoot的夕阳红公寓管理系统(附论文)

本文项目编号 T 146 &#xff0c;文末自助获取源码 \color{red}{T146&#xff0c;文末自助获取源码} T146&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

Flutter中的事件冒泡处理

在 Flutter 中&#xff0c;GestureDetector 的点击事件默认是冒泡的&#xff0c;即如果嵌套了多个 GestureDetector&#xff0c;点击事件会从最内层的 GestureDetector 开始触发&#xff0c;然后依次向外层传递。如果你希望控制事件的优先级或阻止事件冒泡&#xff0c;可以使用…

kafka的listeners和advertised.listeners,配置内外网分流

总结&#xff1a; listeners 指明 kafka 当前节点监听本机的哪个网卡 advertised.listeners 指明客户端通过哪个 ip 可以访问到当前节点 内网和外网并不必须是是我们通常说的公司内部网络和公网&#xff0c;只要是两块网卡都可以&#xff0c;不管是这两块网卡是公网、内网、甚至…

k8s 容器反复重启

一、容器资源限制问题 原因&#xff1a; 容器申请的资源&#xff08;如 CPU、内存&#xff09;超过了节点的可用资源&#xff0c;导致容器因资源不足而被驱逐或 OOMKilled&#xff08;内存溢出被杀死&#xff09;&#xff0c;进而反复重启。资源限制设置不合理&#xff0c;如设…