docker的资源控制及docker数据管理

目录

一.docker的资源控制

1.CPU 资源控制

1.1 资源控制工具

1.2 cgroups有四大功能

1.3 设置CPU使用率上限

1.4 进行CPU压力测试

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

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

1.6.1 两个容器测试cpu

2.对内存使用的限制

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

3.1 创建容器,并限制写速度

二.docker数据管理 

1.为何需要docker数据管理

2.数据管理类型

3.数据卷

 4.数据卷容器

 5.容器的互联


一.docker的资源控制

1.CPU 资源控制

1.1 资源控制工具

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

1.2 cgroups有四大功能

●资源限制:可以对任务使用的资源总额进行限制

●优先级分配:通过分配的cpu时间片数量以及磁盘IO带宽大小,实际上相当于控制了任务运行优先级

●资源统计:可以统计系统的资源使用量,如cpu时长,内存用量等

●任务控制:cgroup可以对任务执行挂起、恢复等操作

1.3 设置CPU使用率上限

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

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

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

CFS 周期的有效范围是 1ms~1s,对应的 --cpu-period 的数值范围是 1000~1000000。 周期100毫秒
而容器的 CPU 配额必须不小于 1ms,即 --cpu-quota 的值必须 >= 1000。

docker run -itd --name test5 centos:7 /bin/bash
cd /sys/fs/cgroup/cpu/docker/
ls
aca125bbcdcb17d3e30a70e9c7c20b49ef28c9556f14502a070a7fdaf1f0381a  cpu.rt_period_us
[root@centos1 docker]# cd aca125bbcdcb17d3e30a70e9c7c20b49ef28c9556f14502a070a7fdaf1f0381a
[root@centos1 aca125bbcdcb17d3e30a70e9c7c20b49ef28c9556f14502a070a7fdaf1f0381a]# cat cpu.cfs_quota_us
-1[root@centos1 30e305daa1fe86c98426cb67059606f3cd50944df1af9d5910802d7fc73b42c9]# cat cpu.cfs_period_us
100000​
cat cpu.cfs_period_us ​

 注解:

cpu.cfs_period_us:cpu分配的周期(微秒,所以文件名中用 us 表示),默认为100000。
cpu.cfs_quota_us:表示该cgroups限制占用的时间(微秒),默认为-1,表示不限制。 如果设为50000,表示占用50000/100000=50%的CPU。

1.4 进行CPU压力测试

在容器 里 进行压力测试
[root@centos1 30e305daa1fe86c98426cb67059606f3cd50944df1af9d5910802d7fc73b42c9]# docker exec -it 30e305daa1fe /bin/bash
#容器里不能 用vim  只能 用vi
vi /cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done

chmod +x /cpu.sh
./cpu.sh
#从新开个终端查看CPU使用情况 
#可以看到这个脚本占了很多的cpu资源
top

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

#可以重新创建一个容器并设置限额
docker run -itd --name test7 --cpu-quota 50000 centos:7 /bin/bash
#或者进入修改
cd /sys/fs/cgroup/cpu/docker/c6683c71f9d8b49fd5732f21b0969f1b4fe31d588567d6d32f12ced906e0dde7/
echo 50000 > cpu.cfs_quota_us
docker exec -it c6683c71f9d8 /bin/bash./cpu.sh
#可以看到cpu占用率接近50%,cgroups对cpu的控制起了效果
top

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

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

1.6.1 两个容器测试cpu

(1)创建两个容器为 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

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

c1;

docker exec -it eb2c65e90789 /bin/bash
vi /cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done
chmod +x /cpu.sh
./cpu.sh

另开终端:

c2:

docker exec -it d32f1cdfafe2 /bin/bash
vi /cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done
chmod +x /cpu.sh
./cpu.sh

 (3)另开终端,查看容器运行状态(动态更新)

docker stats

 1.6.2 设置容器绑定指定的CPU

(1)先分配虚拟机4个CPU核数

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

(2)进入容器,进行压力测试

yum install -y epel-release
yum install stress -y
stress -c 4
docker exec -it 5c982ffed51c /bin/bash
vi /cpu.sh
#!/bin/bash
i=0
while true
do
let i++
done
chmod +x /cpu.sh
./cpu.sh

另开终端 

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

2.对内存使用的限制

(1)-m(–memory=) 选项用于限制容器可以使用的最大内存

 (2)限制可用的 swap 大小, --memory-swap
强调一下,–memory-swap 是必须要与 --memory 一起使用的。

正常情况下,–memory-swap 的值包含容器可用内存和可用 swap。

所以 -m 300m --memory-swap=1g 的含义为:容器可以使用 300M 的物理内存,并且可以使用 700M(1G - 300)的 swap。

如果 --memory-swap 设置为 0 或者 不设置,则容器可以使用的 swap 大小为 -m 值的两倍。

如果 --memory-swap 的值和 -m 值相同,则容器不能使用 swap。

如果 --memory-swap 值为 -1,它表示容器程序使用的内存受限,而可以使用的 swap 空间使用不受

限制(宿主机有多少 swap 容器就可以使用多少)。

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

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

docker run -itd --name test9 --device-read-bps /dev/sda:1M  centos:7 /bin/bash
dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct	

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-INieXTAv-1692257917973)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230816152211711.png)]

 例:

docker run -itd --name test11 --device-write-bps /dev/sda:1mb centos:7 /bin/bash
dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct	

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

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

3.1 创建容器,并限制写速度

#通过dd来验证写速度
#添加oflag参数以规避掉文件系统cache
dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct	10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 10.0025 s, 1.0 MB/s
#清理docker占用的磁盘空间
docker system prune -a			#可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wzRZ2zde-1692257917974)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230816152426044.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wzRZ2zde-1692257917974)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230816152426044.png)]

 停止的容器已被清理

二.docker数据管理 

1.为何需要docker数据管理

因为数据写入后如果停止了容器,再开启数据就会消失,使用数据管理的数据卷挂载,实现了数据的持久化,重启数据还会存在;还有一种方式,容器之间共享文件即相当于有个备份,也会解决停止容器后数据消失的问题。

2.数据管理类型

管理 Docker 容器中数据主要有两种方式:数据卷(Data Volumes)和数据卷容器(DataVolumes Containers)

3.数据卷

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

#拉取CentOS 7的Docker镜像
docker pull centos:7
#使用docker run命令来创建并运行一个基于CentOS 7镜像的容器
docker run -itd  centos:7 /bin/bash
mkdir /var/www
#宿主机创建目录
docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash
#创建容器centos7并命名为web1.将宿主机的/var/www目录挂载到容器中的/data1卷中
# -v 选项表示容器中创建数据卷
echo "this is web1" > /data1/a.txt
exit
#数据卷中创建内容a.txt并退出
cd /var/www/
#进入宿主机的挂载目录
cat a.txt
#验证容器中数据卷内容
echo 123>abc.txt
#宿主机的挂载目录创建一个文件夹
docker start web1
docker exec -it web1   /bin/bash 
#开启web1容器并进入
ls /data1
#显示data1数据卷验证其中是否有abc.txt

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YpECIT5P-1692257917975)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230817151138536.png)]

 4.数据卷容器

–volumes-from 要挂载那个容器名称/id号 #用于容器之间的挂载
如果需要在容器之间共享一些数据,最简单的方法就是使用数据卷容器。数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用。

docker run --name web3 -v /data1 -v /data2 -it centos:7 /bin/bash
#创建数据卷容器web3 并创建2个data目录
echo "this is web3" > /data1/abc.txt
echo "This is web3" > /data2/ABC.txt
#web3容器2个data下创建文件
docker run -it --volumes-from web3 --name web4 centos:7 /bin/bash
#使用 --volumes-from 来挂载 web3 容器中的数据卷到新的容器
cat /data1/abc.txt
cat /data2/ABC.txt

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fQJTAe4c-1692257917975)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230817152548474.png)]

 5.容器的互联

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

docker run -itd -P --name web01 centos:7 /bin/bash
#创建并运行源容器取名web1
docker run -itd -P --name web03 --link web01:web01 centos:7 /bin/bash、
#创建并运行接收容器取名web2,使用--link选项指定连接容器以实现容器互联

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eCeoXeNR-1692257917975)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230817152939441.png)]

 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-59oASmvw-1692257917976)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230817153013572.png)]

#进入web03容器
docker exec -it web03 /bin/bash
ping 90fd4a7ad12f

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9r9wnaFy-1692257917976)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230817153454773.png)]

#查看web01的地址
docker inspect web01

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hbjUrxwg-1692257917976)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230817153550021.png)]

#进入web03pingweb01的IP地址
ping 172.17.0.5

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A7ry454S-1692257917976)(C:\Users\zhao\AppData\Roaming\Typora\typora-user-images\image-20230817153711763.png)]

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

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

相关文章

ES 索引重命名--Reindex(一)

ES reindex脚本流程,下图为整体流程: 步骤(1):每次写入把之前的索引删除再重新创建索引,然后判断索引是否创建成功,由于创建成功返回结果是json,因此用Json Input插件去解析json获得…

【笔记】Spark3 AQE(Adaptive Query Execution)

提效 7 倍,Apache Spark 自适应查询优化在网易的深度实践及改进 Performance Tuning 配置Spark SQL开启Adaptive Execution特性 How To Use Spark Adaptive Query Execution (AQE) in Kyuubi 【spark系列3】spark 3.0.1 AQE(Adaptive Query Exection)分析 玩转Spark…

数据结构 - 线性表的顺序存储

一、顺序存储定义: 把逻辑上相邻的数据元素存储在物理上相邻的存储单元中。简言之,逻辑上相邻,物理上也相邻顺序表中,任一元素可以随机存取(优点) 二、顺序表中元素存储位置的计算 三、顺序表在算法中的实…

【C++】运算符重载 | 赋值运算符重载

Ⅰ. 运算符重载 引入 ❓什么叫运算符重载? 就是:运用函数,将现有的运算符重新定义,使其能满足各种自定义类型的运算。 回想一下,我们以前运算的对象是不是都是int、char这种内置类型? 那我们自定义的“…

ctfshow-web10 with rollup 绕过

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 基本方法,到处点一点,点到取消的时候,突然发现,可以下载一个文件: 看到这个源码,可以看到只能是通过满足下面的条件来拿到flag&#xff…

多维时序 | MATLAB实现WOA-CNN-GRU-Attention多变量时间序列预测

多维时序 | MATLAB实现WOA-CNN-GRU-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现WOA-CNN-GRU-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现WOA-CNN-GRU-Attention多变量时间序列预测,WOA-CNN-GR…

SPSS--如何使用分层分析以及分层分析案例分享

分层分析:将资料按某个或某些需要控制的变量的不同分类进行分层,然后再估计暴露因子与某结局变量之间关系的一种资料分析方法。 分层分析的最重要的用途是评估和控制混杂因子所致的混杂偏倚。通过按混杂因子分层,可使每层内的两个比较组在所控…

三维重建 PyQt Python MRP 四视图(横断面,冠状面,矢状面,3D)

本文实现了 Python MPR 的 四视图,横断面,冠状面,矢状面,3D MPR(multi-planner reformation)也称多平面重建,多重面重建是将扫描范围内所有的轴位图像叠加起来再对某些标线标定的重组线所指定的组织进行冠状、矢状位、…

[Go版]算法通关村第十二关白银——字符串经典基础面试题

目录 反转专题题目:反转字符串思路分析:左右双指针 对向交换复杂度:时间复杂度 O ( n ) O(n) O(n)、空间复杂度 O ( 1 ) O(1) O(1)Go代码 题目:反转字符串 II思路分析:K个一组反转思想(找到每组的首尾索引…

redis 哨兵模式

目录 一、什么是哨兵模式 二、配置哨兵 三、启动哨兵 四、验证哨兵 五、复制延时 六、选举策略 一、什么是哨兵模式 哨兵也叫 sentinel,它的作用是能够在后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。 二、配置哨兵 首先停止…

Day8 智慧商城

项目演示 项目收获 创建项目 调整初始化目录 1.删components里的所有文件 2.删views里的所有文件 3.router/index.js 删路由 删规则 import Vue from vue import VueRouter from vue-routerVue.use(VueRouter)const router new VueRouter({routes: [] })export default route…

【Spring专题】Spring之Bean的生命周期源码解析——阶段二(三)(属性填充之循环依赖底层原理解析)

目录 前置知识循环依赖的产生Spring里面的3个Map 课程内容一、只有一级缓存的推理演进1.1 直接将实例化后生成的对象放入到单例池里面1.1 引入一个中间Map存实例化后的早期对象(疑似二级缓存)1.3 解决1.2需要被代理的问题(疑似二级缓存&#…

面试-快速学习计算机网络-UDP/TCP

1. OSI四层和七层映射 区别: 应用层,表示层,会话层合并为了应用层数据链路层和物理层合并为了网络接口层 2. TCP和UDP的区别? 总结: 1 . TCP 向上层提供面向连接的可靠服务 ,UDP 向上层提供无连接不可靠服…

FL Studio21.1中文完整版Win/Mac

FL Studio All Plugins Edition【中文完整版 Win/Mac】适合音乐制作人/工作室使用,全套插件!(20.9新增Vintage Chorus,Pitch Shifter变调插件)FL Studio是超多顶级音乐人的启蒙首选!包括百大DJ冠军Martin Garrix&…

21.0 CSS 介绍

1. CSS层叠样式表 1.1 CSS简介 CSS(层叠样式表): 是一种用于描述网页上元素外观和布局的样式标记语言. 它可以与HTML结合使用, 通过为HTML元素添加样式来改变其外观. CSS使用选择器来选择需要应用样式的元素, 并使用属性-值对来定义这些样式.1.2 CSS版本 CSS有多个版本, 每个…

AI 绘画Stable Diffusion 研究(十一)sd图生图功能详解-美女换装

免责声明: 本案例所用安装包免费提供,无任何盈利目的。 大家好,我是风雨无阻。 为了让大家更直观的了解图生图功能,明白图生图功能到底是干嘛的,能做什么事情?今天我们继续介绍图生图的实用案例-美女换装的制作。 对于…

ComPDFKit PDF SDK for Windows Crack

ComPDFKit PDF SDK for Windows Crack 添加了在创建文本框时调整默认属性的支持。 增加了对调整PDF大小时调整宽度的支持。 添加了对编辑文本时更多快捷方式的支持。 优化了文本输入,并将字体样式与原始文本相匹配。 在内容编辑器模式下复制和粘贴时优化了UI交互。 …

用于弥散加权MRI的关节各向异性维纳滤光片研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

三款远程控制软件对比,5大挑选指标:安全、稳定、易用、兼容、功能

陈老老老板🤴 🧙‍♂️本文专栏:生活(主要讲一下自己生活相关的内容)生活就像海洋,只有意志坚强的人,才能到达彼岸。 🧙‍♂️本文简述:三款远程控制软件对比,5大挑选指标&#xff1…

spring如何进行依赖注入,通过set方法把Dao注入到serves

1、选择Generate右键鼠标 你在service层后面方法的这些: 2、UserService配置文件的写法是怎样的: 3、我们在UserController中执行一下具体写法: 最后我们执行一下 : 4、这里可能出现空指针,因为你当前web层,因为你new这个对象根…