Docker数据管理,数据卷,容器服务器数据卷

一、容器的数据管理介绍

1.1 Docker容器分层

        Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。

        如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏,此即“写时复制(COW copy on write)"机制。

        如果将正在运行中的容器修改生成了新的数据,那么新产生的数据将会被复制到读写层,进行持久化保存,这个读写层也就是容器的工作目录,也为写时复制(COW) 机制。

        COW机制节约空间,但会导致性低下,虽然关闭重启容器,数据不受影响,但会随着容器的删除,其对应的可写层也会随之而删除,即数据也会丢失.如果容器需要持久保存数据,并不影响性能可以用数据卷技术实现。

Docker镜像是分层设计的,镜像层是只读的,通过镜像启动的容器添加了一层可读写的文件系统,用户写入的数据都保存在这一层中。

容器的数据分层目录:

LowerDir:images镜像层,即镜像本身,只读。

UpperDir:容器的上层,可读写,容器变化的数据存放在此处

MergedDir:容器的文件系统,使用Union FS(联合文件系统)将lowerdir和upperdir合并完成后给容器使用,最终呈现给用户的统一视图。

WorkDir:容器在宿主机的工作目录,挂载后内容会被清空,且在使用过程中其内容用户不可见。

范围:查看指定容器数据分层:docker  inspect。

1.2 数据持久化

        有状态的协议:有状态协议就是就通信双方要记住双方,并且共享一些信息。而无状态协议的通信每次都是独立的,与上一次的通信没什么关系。

"状态”可以理解为“记忆”,有状态对应有记忆,无状态对应无记忆。

左侧是无状态的http请求服务,右侧为有状态

下层为不需要存储的服务,上层为需要存储的部分服务

1.3 持久保存方式

如果要将写入到容器的数据永久保存,则需要将容器中的数据保存到宿主机的指定目录

Docker的数据类型分为两种:

        数据卷(Data Volume): 直接将宿主机目录挂载至容器的指定的目录 ,推荐使用此种方式,此方式较常用。

        数据卷容器(Data Volume Container): 间接使用宿主机空间,数据卷容器是将宿主机的目录挂载至一个专门的数据卷容器,然后让其他容器通过数据卷容器读写宿主机的数据 ,此方式不常用。

二、数据卷

2.1 数据卷使用场景

数据库

日志输出

静态web页面

应用配置文件

多容器间目录或文件共享

2.2 数据卷的特点

        数据卷是目录或者文件,并且可以在多个容器之间共同使用,实现容器之间共享和重用对数据卷更改数据在所有容器里面会立即更新。

        数据卷的数据可以持久保存,即使删除使用使用该容器卷的容器也不影响。

        在容器里面的写入数据不会影响到镜像本身,即数据卷的变化不会影响镜像的更新。

        依赖于宿主机目录,宿主机出问题,上面容器会受影响,当宿主机较多时,不方便统一管理。

        匿名和命名数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含了数据,会拷贝到新初始化的数据卷中。

2.3 数据卷使用方法

启动容器时,可以指定使用数据卷实现容器数据的持久化,数据卷有三种。

  • 指定宿主机目录或文件: 指定宿主机的具体路径和容器路径的挂载关系。容器和真机共用空间, 把容器的文件挂载到 真机的文件夹。

  • 匿名卷: 不指定数据名称,只指定容器内目录路径充当挂载点,docker自动指定宿主机的路径进行挂载。

  • 命名卷: 指定数据卷的名称和容器路径的挂载关系和匿名卷在一个目录 ,只是取了一个自定义的名字。

docker run 命令的以下格式可以实现数据卷

-v, --volume=[host-src:]container-dest[:<options>]
<options>
ro 从容器内对此数据卷是只读,不写此项默认为可读可写
rw 从容器内对此数据卷可读可写,此为默认值

指定宿主机目录或文件格式:

-v   <宿主机绝对路径的目录或文件>:<容器目录或文件>[:ro]  #将宿主机目录挂载容器目录,两个目录
都可自动创建

案例:docker本地镜像

 我们指定宿主机的/mnt/下挂载到容器中的/opt/下。前者是宿主机目录:容器中的目录

再开一个终端,去宿主机的/mnt/下查看。是否建立了abc123文件夹

匿名卷,只指定容器内路径

没有指定宿主机路径信息,宿主机自动生成/var/lib/docker/volumes/<卷ID>/_data目录,并挂载至容器指定路径
-v <容器内路径>

#示例:
docker run --name nginx -v /etc/nginx nginx

 示例:至指定容器中的目录。

在容器中挂载位置创建一个文件。

容器中的目录/etc/nginx/下。创建文件TestFile

在宿主机中查看是否有我们创建的文件。

命名卷

#命名卷将固定的存放在/var/lib/docker/volumes/<卷名>/_data
-v <卷名>:<容器目录路径>
#可以通过以下命令事先创建,如可没有事先创建卷名,docker run时也会自动创建卷
docker volume create <卷名>


#示例:
docker run -d  -p 80:80 --name nginx01 -v vol1:/usr/share/nginx/html/ nginx

直接在本机修改主页:

 这里的docker run -d  -p 80:80 --name nginx01 -v /data/nginx/vol1:/usr/share/nginx/html/ nginx也可以指定绝对路径。

docker rm 的 -v 选项可以删除容器时,同时删除相关联的匿名卷

2.4 实战案例: 在宿主机创建容器所使用的目录

使用Dockerfile构建镜像,在宿主机中创建容器所使用的目录。

[root@Node2 system]#:ls
Centos-7.repo  Centos-8.repo  Dockerfile  epel-7.repo  index.html  nginx-1.18.0.tar.gz  qh.repo
#写Dockerfile文件
[root@Node2 system]#:cat Dockerfile 
FROM centos:centos7.9.2009
LABEL author="dockerfile cloud" \version="1.0"RUN rm -rf /etc/yum.repos.d
COPY epel-7.repo /etc/yum.repos.d/
ADD qh.repo /etc/yum.repos.d/
RUN yum -y install gcc gcc-c++ make automake pcre pcre-devel zlib  zlib-devel openssl openssl-devel wget
ADD nginx-1.18.0.tar.gz   /usr/local/src/
RUN  cd /usr/local/src/nginx-1.18.0 && ./configure --prefix=/apps/nginx && make && make install
VOLUME [ "/apps/nginx/html" ]
COPY   index.html    /apps/nginx/html/
CMD   [ "-g","daemon off;" ]
EXPOSE 80  443
ENTRYPOINT   ["/apps/nginx/sbin/nginx"]
#主页
[root@Node2 system]#:cat index.html 
7-2 7-2

 构建镜像:

运行容器:查看端口并访问nginx服务。 

在本地修改主页:通过find找到主页位置:修改index.html文件

我们可以指定宿主机共享的目录:使用上面我们构建的镜像。

在宿主机指定一个共享目录。/data/testdir/

写一个首页。运行centos7:v1容器。暴露端口。

docker run -d -p 80:80 -v /data/centNginx/:/apps/nginx/html/ --name web1 centos7:v1

可以发现。把主页写在了本地。直接访问宿主机IP。默认80端口。访问出来了我们指定的首页。

三、容器服务器数据卷

容器服务器数据卷是指在一个宿主机的目录,作为挂载点。将该目录下的文件挂载到多个容器中的目录下。使得多个容器能够共享目录。其实还是通过宿主机的目录下向多个容器共享目录。

一个容器中的目录与宿主机的目录共享后,第二个容器通过--volumes-from [第一个容器的名字]

运行一个容器。共享本机的/data/testdir/目录。与容器中的/usr/share/nginx/html/。

宿主机的/data/testdir/作为容器服务器数据卷。再运行一个容器,指向该目录。

修改宿主机的index.html文件:查看两个容器是否跟着改变:

修改容器91中的index.html文件。看2c容器中的主页是否同步跟着改变。

这样就通过宿主机作为容器服务器数据卷。为多个容器共享存储。使用--volumes-from指定容器服务器。

---end---

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/395421.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis相关面试题(二)

一、Bit中不同命令使用的场景 二、什么是缓存击穿&#xff0c;缓存穿透&#xff0c;缓存雪崩&#xff1f; 缓存击穿&#xff1a;是指当某一个key的缓存过期时大并发量的请求同时访问key&#xff0c;瞬间击穿服务器直接访问到数据库&#xff0c;使得数据库处于负载情况 缓存穿透…

mysql8.4.2数据库做主从复制

linux rocky 9.2系统安装mysql-wsrep-8.4.2-26.20-linux-x86_64.tar.gz二进制包-CSDN博客文章浏览阅读472次&#xff0c;点赞7次&#xff0c;收藏4次。linux rocky 9.2系统安装mysql-wsrep-8.4.2-26.20-linux-x86_64.tar.gz二进制包https://blog.csdn.net/xikui1551/article/de…

C++的深拷贝和浅拷贝

浅拷贝是一种简单的拷贝方式&#xff0c;仅仅是复制对象的基本类型成员和指针成员的值&#xff0c;而不复制指针所指向的内存。这可能会导致两个对象共享相同的资源&#xff0c;从而引发潜在的问题&#xff0c;如内存泄漏、意外修改共享资源等。一般来说编译器默认帮我们实现的…

Openwrt配置ZeroTier,实现公网访问内网中服务器

ZeroTier注册&Openwrt初始配置 首先来到Openwrt的VPN→ZeroTier页面&#xff0c;进行一个很简单的注册 注册后去zerotier的网页管理页面进行一个很简单的创建网络 复制网络ID备用 在openwrt填写网络ID并启用。如果你需要访问内网主机勾上 自动客户端NAT 在zerotier网络管理…

十一、vector 类

Ⅰ . vector 的介绍和使用 01 vector 的介绍 vector 的文档介绍&#xff1a;vector ① vector 是表示可变大小数组的序列容器&#xff0c;既像数组&#xff0c;又不像数组 像体现在&#xff1a;同样采用连续存储空间存储元素&#xff0c;可以使用下标访问元素 不像体现在&…

大模型笔记5 Extractive QA任务评估

目录 Extractive QA任务评估 Extractive QA评测指标 precision, recall, f1 ROUGE 划分训练与评估数据集 token位置评估 单个token位置评估 输入label的token位置 预测token位置 评估 Wandb 共享机器同时登录 样本类别平衡 标记token label时对窗口进行筛选 训练…

IT运维岗适用的6本证书

作为IT从业人员&#xff0c;不断提升自身的专业技能和知识是提升职场竞争力、助力升职加薪的重要途径。特别是在运维领域&#xff0c;虽然工作看似简单&#xff0c;但实际上需要掌握的技术知识却相当全面。为了全面提升自己的技术能力&#xff0c;并证明自己的专业能力&#xf…

2024 年 7 月区块链游戏研报:市场波动与数据分化的挑战与机遇

作者&#xff1a;Stella L (stellafootprint.network) 数据来源&#xff1a;Footprint Analytics 游戏研究页面 7 月份&#xff0c;加密货币市场波动显著&#xff0c;价格表现各异。比特币和 Solana 表现抢眼&#xff0c;与此同时&#xff0c;以太坊在美国市场推出现货以太坊…

Python酷库之旅-第三方库Pandas(073)

目录 一、用法精讲 296、pandas.Series.dt.as_unit方法 296-1、语法 296-2、参数 296-3、功能 296-4、返回值 296-5、说明 296-6、用法 296-6-1、数据准备 296-6-2、代码示例 296-6-3、结果输出 297、pandas.Series.dt.days属性 297-1、语法 297-2、参数 297-3、…

零售企业中 SRM 系统与开源 AI 智能名片商城系统的协同作用

摘要&#xff1a;本文深入探讨了 SRM 系统在零售企业与上游供应商关系管理中的关键作用&#xff0c;并引入开源 AI 智能名片商城系统&#xff0c;细致分析了两者如何协同助力零售企业优化供应链、提升竞争力。通过阐述 SRM 系统的功能模块及其对零售企业的多方面积极影响&#…

WEB渗透未授权访问篇-Redis

测试 redis-cli redis-cli -h 127.0.0.1 flunshall 192.168.0.110:6379>ping PONG 存在未授权访问 JS打内网 var cmd new XMLHttpRequest(); cmd.open("POST", "http://127.0.0.1:6379"); cmd.send(flushall\r\n); var c…

8月6日笔记

8月6日 红日靶场打靶继续 SHOW VARIABLES #用于显示服务器运行时的各种系统变量的当前设置。这些变量可以控制服务器的行为在 MySQL 中&#xff0c;general_log 和 general_log_file 是两个与“general”相关的系统变量&#xff0c;它们控制着服务器是否启用一般查询日志以及…

重庆市合川区第二届网络安全“钓鱼城“杯部分题解

MISC 下载文件后&#xff0c;进行分析 往下划看见smb 最开始以为是通过smb协议下载的文件 找半天没发现&#xff0c;往前翻了翻&#xff0c;看见了flag 存储为原始数据 通过上述分析发现开头是pk&#xff0c;保存为zip压缩包 发现需要密码 感觉是伪加密 使用工具一把梭 再…

鸿蒙AI功能开发【hiai引擎框架-人脸识别】 基础视觉服务-人脸检查

介绍 本示例展示了使用hiai引擎框架提供的人脸识别能力。 本示例模拟了在应用里&#xff0c;选择一张图片&#xff0c;识别其多个人脸信息并展示出来。包括人脸框、五官点位、置信度、人脸朝向&#xff08;欧拉角&#xff09; 需要使用hiai引擎框架通用文字识别接口hms.ai.f…

vue前端自适应布局,一步到位所有自适应

页面展示 实现内容 1&#xff0c;左右布局 左侧固定宽带&#xff0c;右侧自适应剩余的宽度。中间一条分割线&#xff0c;可以拖拉&#xff0c;自适应调整左右侧的宽度。左侧的高度超长自动出现横向滚动条&#xff0c;左侧宽度超长&#xff0c;自动出现竖向滚动条。 2&#x…

媒体资讯视频数据采集-lux的使用

lux(annie)是个github上的一个开源项目&#xff0c;可以使用他来下载网上各个平台的视频、音频、图片。 支持的站点也不少**&#xff08;ps: 对于一些反爬机制较好的网站可能不能下载&#xff0c;比如抖音、快手&#xff09;** ​ github使用说明页面提供windows、linux、M…

SpringMVC (发送请求——>参数传递—— >响应数据)

设置请求访问路径 RequestMapper&#xff1a;将请求访问路径和我们业务层的方法联系起来 ResponseBody&#xff1a;将我们业务层方法的返回值转化为json&#xff0c;xml或其他格式的数据返回给页面 两种请求 get请求 post请求 测试案例 RequestMapping("/getNameAndAge&…

可观测性(observability)

一、定义 wiki百科的定义 In software engineering, more specifically in distributed computing, observability is the ability to collect data about programs’ execution, modules’ internal states, and the communication among components.[1][2] To improve obser…

Linux 快速构建LAMP环境

目录 部署方式&#xff1a; 基础环境准备&#xff1a; 1.安装Apache服务 &#xff08;1&#xff09;安装Apache &#xff08;2&#xff09;安装一些Apache的扩展包 2.安装PHP语言 &#xff08;1&#xff09;下载php软件仓库 &#xff08;2&#xff09;指定php安装版本…

HAProxy七层负载均衡配置方案

HAProxy 一、准备二、配置HAProxy服务器1. 下载HAProxy2. 编写配置文件3. 启动HAProxy服务 三、配置后端服务①配置web服务器②配置php服务器 四、测试 一、准备 准备5台CentOS7服务器&#xff0c;IP地址如下&#xff1a; HAProxy 192.168.152.71web1 192.168.152.72web2 192.…