Docker 数据管理
Docker 数据管理
- 1. 数据卷
- 2. 启动挂载数据卷的容器
- 3. 数据卷的删除与清理
1. 数据卷
数据卷(Volume)是 Docker 专为容器数据持久化和共享设计的特殊目录,它完全独立于容器的 UnionFS(联合文件系统),是 Docker 中最推荐的数据管理方式。相比直接操作容器内文件,数据卷具备以下不可替代的优势:
- 跨容器共享与重用:一个数据卷可同时挂载到多个容器中,实现容器间数据互通,比如前端容器和后端容器共享静态资源目录。
- 实时生效的修改:对数据卷内文件的增删改查会立即生效,无需重启容器,极大提升开发调试效率。
- 镜像与数据解耦:修改数据卷中的数据不会影响容器镜像,保证镜像的纯净性,避免因数据变更导致镜像冗余。
- 生命周期独立:数据卷的生命周期不受容器影响,即使挂载数据卷的容器被删除,数据卷依然保留,数据不会丢失;只有手动删除数据卷,数据才会被清理。
数据卷的使用逻辑类似于 Linux 系统中的目录 / 文件挂载(mount)。当容器启动并挂载数据卷时,若数据卷为空,镜像中被指定为挂载点的目录下的所有文件会自动复制到数据卷中;若数据卷已有数据,则直接使用现有数据,不会覆盖,这一特性保证了容器初始化时的基础数据完整性
1、创建一个数据卷
使用docker volume create命令可创建自定义名称的数据卷
# 创建名为 my-vol 的数据卷dockervolume create my-vol执行后,Docker 会在后台完成数据卷的创建,并将其存储在宿主机的指定目录(默认路径为 /var/lib/docker/volumes/),该目录由 Docker 统一管理,无需手动干预
2、查看数据卷列表
创建后可通过docker volume ls命令查看所有已创建的数据卷,确认数据卷是否创建成功:
dockervolumels3、查看数据卷详细信息
为了了解数据卷的具体存储路径、创建时间等元数据,可使用docker volume inspect命令查询指定数据卷
dockervolume inspect my-vol其中 Mountpoint 字段显示了该数据卷在宿主机上的实际存储路径,开发者可直接访问该路径操作数据
2. 启动挂载数据卷的容器
创建数据卷后,需将其挂载到容器的指定目录,才能让容器读写数据卷中的内容。在docker run命令中,通过--mount标记可实现数据卷与容器的挂载,且一次启动命令可挂载多个数据卷,满足容器多目录的数据需求
以 Nginx 容器为例,创建名为 web 的容器,并将 my-vol 数据卷挂载到容器的/usr/share/nginx/html目录(Nginx 默认的网页根目录):
dockerrun-d-P\--nameweb\--mountsource=my-vol,target=/usr/share/nginx/html\nginx:alpine3. 数据卷的删除与清理
数据卷的生命周期独立于容器,因此容器被删除后,数据卷仍会保留,这虽然保证了数据安全,但也可能导致无主数据卷占用宿主机空间
使用docker volume rm命令可删除指定的未被挂载的数据卷:
# 删除 my-vol 数据卷dockervolumermmy-vol注意:若数据卷仍被容器挂载,直接删除会报错,需先停止并删除关联容器,再删除数据
如果希望删除容器的同时清理关联的数据卷,可在 docker rm 命令中添加 -v 参数:
# 删除 web 容器,并移除关联的匿名数据卷(命名数据卷仍需手动删除)dockerrm-vweb长期使用 Docker 后,会产生大量无主数据卷(没有任何容器挂载的卷),占据宿主机磁盘空间。可使用docker volume prune命令一键清理:
# 清理所有无主数据卷(执行前会提示确认)dockervolume prune