目录
目录挂载
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命令管理卷。
-
适用场景:目录挂载适合临时数据共享和开发测试,卷映射适合长期数据存储和高数据管理要求场景。