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