Docker 容器数据卷
Docker 容器数据卷
docker 容器数据卷有点类似我们 Redis 里面的 rdb 和 aof 文件,可以实现数据的持久化和同步操作,容器间也可以实现数据共享
卷就是目录或文件,存在于一个或多个容器中,由 docker 挂载到容器,但不属于联合文件系统,因此能够绕过 Union File System 提供一些用于持续存储或共享数据的特性
卷的设计目的就是数据持久化,完全独立于容器的生存周期,因此 docker 不会在容器删除时删除其挂载的数据卷
docker 容器数据卷特点:
- 数据卷可在容器之间共享或重用
- 数据卷中的更改可以直接实时生效(容器停止也不影响)
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的生命周期一直持续到没有容器使用它为止
宿主机和容器之间实现数据卷挂载
命令
docker run -it --privileged=true -v 宿主机绝对路径目录:容器内目录 镜像名
docker 挂载主机目录访问如果出现 cannot open directory.:Permission denied,解决办法:挂载目录时加上 --privileged=true 参数;原因:如果是Centos7,安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为是不安全的行为,在SELinux里面挂载目录被禁止掉了,如果要开启,我们一般使用 --privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即使用该参数,container内的root拥有真正的root权限,否则container内的root只是外部的一个普通用户权限
以上挂载命令默认是可读可写的,等同于以下命令:
docker run -it --privileged=true -v 宿主机绝对路径目录:容器内目录:rw 镜像名
如果要限制容器内容数据卷只能读不能写,则通过以下命令挂载:
docker run -it --privileged=true -v 宿主机绝对路径目录:容器内目录:ro 镜像名
案例
# 挂载目录
docker run -it --privileged=true -v /home/user01/data/docker/ubuntu:/temp ubuntu
# 挂载目录后查看容器元数据信息,在Mounts块中可以看到挂载信息,eg:
"Mounts": [
{
"Type": "bind",
"Source": "/home/user01/data/docker/ubuntu",
"Destination": "/temp",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
容器数据卷的继承和共享
# 启动一个容器并继承父容器的数据卷挂载规则
docker run -it --privileged=true --volumes-from 父容器id 镜像名
这样宿主机的一个目录就相当于挂载了多个容器数据卷
记得快乐
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!