你是不是也经常在使用 Docker 的时候,遇到“数据持久化”相关的困惑?容器删了,数据也跟着没了?今天就带你深入了解 Docker 的 Volume机制,搞懂什么是 Volume、怎么使用、存储在哪,以及如何实现多个容器共享存储!摘要:你是不是也经常在使用 Docker 的时候,遇到“数据持久化”相关的困惑?容器删了,数据也跟着没了?今天就带你深入了解 Docker 的 Volume机制,搞懂什么是 Volume、怎么使用、存储在哪,以及如何实现多个容器共享存储!
一、什么是 Docker Volume?
Docker 的 Volume(卷)是官方推荐的数据持久化方案,用来将容器中的数据独立存储在宿主机上。与容器生命周期解耦,删除容器不会影响数据,非常适合用于数据库、日志等场景。
简单理解就是:容器内的数据 -> Volume -> 宿主机目录。
二、✅Volume 的使用场景
容器内服务需要持久化数据,比如 MySQL、Redis、PostgreSQL♻️ 多个容器之间需要共享数据防止重要数据在容器销毁时丢失容器频繁更新、迁移,但数据需要保留三、Volume 怎么使用?1. 创建 Volumedocker volume create mydatadocker volume ls2. 使用 Volume 运行容器docker run -d \--name mysql \-v mydata:/var/lib/mysql \mysql:5.7这条命令把宿主机上的 mydata 卷挂载到了容器中的 /var/lib/mysql,MySQL 的数据就存储在这个卷里。
3. 查看卷挂载路径
docker volume inspect mydata输出中 Mountpoint 字段会告诉你这个卷实际挂载到了宿主机的哪个路径,例如:
"Mountpoint": "/var/lib/docker/volumes/mydata/_data"也就是说,你的数据其实是存在宿主机这个目录下的。
四、Docker Volume 存储在哪?
默认情况下,Docker 会将 Volume 存储在:
/var/lib/docker/volumes/卷名/_data/你也可以用第三方存储驱动(如 NFS、GlusterFS、Ceph 等)把 Volume 存储到远程服务器或分布式存储系统。
五、如何共享 Volume?✅方式1:多个容器挂载同一个 Volume
docker run -d --name container1 -v mydata:/app/data busybox sleep 3600docker run -d --name container2 -v mydata:/app/data busybox sleep 3600两个容器就可以共享 /app/data 目录下的内容了。
✅方式2:使用--volumes-from继承挂载
docker run -d --name container1 -v /data busyboxdocker run -d --name container2 --volumes-from container1 busybox适合某些场景下的依赖继承,比如日志采集、配置共享等。
六、Volume 的清理删除未使用的卷
docker volume prune删除指定卷docker volume rm mydata⚠️ 注意:如果卷还在使用中,删除会失败。
七、补充:Volume vs Bind Mount
特性
Volume(推荐)
Bind Mount(绑定挂载)
安全性
高,Docker 自主管理
较低,容易暴露宿主机结构
跨平台支持
备份和迁移
简单
需要自行管理
场景
数据持久化、共享数据
本地开发、配置文件挂载
总结一下
Docker Volume 是实现容器数据持久化和共享的关键工具。掌握 Volume,可以让你:
保证数据不随容器销毁而丢失实现多个容器的数据共享更安全、便捷地管理容器生命周期中的数据别再让数据随风而去了,赶紧用 Volume 把数据稳稳托住吧!
来源:晓加论科技