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

news2024/12/27 19:47:03

一、容器的数据管理介绍

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.coloradmin.cn/o/1983923.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GroupMamba实战:使用GroupMamba实现图像分类任务(二)

文章目录 训练部分导入项目使用的库设置随机因子设置全局参数图像预处理与增强读取数据设置Loss设置模型设置优化器和学习率调整策略设置混合精度&#xff0c;DP多卡&#xff0c;EMA定义训练和验证函数训练函数验证函数调用训练和验证方法 运行以及结果查看测试完整的代码 在上…

基于NSGAII的的柔性作业调度优化算法MATLAB仿真,仿真输出甘特图

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于NSGAII的的柔性作业调度优化算法MATLAB仿真,仿真输出甘特图,完工时间:,延期,机器负载,机器能耗。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 &a…

Stack Overflow2024年度调查:76%的程序员正在或计划使用AI工具!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,专注于分享AI全维度知识,包括但不限于AI科普,AI工具测评,AI效率提升,AI行业洞察。关注我,AI之路不迷路,2024我们一起变强。 1. 最受…

零售EDI:OBI欧倍德EDI项目案例

OBI欧倍德公司是德国建材和家居装饰零售连锁店&#xff0c;在德国以及其他欧洲国家拥有众多分店&#xff0c;是欧洲领先的DIY&#xff08;Do It Yourself&#xff09;零售商之一。为了更好地处理与全球供应商之间的业务数据往来&#xff0c;OBI采用EDI提高其供应链的自动化水平…

继承(一)

概念&#xff1a;继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保 持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象 程序设计的层次结构&#xff0c…

基于Verilog HDL的FPGA开发入门

在电子设计自动化领域&#xff0c;FPGA&#xff08;现场可编程门阵列&#xff09;是一种强大的工具&#xff0c;它允许设计者在硬件层面上实现自定义的逻辑电路。Verilog HDL&#xff08;硬件描述语言&#xff09;是描述FPGA设计的主要语言之一&#xff0c;以其简洁性和强大的功…

工具收集 - tinytask(相当于迷你的按键精灵)

工具收集 - tinytask&#xff08;相当于迷你的按键精灵&#xff09; 简介首页 简介 TinyTask 是一款极简主义的 PC 自动化应用程序&#xff0c;您可以用它来记录和重复操作。顾名思义&#xff0c;它小得令人难以置信&#xff08;仅 36KB&#xff01;&#xff09;&#xff0c;极…

调度系统之Oozie

Apache Oozie 是一个工作流调度系统&#xff0c;专门设计用于管理在 Apache Hadoop 平台上运行的工作流。Oozie 提供了丰富的功能&#xff0c;使得大规模数据处理任务的调度和管理变得更加高效和灵活。以下是对 Oozie 的详细介绍&#xff1a; 核心功能 1. 工作流管理 Oozie 允…

营养学基础

目录 一&#xff0c;指标概念 二&#xff0c;中国居民膳食矿物质 三&#xff0c;婴儿奶粉矿物质计算 1&#xff0c;冲奶粉 2&#xff0c;奶粉营养表 3&#xff0c;计算示例 一&#xff0c;指标概念 简单来说&#xff0c;UL是上限&#xff0c;其他3个是推荐值。 RNI的可信…

牛客JS题(二十四)验证是否是身份证

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; 正则表达式一代与二代身份证判断 题干&#xff1a; 我的答案 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><style>/* 填写样式 */</style></head><…

【旧数字组合新数字】有1,2,3,4个数字,求能组成多少个互不相同且无重复数字的三位数,都是多少

有1&#xff0c;2&#xff0c;3&#xff0c;4个数字&#xff0c;求能组成多少个互不相同且无重复数字的三位数&#xff0c;都是多少&#xff0c;使用C语言实现 具体代码&#xff1a; #include<stdio.h>int main(){int i,j,n;for(i1;i<5;i){for(j1;j<5;j){for(n1;…

消灭星星游戏程序设计【连载十】——小星星的残影轨迹

消灭星星游戏程序设计【连载十】——小星星的残影轨迹 大家每次都可以在页面中下载本节内容的实现代码&#xff0c;一步一步从简单开始&#xff0c;逐步完成游戏的各种功能&#xff0c;如果大家有任何问题也欢迎留言交流。 游戏整体效果展示&#xff1a; 1、本节要达到的效果 …

【Mind+】掌控板入门教程05 心情灯

大自然的各种色彩使人产生各种感觉&#xff0c;心理学家认为&#xff0c;不同的颜色会让人产生不同的情绪。比如&#xff0c;红色通常给人刺激、热情和幸福的感觉&#xff0c;而绿色作为自然界中草原和森林的颜色&#xff0c;给人以理想、年轻、新鲜的感觉&#xff0c;蓝色则让…

MediaHub中的卡片实现进展汇报

今天刚从家赶到北京&#xff0c;北京和内蒙的温度差别真的太大了。给大家简单汇报一下目前MediaHub的进展&#xff1a; 上节卡片需求我们分析了gamma中卡片的设计&#xff0c;经过几天的开发以及前期的积累&#xff0c;开发进度超预期&#xff0c;功能基本上已经开发完成&#…

认识Mybatis和搭建Mybatis初始环境(Java)

首先我们需要知道在Java中连接数据库的底层就是JDBC&#xff0c;但是JDBC存在诸多弊端&#xff0c;如硬编码&#xff0c;代码重复度高&#xff0c;SQL参数固定&#xff0c;属于底层技术&#xff0c;结果集映射麻烦等。为了解决这些弊端&#xff0c;官方为我们提供了一些ORM模型…

基于大数据的混合音乐推荐系统的设计与设计(论文+源码)_kaic

摘 要 随着数据的不断增长和用户对随听随播的收听方式的习惯&#xff0c;开发一款音乐推荐系统变得越来越必要。为了满足这一需求&#xff0c;本论文采用Java语言、Vue以及数据库MySQL进行开发。系统的主要功能包括登录注册、音乐分类管理、音乐推荐管理、音乐资讯管理、音乐库…

Nacos-2.4.0最新版本,postgresql插件适配器修改分享

1. 背景 自前段时间&#xff0c;发表的一篇博文“Nacos-2.4.0最新版本docker镜像&#xff0c;兼容postgresql最新版本17和16” 有网友在评论区叫我出个修改源码的过程&#xff0c;今天就给大家简单分享一下关于“Nacos最新版&#xff08;2.4.0&#xff09;的postgresql插件适…

一些主流在线测长仪品牌!几毫米到几十米均可检测!

在线测长仪应用于生产线中长度尺寸检测&#xff0c;在各种产品中&#xff0c;总有形形色色的产品需要对长度进行检测&#xff0c;本文介绍3个测长仪品牌。 深圳市中图仪器股份有限公司 中图 SJ5100系列测长仪采用超高精度全自动光栅测长机&#xff0c;在 SJ5100光栅测长机的基础…

web通用漏洞

web通用漏洞 文章目录 web通用漏洞1. SSRF1. gopher伪协议2. 常见绕过1. ip地址绕过2. DNS重绑定攻击 3. mysql未授权4. tomcat漏洞5. redis未授权写webshell6. redis 未授权写入ssh公钥7. redis 未授权计划任务shell反弹 2. XXE测试 3. XSS4. CSRF关于vmware的网络参考 1. SSR…

【工具】图片背景移除界面 UI 源码

移除图片背景的UI 照片背景移除和填充颜色的用户界面 仓库地址&#xff1a;https://github.com/MengWoods/remove-background-ui/tree/main 介绍 该项目提供了一个基于 removebg 库的用户界面&#xff0c;用于从输入的照片中移除背景&#xff0c;并用不同的颜色填充背景。 …