当前位置: 首页 > news >正文

Docker容器与虚拟化技术:Docker资源控制、数据管理

目录

一、理论

1.资源控制

2.Docker数据管理

二、实验

1.Docker资源控制

2.Docker数据管理 

三、问题

1.docker容器故障导致大量日志集满,造成磁盘空间满

2、当日志占满之后如何处理

四、总结


一、理论

1.资源控制

(1)  CPU 资源控制

   cgroups,是一个非常强大的linux内核工具,他不仅可以限制被 namespace 隔离起来的资源, 还可以为资源设置权重、计算使用量、操控进程启停等等。 所以 cgroups( Control groups) 实现了对资源的配额和度量。

(2)cgroups四大功能

●资源限制:可以对任务使用的资源总额进行限制●优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级●资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等●任务控制:cgroup可以对任务执行挂起、恢复等操作

(3)  设置CPU使用率上限

    Linux 通过 CFS(Completely Fair Scheduler,完全公平调度器)来调度各个进程对 CPU 的使用。CFS 默认的调度周期是 100ms。(10万微秒)

        我们可以设置每个容器进程的调度周期,以及在这个周期内各个容器最多能使用多少 CPU 时间。

        使用 --cpu-period 即可设置调度周期,使用 --cpu-quota 即可设置在每个周期内容器能使用的 CPU 时间。两者可以配合使用。

        CFS 周期的有效范围是 1ms~1s,对应的 --cpu-period 的数值范围是 1000~100000。

        而容器的 CPU 配额必须不小于 1ms,即 --cpu-quota 的值必须 >= 1000。

启用一台容器:
 

docker run -itd --name test1 centos:7 /bin/bash

cpu.cfs_period_us:cpu分配的周期(微秒,所以文件名中用 us 表示),默认为100000。

cpu.cfs_quota_us:表示该control group限制占用的时间(微秒),默认为-1,表示不限制。 如果设为50000,表示占用50000/100000=50%的CPU。
 

①进行CPU压力测试

编写一个脚本:

docker exec -it 3ed82355f811 /bin/bash
vim /cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done

运行:

chmod +x /cpu.sh
./cpu.sh
exit

②设置50%的比例分配CPU使用时间上限

docker run -itd --name test2 --cpu-quota 50000 centos:7 /bin/bash	#可以重新创建一个容器并设置限额
或者
cd /sys/fs/cgroup/cpu/docker/3ed82355f81151c4568aaa6e7bc60ba6984201c119125360924bf7dfd6eaa42b/
echo 50000 > cpu.cfs_quota_us
docker exec -it 3ed82355f811 /bin/bash
./cpu.sh
exit

(4)  设置CPU资源占用比(设置多个容器时才有效)

Docker 通过--cpu-shares 指定 CPU 份额,默认值为1024,值为1024的倍数。

例:

        创建两个容器为 c1 和 c2,若只有这两个容器,设置容器的权重,使得c1和c2的CPU资源占比为1/3和2/3。

docker run -itd --name c1 --cpu-shares 512 centos:7	
docker run -itd --name c2 --cpu-shares 1024 centos:7

分别进入容器,进行压力测试

yum install -y epel-release
yum install stress -y
stress -c 4	

(5)设置容器绑定指定的CPU

先分配虚拟机4个CPU核数

创建容器

docker run -itd --name cc1 --cpuset-cpus 1,3 centos:7 /bin/bash

进入容器,进行压力测试

yum install -y epel-release
yum install stress -y
stress -c 4
exit

退出容器,执行 top 命令再按 1 查看CPU使用情况

(6) 对磁盘IO配额控制(blkio)的限制

--device-read-bps:限制某个设备上的读速度bps(数据量),单位可以是kb、mb(M)或者gb。

例:

docker run -itd --name test4 --device-read-bps /dev/sda:1M  centos:7 /bin/bash

--device-write-bps : 限制某个设备上的写速度bps(数据量),单位可以是kb、mb(M)或者gb。

例:

docker run -itd --name test5 --device-write-bps /dev/sda:1M centos:7 /bin/bash

--device-read-iops :限制读某个设备的iops(次数)
 
--device-write-iops :限制写入某个设备的iops(次数)

创建容器,并限制写速度

docker run -it --name cc3 --device-write-bps /dev/sda:1mb centos:7 /bin/bash

通过dd来验证写速度

dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct				#添加oflag参数以规避掉文件系统cache

2.Docker数据管理

(1)数据卷

 数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。数据卷的使用类似于Linux下对目录进行的mount操作。

例:

先下载一个镜像

docker pull centos:7

宿主机目录/var/www挂载到容器中的/data1。

注意:宿主机本地目录的路径必须是使用绝对路径。如果路径不存在,Docker会自动创建相应的路径。

docker run -V /var/www:/data1 --name web1 -it centos:7 /bin/bash
#-v选项可以在容器内创建数据卷ls
echo "this is cc1" > /data1/abc.txt
exit#返回宿主机进行查看
cat /var/www/abc.txt

(2)数据卷容器

如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用。

例:

创建一个容器作为数据卷容器

docker run --name web2 -v /data1 -v /data2 -it centos:7 /bin/bash
echo "this is web2" > /data1/abc.txt
echo "THIS IS WEB2" > /data2/ABC.txt

使用 --volumes-from来挂载web2容器中的数据卷到新的容器

docker run -it --volumes-from web2 --name web3 centos:7 /bin/bash
cat /data1 /abc.txt
cat /data2/ABC.txt

(3)端口映射

在启动容器的时候,如果不指定对应的端口,在容器外是无法通过网络来访问容器内的服务。端口映射机制将容器内的服务提供给外部网络访问,实质上就是将宿主机的端口映射到容器中,使得外部网络访问宿主机的端口便可访问容器内的服务。

docker run -d --name test1 -P nginx
#随机映射端口( 从32768开始)
docker run -d --name test2 -p 43000:80 nginx
#指定映射端口

 (4)容器互联(使用centos镜像)

容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。简单点说,就是会在源容器和接收容器之间建立一条隧道,接收容器可以看到源容器指定的信息

例:

docker run -itd -P --name xx1 centos:7 /bin/bash

创建并运行接收容器取名xx2,使用--1ink选项指定连接容器以实现容器互联

docker run -itd -P --name xx2 --link xx1:xx2 centos:7 /bin/bash

进xx2容器,ping xxl

docker exec -it xx2 bash

二、实验

1.Docker资源控制

(1)设置CPU使用率上限

进行CPU压力测试

编写一个脚本:

 

 查看脚本占用CPU资源

 设置50%的比例分配CPU使用时间上限

 可以看到CPU占用率接近50%,cgroups对CPU的控制起了效果

 (2)设置CPU资源占用比(设置多个容器时才有效)

创建两个容器为 c1 和 c2,若只有这两个容器,设置容器的权重,使得c1和c2的CPU资源占比为1/3和2/3。

 分别进入容器,进行压力测试

容器c1

 

 容器c2

 查看容器运行状态(动态更新)

CPU总和是400%。因为虚拟机使用的是4核,而且C1和C2的CPU使用百分比约为1:2

 (3)设置容器绑定指定的CPU

已分配虚拟机4个CPU核数

 创建容器

只允许cc1容器使用第2个和第4个CPU

 

 进入容器

安装依赖包

 安装压力测试工具

  进行压力测试

 执行 top 命令

 再按 1 查看CPU使用情况,只有第2个和第4个CPU被使用

 (4)对磁盘IO配额控制(blkio)的限制

创建容器,并限制写速度

可以看到写的速度被限制了

清理docker占用的磁盘空间:

用于清理磁盘,删除关闭的容器、无用的数据卷和网络

2.Docker数据管理 

(1) 数据卷

先下载一个镜像

 宿主机目录/var/www挂载到容器中的/data1。

注意:宿主机本地目录的路径必须是使用绝对路径。如果路径不存在,Docker会自动创建相应的路径。

文件内容一样

 (2)数据卷容器

创建一个容器作为数据卷容器

使用 --volumes-from来挂载web2容器中的数据卷到新的容器

 是在上一个容器创建的文件,说明挂载成功

 (3)端口映射

  在启动容器的时候,如果不指定对应的端口,在容器外是无法通过网络来访问容器内的服务。端口映射机制将容器内的服务提供给外部网络访问,实质上就是将宿主机的端口映射到容器中,使得外部网络访问宿主机的端口便可访问容器内的服务。

 

 

 (4)  容器互联(使用centos镜像)

容器互联是通过容器的名称在容器间建立一条专门的网络通信隧道。简单点说,就是会在源容器和接收容器之间建立一条隧道,接收容器可以看到源容器指定的信息

创建并运行源容器取名xx1

 创建并运行接收容器取名xx2,使用--1ink选项指定连接容器以实现容器互联

 进xx2容器,ping xxl

三、问题

1.docker容器故障导致大量日志集满,造成磁盘空间满

(1)解决方案
清除日志

#!/bin/bash
logs=$ (find /var/lib/docker/containers/ -name *-json.log*)
for log in $logs
do
cat /dev/null > $log
done

2、当日志占满之后如何处理

###设置docker日志文件数量及每个日志大小vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://f613ce8f.m.daocloud.io"],
"log-driver": "json-file",   #我的一日志格式
"log-opts": { "max-size" : "500m", "max-file" : "3"}   日志的参数最大500M   我最大容器中有三个日志文件 每个日志文件大小是500M
}
修改完需要重新加载  systemctl daemon-reload

四、总结

清理docker占用的磁盘空间:

docker system prune -a			#可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络

相关文章:

Docker容器与虚拟化技术:Docker资源控制、数据管理

目录 一、理论 1.资源控制 2.Docker数据管理 二、实验 1.Docker资源控制 2.Docker数据管理 三、问题 1.docker容器故障导致大量日志集满,造成磁盘空间满 2、当日志占满之后如何处理 四、总结 一、理论 1.资源控制 (1) CPU 资源控制 cgroups&#xff0…...

python生成器有几种写法,python生成器函数例子

大家好,小编来为大家解答以下问题,python生成器有几种写法,python生成器函数例子,今天让我们一起来看看吧! 本文部分参考:Python迭代器,生成器–精华中的精华 https://www.cnblogs.com/deeper/p…...

动态动画弹窗样式css

点击下载图片素材 html <div class"popWin"> </div> <div class"popPic"><div class"popWinBtn01">查看证书</div><div class"wintips01">恭喜您已完成训练营学习任务&#xff0c;荣誉证书已发放…...

数据生成 | MATLAB实现WGAN生成对抗网络数据生成

数据生成 | MATLAB实现WGAN生成对抗网络数据生成 目录 数据生成 | MATLAB实现WGAN生成对抗网络数据生成生成效果基本描述程序设计参考资料 生成效果 基本描述 1.WGAN生成对抗网络&#xff0c;数据生成&#xff0c;样本生成程序&#xff0c;MATLAB程序&#xff1b; 2.适用于MATL…...

PHP实现每日蛋白质摄入量计算器

1.laravel 路由 //每日蛋白质摄入计算器Route::get(api/protein/intake, FormulaControllerproteinIntakeCal); 2.代码 /*** 每日蛋白质摄入计算器*/public function proteinIntakeCal(){$number intval($this->request(number));$goalFactor array(0.8, 1.16, 0.8, 1.16,…...

vue elment 表格内表单校验代码

<p v-if"scope.row.id">{{ scope.row.bidderCode }}</p><el-form-itemclass"formitem"v-else:prop"bidderCode scope.row.id":rules"getValidationRules(投标人/供应商代码, scope.row.id)"><el-input v-model&…...

如何在Stream流中分组统计

上面是今天碰到需求,之前就做过类似的分组统计,这个相对来说比较简单,统计的也少,序号和总预约人数这两部分交给前端了,不需要由后端统计,后端统计一下预约日期和检查项目和预约人数就行; Overridepublic List<ItemStatisticsVo> statistics(ItemStatisticsModel itemSta…...

windows程序基础

一、windows程序基础 1. Windows程序的特点 1&#xff09;用户界面统一、友好 2&#xff09;支持多任务:允许用户同时运行多个应用程序(窗口) 3&#xff09;独立于设备的图形操作 使用图形设备接口( GDI, Graphics Device Interface )屏蔽了不同硬件设备的差异&#…...

【LeetCode】买卖股票的最佳时机最多两次购买机会

买卖股票的最佳时机 题目描述算法分析程序代码 链接: 买卖股票的最佳时机 题目描述 算法分析 程序代码 class Solution { public:int maxProfit(vector<int>& prices) {int n prices.size();vector<vector<int>> f(n,vector<int>(3,-0x3f3f3f))…...

【C++ 记忆站】命名空间

文章目录 命名空间概念命名空间的定义1、正常的命名空间定义2、命名空间可以嵌套3、同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中 命名空间的使用1、加命名空间名称及作用域限定符2、使用using将命名空间中某个成员引入3、使用using namespac…...

《离散数学及其应用(原书第8版)》ISBN978-7-111-63687-8 第11章 11.1.3 树的性质 节 第664页的例9说明

《离散数学及其应用&#xff08;原书第8版&#xff09;》ISBN978-7-111-63687-8 第11章 11.1.3 树的性质 节 第664页的定理3的引申 定理3 带有i个内点的m叉树含有nmi1个顶点 见本人博文 内点定义不同的讨论 如果对于一个m叉正则树&#xff0c;即任意分支节点的儿子恰好有m个&am…...

【云原生】K8S存储卷:PV、PVC详解

目录 一、emptyDir存储卷二、hostPath存储卷三、nfs共享存储卷四、PVC 和 PV4.1 NFS使用PV和PVC4.2创建动态PV 一、emptyDir存储卷 容器磁盘上的文件的生命周期是短暂的&#xff0c;这就使得在容器中运行重要应用时会出现一些问题。首先&#xff0c;当容器崩溃时&#xff0c;ku…...

谈谈IP地址和子网掩码的概念及应用

个人主页&#xff1a;insist--个人主页​​​​​​ 本文专栏&#xff1a;网络基础——带你走进网络世界 本专栏会持续更新网络基础知识&#xff0c;希望大家多多支持&#xff0c;让我们一起探索这个神奇而广阔的网络世界。 目录 一、IP地址的概念 二、IP地址的分类 1、A类 …...

vue2 如何监听数组的变化

在Vue 2中&#xff0c;底层是通过重写数组的原型方法来实现对数组变化的监听。具体来说&#xff0c;Vue 2使用了一个名为Observer的类来劫持数组的原型方法&#xff0c;使其在调用这些方法时能够触发相应的变化通知。 当Vue 2初始化一个响应式对象时&#xff0c;如果对象是一个…...

CSS中的transform属性有哪些值?并分别描述它们的作用。

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ translate()⭐ rotate()⭐ scale()⭐ skew()⭐ matrix()⭐ scaleX() 和 scaleY()⭐ rotateX()、rotateY() 和 rotateZ()⭐ translateX() 和 translateY()⭐ skewX() 和 skewY()⭐ perspective()⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&…...

vue3跳转页面后 海康监控实例不销毁

第一个页面是这样的 跳转到新的页面 只有海康的监控没有消失 使用控制台审查元素也审查不到 解决方法&#xff1a;在vue3的销毁周期把海康的监控销毁掉 import { reactive, onDeactivated} from "vue"; const state reactive({oWebControl: null as any, //监控绑…...

Unity 射线检测

文章目录 1. 定义2. 重要类和方法2.1 Ray2.2 从屏幕发出射线&#xff1a;2.3 Raycast2.4 RaycastAll2.5 RaycastHit 碰撞信息2.6 layerMask 让射线检测只检测指定层级的对象 1. 定义 在Unity中&#xff0c;射线检测&#xff08;Raycasting&#xff09;是一种常用的技术&#x…...

微信支付报非法的密钥大小: Caused by: java.security.InvalidKeyException: Illegal key size

在Linux环境中出现 java.security.InvalidKeyException: Illegal key size 异常通常是由于Java默认的加密限制引起的。Java默认的加密强度限制了加密算法密钥的最大长度 方式一 1. 找到该目录 /usr/java/jdk1.8.0_121/jre/lib/security 2. 替换local_policy.jar 和 US_export_…...

React 调试开发插件 React devtools 的使用

可以在谷歌扩展应用商店里获取这个插件。如果不能访问谷歌应用商店&#xff0c;可以点此下载最新版 安装插件后&#xff0c;控制台出现 “Components” 跟 “Profiler” 菜单选项。 查看版本&#xff0c;步骤&#xff1a; 下面介绍 react devtools 的使用方式。 在 Component…...

linux 搜索命令

搜索命令 locate命令 搜索速度快&#xff0c;是按照数据库进行搜索的(数据库位置在/var/lib/mlocate/mlocate.db) locate abc.txt 这个数据库是在半夜通过cron执行updatedb建立的&#xff0c;有时候新创建的文件使用locate来搜索文件搜索不到&#xff0c;可能是因为文件的索引还…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...