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

news2025/1/15 13:15:39

目录

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

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

相关文章

955 神仙公司名单

你是否想过,有一种公司,每天上班不打卡,没有绩效考核,员工可以带着宠物上班,还有公司专门的健身房和游戏室?这样的公司,真的存在!今天我们就来探秘这个传说中的955神仙公司&#xff…

ChatGPT相关教程

一、如何查看账户密码? 提示: 账户信息分为由4个(- - - -横杠)划分区域,请注意识别 分别为: 账户- - - -密码- - - -API- - - -注意事项 二、常见报错解决 登录后出现 Sorry, you have been blocked 网络问题,请更换可以解锁GPT…

【系统架构】系统架构设计之数据同步策略

文章目录 一、介绍1.1、分布式系统中的数据同步定义1.2、为何数据同步如此关键1.3、数据同步策略简介 二、为什么需要数据同步2.1、提高系统可用性2.2、备份与灾难恢复2.3、提高性能2.4、考虑地理位置(如使用CDN) 三、同步备份3.1、定义和概述3.2、工作原…

SpringBoot 微人事 职称管理模块(十三)

职称管理前端页面设计 在职称管理页面添加输入框 export default {name: "JobLevelMarna",data(){return{Jl:{name:""}}}}效果图 添加一个下拉框 v-model的值为当前被选中的el-option的 value 属性值 <el-select v-model"Jl.titlelevel" …

C#程序随系统启动例子 - 开源研究系列文章

今天讲讲C#中应用程序随系统启动的例子。 我们知道&#xff0c;应用程序随系统启动&#xff0c;都是直接在操作系统注册表中写入程序的启动参数&#xff0c;这样操作系统在启动的时候就根据启动参数来启动应用程序&#xff0c;而我们要做的就是将程序启动参数写入注册表即可。此…

打印技巧——word中A4排版打印成A3双面对折翻页

在进行会议文件打印时&#xff0c;我们常会遇到需要将A4排版的文件&#xff0c;在A3纸张上进行双面对折翻页打印&#xff0c;本文对设置方式进行介绍&#xff1a; 1、在【布局】选项卡中&#xff0c;点击右下角小箭头&#xff0c;打开页面设置选项卡 1.1在【页边距】中将纸张…

网络安全(黑客)快速入门~

网络安全的学习需要遵守循序渐进&#xff0c;由浅入深。 通常网络安全学习方法有两种&#xff1a; 方法1&#xff1a;先学习编程&#xff0c;然后学习Web渗透及工具使用等&#xff1b; 适用人群&#xff1a;有一定的代码基础的小伙伴 基础部分 基础部分需要学习以下内容&am…

【3Ds Max】车削命令的简单使用(以制作花瓶为例)

简介 在3ds Max中&#xff0c;"车削"&#xff08;Lathe&#xff09;是一种建模命令&#xff0c;用于创建围绕轴线旋转的几何形状。通过车削命令&#xff0c;您可以将一个闭合的平面或曲线几何形状旋转&#xff0c;从而生成一个立体对象。这种方法常用于创建圆柱体、…

易服客工作室:Houzez主题 - 超级房地产WordPress主题/网站

Houzez主题是全球流行的房地产经纪人和公司的WordPress主题。 Houzez Theme是专业设计师创造一流设计的超级灵活起点。它具有您的客户&#xff08;房地产经纪人或公司&#xff09;甚至可能做梦也想不到的功能。 网址&#xff1a;Houzez主题 - 超级房地产WordPress主题/网站 - …

SpringBoot + Vue 微人事项目(第三天)

左边导航菜单制作 element ui添加到Home 把侧栏的标签里面的代码拷贝到标签里面&#xff0c;显示效果如下 左侧导航栏的效果代码 <el-aside width"200px"><el-menu><el-submenu index"1"><template slot"title"><i…

亚信科技AntDB数据库连年入选《中国DBMS市场指南》代表厂商

近日&#xff0c;全球权威ICT研究与顾问咨询公司Gartner发布了2023年《Market Guide for DBMS, China》&#xff08;即“中国DBMS市场指南”&#xff09;&#xff0c;该指南从市场份额、技术创新、研发投入等维度对DBMS供应商进行了调研。亚信科技是领先的数智化全栈能力提供商…

LeetCode150道面试经典题-- 求算数平方根(简单)

1.题目 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 注意&#xff1a;不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0.5 。 2.示例 …

8 种主流数据迁移工具技术选型

前言 最近有些小伙伴问我&#xff0c;ETL数据迁移工具该用哪些。 ETL(是Extract-Transform-Load的缩写&#xff0c;即数据抽取、转换、装载的过程)&#xff0c;对于企业应用来说&#xff0c;我们经常会遇到各种数据的处理、转换、迁移的场景。 今天特地给大家汇总了一些目前…

法院人员定位方案

法院人员定位方案可以使用UWB测距技术进行实现。通过UWB测距基站和UWB标签&#xff0c;可以实时准确地定位和跟踪法院人员的位置&#xff0c;提升安全性和工作效率。以下是法院人员定位方案的一般步骤&#xff1a; 1.部署UWB测距基站&#xff1a;在法院内部或需要进行定位的区…

vim 配置环境变量与 JDK 编译器异常

vim 配置环境变量 使用 vim 打开系统中的配置信息&#xff08;不存在将会创建&#xff09;&#xff1a; vim ~/.bash_profile 以配置两个版本 JDK 为例&#xff08;前提是已安装 JDK&#xff09;,使用上述命令打开配置信息&#xff1a; 输入法调成英文&#xff0c;输入 i&…

RocketMQ 5.0 架构解析:如何基于云原生架构支撑多元化场景

作者&#xff1a;隆基 本文将从技术角度了解 RocketMQ 的云原生架构&#xff0c;了解 RocketMQ 如何基于一套统一的架构支撑多元化的场景。 文章主要包含三部分内容。首先介绍 RocketMQ 5.0 的核心概念和架构概览&#xff1b;然后从集群角度出发&#xff0c;从宏观视角学习 R…

mysql in mac学习记录

鉴于有一段时间没有访问mysql了&#xff0c;最近打算在mac 系统上下载mysql 练习一下sql的使用&#xff0c;于是 First, the mysql download https://dev.mysql.com/downloads/mysql/ Second, Mysql install steps Install the software by normally install one software …

ARM M33架构入门

概述 Arm Cortex-M33核心处理器专为需要高效安全或数字信号控制的物联网和嵌入式应用而设计。该处理器具有许多可选功能&#xff0c;包括数字信号处理扩展 (DSP)、用于硬件强制隔离的TrustZone 安全性、内存保护单元 (MPU)和浮点单元 (FPU)。 Cortex-M33 的性能比 Cortex-M…

基于Googlenet深度学习网络的矿物质种类识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ............................................................................ Number_of_…

毫米波雷达成像论文阅读笔记: IEEE TPAMI 2023 | CoIR: Compressive Implicit Radar

原始笔记链接&#xff1a;https://mp.weixin.qq.com/s?__bizMzg4MjgxMjgyMg&mid2247486680&idx1&snedf41d4f95395d7294bc958ea68d3a68&chksmcf51be21f826373790bc6d79bcea6eb2cb3d09bb1860bba0af0fd5e60c448ca006976503e460#rd ↑ \uparrow ↑点击上述链接即…