网站首页 > 基础教程 正文
默认情况下,在容器内创建的文件,都会保存在容器基于镜像之上的一个可读写层。但是,这一层是依赖于容器而存在的,当容器不存在时,这些数据也就不存在了。而且这些数据紧紧的耦合在容器内部,很难将这些数据导出。另一点,对容器的这一层进行写操作,需要额外的系统支持,相比挂载卷这种直接写主机文件系统效率要更低。
Docker提供两种独立于容器之外的持久化存储技术,volumes, and bind mounts
不管选哪种挂载方式,在容器内部看起来都是一样的。
区别:
Volume:由docker创建和管理,数据会放在/var/lib/docker/volumes/这个目录下,其他的应用不应该访问和修改这个目录的数据
一个volume可以挂载给多个容器使用
Bind mounts:可以挂载在主机的任何目录存放数据,其他应用也可以随时访问和修改其中的数据
tmpfs mounts:只保存在内存里,永远不会持久化到文件
使用场景:
一般来说,使用Volume都是更合适的选择。
只有在一些特殊场景下,使用Bind mounts,比如;需要和主机共享某些重要的系统配置文件
tmpfs mounts就更特殊了,可能是一些不想持久化的敏感数据的场景
命令:
在以前,通常使用-v或--volume用来给docker容器挂载卷,使用--mount给swarm service挂载卷。但是从Docker 17.06版本开始,官方建议统一使用--mount给容器挂载卷存储。--mount 要比-v的语义更明确,且语法更清晰
docker run -d --mount source=my-vol,target=/webapp ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
--mount的参数语法后面是跟的键值对。source指的是主机上的文件目录名。target指的是容器内的路径
使用docker inspect d82a4478a8 查看一下容器详情
在Mounts标签下是挂载的信息
"Mounts": [
{
"Type": "volume",
"Name": "my-vol",
"Source": "/var/lib/docker/volumes/my-vol/_data",
"Destination": "/webapp",
"Driver": "local",
"Mode": "z",
"RW": true,
"Propagation": ""
}
]
查看主机上目录:
/var/lib/docker/volumes/my-vol/_data
查看容器内的目录
docker exec -it d82a4478a8a8 进入容器命令行交互
可以看到我们挂载的target目标文件夹 /webapp
移除volume
现在要删除volume,只删除容器是不行的。
需要执行
docker volume rm my-vol
猜你喜欢
- 2025-01-20 Docker下var/lib/docker/overlay2空间清理办法
- 2025-01-20 Docker容器基于WebDav通过Alist挂载(百度网盘/阿里云盘)
- 2025-01-20 dcoker之容器数据卷,以及定制镜像Dockerfile配置与设置
- 2025-01-20 Docker ToolBox 如何重置环境?
- 2025-01-20 【收藏】Docker容器高频率使用命令整理
- 2025-01-20 39K Star!一款超好用 Docker 终端工具!
- 2025-01-20 开源分布式系统追踪-03-CNCF jaeger-02-如何通过 docker 安装?
- 2025-01-20 docker基础知识/尚硅谷docker学习笔记
- 2025-01-20 七、Docker-PS命令解析
- 2025-01-20 使用Docker轻松搭建DNS服务器
- 05-162025前端最新面试题之HTML和CSS篇
- 05-16大数据开发基础之HTML基础知识
- 05-16微软专家告诉你Win10 Edge浏览器和EdgeHTML的区别
- 05-16快速免费将网站部署到公网方法(仅支持HTML,CSS,JS)
- 05-16《从零开始学前端:HTML+CSS+JavaScript的黄金三角》
- 05-16一个简单的标准 HTML 设计参考
- 05-16css入门
- 05-16前端-干货分享:更牛逼的CSS管理方法-层(CSS Layers)
- 最近发表
- 标签列表
-
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- deletesql (62)
- c++模板 (62)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)