Docker 数据卷(Volume)详细介绍

news/2025/2/10 23:34:40/

Docker 数据卷(Volume)详细介绍

1. 什么是 Docker 数据卷?

Docker 数据卷(Volume)是一种用于 持久化数据容器间数据共享 的机制。由于容器的存储是临时的,容器删除后其中的数据会丢失,因此使用数据卷可以保证数据不会随着容器的销毁而丢失。

2. 数据卷的特点

  • 持久化存储容器删除后,数据卷仍然存在,不会随容器删除而丢失。
  • 容器间共享:多个容器可以挂载同一个数据卷,实现数据共享。
  • 高性能:相比于 bind mount(绑定挂载),数据卷由 Docker 管理,性能更优。
  • 独立于文件系统:可以在不同的操作系统或存储驱动(如 overlay2、aufs)间使用。

3. 常见的 Docker 数据卷操作

3.1 创建和管理数据卷

(1)创建数据卷
docker volume create my_volume

这个命令会创建一个名为 my_volume 的数据卷,并由 Docker 管理。

(2)查看所有数据卷
docker volume ls

列出当前所有的 Docker 数据卷。

(3)查看数据卷详细信息
docker volume inspect my_volume

显示 my_volume 的详细信息,包括存储位置、驱动等。

(4)删除数据卷
docker volume rm my_volume

删除 my_volume 数据卷。注意:如果某个容器正在使用该数据卷,删除会失败。

(5)清理未使用的数据卷
docker volume prune

删除所有未被任何容器使用的 Docker 数据卷。


4. 在容器中使用数据卷

4.1 使用 --mount 挂载数据卷

推荐使用 --mount,它的语法清晰,适用于复杂场景:

docker run -d --name my_container --mount source=my_volume,target=/app busybox
  • source=my_volume:使用名为 my_volume 的 Docker 数据卷。
  • target=/app:把 my_volume 挂载到容器内的 /app 目录。

4.2 使用 -v 挂载数据卷

-v 语法较老,但仍然常用:

docker run -d --name my_container -v my_volume:/app busybox

作用与 --mount 相同,但 -v 不支持某些高级选项(如 readonly)。


5. 绑定挂载(Bind Mounts)

除了 Docker 管理的数据卷,Docker 还支持将宿主机目录直接挂载到容器中:

docker run -d --name my_container -v /host/path:/container/path busybox

这种方式适用于:

  • 开发环境(宿主机和容器同步文件)。
  • 日志文件存储容器删除后,日志仍然保留)。

注意:Bind Mount 依赖于宿主机的路径,可能会导致跨平台兼容性问题。


6. 只读挂载

为了提高安全性,可以使用 :ro(只读)挂载:

docker run -d --name my_container -v my_volume:/app:ro busybox

容器可以读取 /app 目录下的内容,但不能修改。

同样,使用 --mount

docker run -d --name my_container --mount source=my_volume,target=/app,readonly busybox

7. 共享数据卷

多个容器可以共享同一个数据卷:

docker run -d --name container1 -v my_volume:/app busybox
docker run -d --name container2 -v my_volume:/app busybox

container1container2 都可以访问 /app 目录,实现数据共享。


8. 备份和恢复数据卷

8.1 备份数据卷

docker run --rm -v my_volume:/data -v $(pwd):/backup busybox tar -czf /backup/backup.tar.gz -C /data .
  • -v my_volume:/data:将 my_volume 挂载到容器/data
  • -v $(pwd):/backup:把宿主机当前目录挂载到容器/backup
  • tar -czf:打包 /data 目录下的内容,生成 backup.tar.gz

8.2 恢复数据卷

docker run --rm -v my_volume:/data -v $(pwd):/backup busybox tar -xzf /backup/backup.tar.gz -C /data

该命令会把 backup.tar.gz 中的数据解压到 my_volume 里。


9. 删除数据卷

9.1 删除单个数据卷

docker volume rm my_volume

9.2 删除未被使用的所有数据卷

docker volume prune

这个命令会删除所有没有被任何容器使用的 Docker 数据卷。


10. 数据卷与 Docker Compose

docker-compose.yml 文件中,可以定义数据卷:

version: '3'
services:app:image: busyboxvolumes:- my_volume:/app
volumes:my_volume:

然后运行:

docker-compose up -d

my_volume 会自动创建并挂载到 /app


11. 总结

重点知识回顾

关键点说明
docker volume create my_volume创建数据卷
docker volume ls查看所有数据卷
docker volume inspect my_volume查看数据卷详情
docker volume rm my_volume删除数据卷
docker volume prune清理未使用的数据卷
docker run -v my_volume:/app busybox挂载数据卷
docker run -v /host/path:/container/path busybox绑定挂载
docker run -v my_volume:/app:ro busybox只读挂载
docker-compose.yml在 Docker Compose 中使用数据卷
tar -czftar -xzf备份和恢复数据卷

Docker 数据卷是 持久化数据容器间数据共享 的关键工具,合理使用可以大大提高数据管理的灵活性和安全性。对于使用数据卷的必要性和好处,请阅读文章:docker数据卷的好处与必要性


http://www.ppmy.cn/news/1570994.html

相关文章

让文物“活”起来,以3D数字化技术传承文物历史文化!

文物,作为不可再生的宝贵资源,其任何毁损都是无法逆转的损失。然而,当前文物保护与修复领域仍大量依赖传统技术,同时,文物管理机构和专业团队的力量相对薄弱,亟需引入数字化管理手段以应对挑战。 积木易搭…

周报1.0

补题补题(/// ̄皿 ̄)○~ 牛客1(4):ABDG E:双生双宿之错: 小红定义一个数组是“双生数组”,当且仅当该数组大小为偶数,数组的元素种类恰好为 2种,且这两种元素的出现次数相同。例如{1,1,4,4,1,4} 是双生数组…

【JavaEE】Spring Web MVC

目录 一、Spring Web MVC简介 1.1 MVC简介1.2 Spring MVC1.3 RequestMapping注解1.3.1 使用1.3.2 RequestMapping的请求设置 1.3.2.1 方法11.3.2.2 方法2 二、Postman介绍 2.1 创建请求2.2 界面如下:2.3 传参介绍 一、Spring Web MVC简介 官方文档介绍&#xff…

从 SQL 语句到数据库操作

1. SQL 语句分类 数据定义语言 DDL : 用于定义或修改数据库中的结构,如:创建、修改、删除数据库对象。create、drop alter 数据操作语言 DML : 用于添加、删除、更新数据库中的数据。select、insert alter、drop 数据控制语言 D…

MySQL 8.0.41 终端修改root密码

1.在 MySQL 命令行中,运行以下命令修改密码 ALTER USER rootlocalhost IDENTIFIED BY new_password; 其中,new_password替换为你想要设置的新密码 2.退出 MySQL终端,重新打开,使用新密码进入,修改成功

论文浅尝 | CogMG:大语言模型与知识图谱的协同增强(ACL2024)

笔记整理:杜超超,天津大学硕士,研究方向为自然语言处理、大语言模型 论文链接:https://aclanthology.org/2024.acl-demos.35.pdf 发表会议:ACL 2024 1. 动机 大语言模型(LLMs)在问答任务中已经被…

node.js使用mysql2对接数据库

一、引言 在现代Web开发中,Node.js作为一种高效、轻量级的JavaScript运行时环境,已经广泛应用于后端服务的开发中。而MySQL,作为一个广泛使用的关系型数据库管理系统(RDBMS),提供了强大的数据存储和查询功能…

[免费]微信小程序智能商城系统(uniapp+Springboot后端+vue管理端)【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的微信小程序智能商城系统(uniappSpringboot后端vue管理端),分享下哈。 项目视频演示 【免费】微信小程序智能商城系统(uniappSpringboot后端vue管理端) Java毕业设计_哔哩哔哩_bilibili 项目介绍…