Lyndra's Blog

Docker 数据卷 volume

2025-03-05
工具教程 Docker
5分钟
836字
温馨提示:本文最后更新于 2025-03-11 ,部分信息可能因时间推移而不再适用,欢迎反馈。

Docker 数据卷 volume

Docker 有两种共享数据的方式,一种是数据卷,一种是挂载主机目录。数据卷和挂载主机目录都需要宿主机的文件管理系统的支持,但两者的区别在于数据卷被创建在 Docker 的目录中,不受到其他宿主机上其他服务的影响,数据卷创建后的所有者是 root。挂载目录则由宿主机管理。

本来以为 Docker 为 volume 单独设计的系统,提供不同的权限转换操作。但实际上 volume 仅仅是管理者转变为 docker,文件权限和系统都和宿主机一致。因此,如果你希望在使用时与宿主共享文件内容,那么最好还是使用挂载目录,虽然 volume 在创建时,可以指定挂载目录,但权限不会改变,和挂载目录相比没有优势。

另外,docker 的一个核心思想就是隔离,涉及到共享文件时,就一定程度打破了这个观念,因此,docker 只是提供了一种容器访问宿主目录和文件的方式,但不会对宿主机上的文件的权限做任何更改。

使用 volume

先查看 docker 中的 volume 命令都有哪些子选项。

Terminal window
1
$ docker volume --help
2
3
Usage: docker volume COMMAND
4
5
Manage volumes
6
7
Commands:
8
create Create a volume
9
inspect Display detailed information on one or more volumes
10
ls List volumes
11
prune Remove unused local volumes
12
rm Remove one or more volumes
13
14
Run 'docker volume COMMAND --help' for more information on a command.

最常用的就是 create 和 inspect 选项。通过 create 可以自定义创建数据卷,通过 inspect 可以查看数据卷的详细信息。

创建数据卷

可通过 --help 查看 create 选项的详细信息。

Terminal window
1
$ docker volume create --help
2
3
Usage: docker volume create [OPTIONS] [VOLUME]
4
5
Create a volume
6
7
Options:
8
-d, --driver string Specify volume driver name (default "local")
9
--label list Set metadata for a volume
10
-o, --opt map Set driver specific options (default map[])

-d 可以指定 volume 驱动,除了默认的 local 驱动,Docker 还支持第三方的 volume 驱动插件。如果是本地储存,直接忽略即可。

--label 可以设置数据卷的标签,方便管理。例如 --label owner=apple

-o 可以设置驱动特定的选项,比如 size 可以设置数据卷的大小。-o 中的选项和指令的 volume 驱动有关。内置的 local 驱动程序在 Windows 上不接受任何选项。在 Linux 和 Docker Desktop 上, local 驱动程序接受类似于 Linux mount 命令的选项。可以通过多次传递 --opt 标志来提供多个选项。一些 mount 选项(例如 o 选项)可以接受逗号分隔的选项列表。完整的可用挂载选项列表可以在 mount 找到。更多详细配置请参考:docker volume create

例如,创建一个名为 volume-name 的 volume,并将其数据存储在自定义文件夹中:

Terminal window
1
docker volume create --driver local --opt type=none \
2
--opt device=/你的/宿主机/目录 \
3
--opt o=bind \
4
volume-name

启动容器挂载 volume

创建完 volume 后,在启动容器时,就可以挂载到容器对应的目录中。例如,通过 ubuntu:24.04 镜像启动容器 test-vol,并将 test-volume 挂载到 /home/test 目录。

Terminal window
1
docker run -it --name test-vol -v test-volume:/home/test ubuntu:24.04

需要注意的是,挂载的目录的权限仍然和宿主机一致,容器中的用户 id 需要和宿主机一致,否则不能写入。

本文标题:Docker 数据卷 volume
文章作者:Lyndra
发布时间:2025-03-05
总访问量
总访客数人次
Copyright 2025
站点地图