惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
IT之家
IT之家
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 【当耐特】
V
V2EX
Last Week in AI
Last Week in AI
H
Help Net Security
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
F
Fortinet All Blogs
I
InfoQ
宝玉的分享
宝玉的分享
A
About on SuperTechFans
MongoDB | Blog
MongoDB | Blog
Microsoft Azure Blog
Microsoft Azure Blog
Blog — PlanetScale
Blog — PlanetScale
B
Blog

Liu Zijian's Blog | 一个技术博客

使用Certbot自动续签HTTPS证书 使用Filebeat采集Nginx日志到ES Python的协程 Python中的异常 Python中的类和对象 Python的函数 Python的数据结构,推导式、迭代器和生成器 Spring AI集成多模态模型 LangChain4j多模态 LangChain Tools工具使用 Python中的模块和包 Python全局环境和虚拟环境(venv) LangChain Prompt提示词工程 LangChain4j Tools工具使用 基于Dify搭建AI智能体应用 LangChain4j RAG检索增强生成 Spring AI实现MCP Server Spring AI集成MCP Client LangChain4j Prompt提示词工程 Spring AI使用知识库增强对话功能 Spring AI实现一个智能客服 Spring AI实现一个简单的对话机器人 实现MinIO数据的每日备份 自己实现一个DNS服务 简单理解AI智能体 大模型和大模型应用 LangChain开篇 LangChain4j开篇 一个解析Excel2007的POI工具类 DataPermissionInterceptor源码解读
Docker容器数据卷
Liu Zijian · 2023-09-04 · via Liu Zijian's Blog | 一个技术博客

1.容器数据卷

卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统(不属于容器内),因此能够绕过联合文件系统,提供一些用于持续存储或共享数据的特性。

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此docker不会在容器删除时,删除其挂载的容器卷。

简而言之就是将docker容器内的数据保存进宿主机的磁盘中,并可以实现主机写,容器知道。容器写,主机知道,互通有无,互读互写。

特点:

  1. 容器卷可以在容器之间共享或重用数据。
  2. 卷中的更改可以实时生效。
  3. 数据卷中的更改不会包含在容器的更新中。
  4. 数据卷的生命周期一直到没有容器使用它为止。

2.数据卷的使用

1.添加数据卷

命令

docker run -it -v /宿主机内绝对路径:/容器内目录 镜像名(默认可读可写)

可以绑定挂载多个,就像一台电脑可以连接多个U盘

docker run -it \
-v /宿主机内绝对路径:/容器内目录  \
-v /宿主机内绝对路径:/容器内目录  \
image

如果提示Permission denied错误,追加--privileged=true在后面即可

原因:CentOS7的安全模块会比之前版本的系统有所增强,不安全的会先禁止,所以目录挂载的情况被默认为是不安全的行为,在SELinux里面挂载目录被禁止了,如果要开启,一般用--privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,使用该参数,容器内才真正拥有root权限,否则,容器内的root只是外部的一个普通用户权限。

docker run -it --privileged=true -v /宿主机内绝对路径:/容器内目录 镜像名

2.查看是否关联成功

docker inspect 容器ID

会以json串形式打印显示所有容器内细节,找到Mounts节点了解容器数据卷的挂载情况,"Type": "bind"表示的意思就是容器内相对宿主机的映射关系

"Mounts": [
    {
        "Type": "bind",
        "Source": "/data/nexus-data",
        "Destination": "/nexus-data",
        "Mode": "",
        "RW": true,
        "Propagation": "rprivate"
    }
]

3.限制只读

默认情况数据卷是可读可写的,但是有时出于对数据的保护,需要容器内只能读不能写,如果宿主机写入了内容,会同步给容器,只会限制容器,不限制宿主机,容器内强行写,会报错Read-Only file system

做法: 命令上追加 ro : read only

docker run -it --privileged=true -v /宿主机内绝对路径:/容器内目录:ro 镜像名

3.数据卷的继承和共享

命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器,称为数据卷容器。

数据卷的生命周期一直到没有容器使用为止,挂载数据卷后被继承的父容器,即使被停止,继承的子容器也会保持数据卷和宿主机的关联,也就是说子容器只是继承了父容器文件映射的规则而已。

docker run -it --name 容器名 --volumes-from 父容器名 镜像