Docker实战07|Docker增加容器资源限制

这篇具有很好参考价值的文章主要介绍了Docker实战07|Docker增加容器资源限制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上一篇文章中,讲解了Docker run的具体流程以及Docker是如何改变PID为1的底层原理。

具体文章可见《Docker就应该这么学-06》

有需要的小伙伴可以回顾一下。

接下来本文会详细介绍一下Docker 是如何增加容器的资源限制

增加容器的资源限制

获取代码

git clone https://gitee.com/mjreams/docker.git

上一节中,已经可以通过命令行 docker run -ti的方式创建并启动容器。这一节,将通过cgroup对容器的资源进行控制。

# 这一节中,将实现通过以下命令的方式控制容器的内存和CPU配置。
docker run -ti -m I00m -cpuset 1 -cpushare 512 /bin/sh

定义Cgroups数据结构

前几篇中,对Cgroups包含的3个概念进行了介绍,这里做如下简单回顾。

  • • cgroup hierarchy中的节点,用于管理进程和subsystem的控制关系。

  • • subsystem作用于hierarchy上的cgroup节点,并控制节点中进程的资源占用。

  • • hierarchy将cgroup通过树状结构串起来,并通过虚拟文件系统的方式暴露给用户。

根据上面3个概念的关系,先创建出如下的数据结构。

cgroups/subsystems/subsystem.go

Docker实战07|Docker增加容器资源限制,Docker,Go,docker,eureka,容器

上面定义了subsystem的模型,下面以memory的subsystem为例介绍 一 下要怎么实现 subsystem 的操作。

cgroups/subsystems/memory.go

Docker实战07|Docker增加容器资源限制,Docker,Go,docker,eureka,容器

Docker实战07|Docker增加容器资源限制,Docker,Go,docker,eureka,容器

上面以memory的subsystem为例,介绍了如何实现subsystem的cgroup资源限制。其中,GetCgroupPath函数是找到对应subsystem挂载的hierarchy相对路径对应的cgroup在虚拟文件系统中的路径,然后通过这个目录的读写去操作cgroup。那么,是如何找到挂载了subsystem的hierarchy的挂载目录的呢?先来熟悉下/proc/{pid}/mountinfo文件,如下。

Docker实战07|Docker增加容器资源限制,Docker,Go,docker,eureka,容器

通过/proc/self/mountinfo,可以找出与当前进程相关的mount信息。在前文中,我们讲过Cgroups的hierarchy的虚拟文件系统是通过cgroup类型文件系统的mount挂载上去的,option中加上subsystem,代表挂载的subsystem类型,这样就可以在mountinfo中找到对应的subsystem的挂载目录了,比如memory。

30 27 0:24 I /sys/fs/cgroup/rnernory rw , nosuid, nodev , noexec , relatirne shared : l3 - cgroup cgroup rw , rnernory

通过最后的option是rw,memory,可以看出这一条挂载的subsystem是memory,那么在/sys/fs/cgroup/memory中创建文件夹对应创建的cgroup,就可以用来做内存的限制,实现如下。

cgroups/subsystems/utils.go

Docker实战07|Docker增加容器资源限制,Docker,Go,docker,eureka,容器

Docker实战07|Docker增加容器资源限制,Docker,Go,docker,eureka,容器

最后,需要把这些不同subsystem中的cgroup管理起来,并与容器建立关系。

cgroups/cgroup_manager.go

Docker实战07|Docker增加容器资源限制,Docker,Go,docker,eureka,容器

通过 CgroupManager,将资源限制的配置,以及将进程移动到 cgroup 中的操作交给各个 subsystem 去处理。

如下,用一张流程图来展示下上各个组件之间的调用关系。

Docker实战07|Docker增加容器资源限制,Docker,Go,docker,eureka,容器

CgroupManager 在配置容器资源限制时,首先会初始化 Subsystem 的实例, 然后遍历调用 Subsystem 实例的 Set 方法,创建和配置不同 Subsystem 挂载的 hierarchy 中的 cgroup,最后再通过调用 Subsystem 实例将容器的进程分别加入到那些 cgroup 中,实现容器的 资源限制 。文章来源地址https://www.toymoban.com/news/detail-782533.html

到了这里,关于Docker实战07|Docker增加容器资源限制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker限制容器日志大小

    我们公司做交通相关业务,我们部门主要负责信控服务,卖信号机的硬件产品和配套的信控平台 由于有部分小项目,可能只有几十个路口,客户预算有限,只给我们老旧的Windows server服务器,我们平台需要Linux环境,就在里面部署虚拟机 我们使用CentOS7虚拟机部署信控平台,我

    2024年02月12日
    浏览(28)
  • docker限制容器内存

    我们使用docker时,经常会遇到docker容器使用内存大于docker宿主机内存,导致宿主机奔溃,从而影响其他宿主机上容器的运行。 因此我们在使用docker容器的时候需要限制内存。 备注:命令详解 (1) 错误表现: (2)解决方案 (1)错误表现 (2)错误原因 ocker 默认没有启用memory-swap交换内

    2024年02月13日
    浏览(40)
  • docker限制容器内存的方法

    在服务器中使用 docker 时,如果不对 docker 的可调用内存进行限制,当 docker 内的程序出现不可预测的问题时,就很有可能因为内存爆炸导致服务器主机的瘫痪。而对 docker 进行限制后,可以将瘫痪范围控制在 docker 内。 因此,本文将介绍使用 docker 进行容器内存限制的方法。

    2024年02月01日
    浏览(29)
  • 对已有的docker容器增加新的端口映射

    在运行容器时指定映射端口运行后,如果想要添加新的端口映射,使用两种方式都可以,需要的朋友可以参考下 一般在运行容器时,我们都会通过参数 -p(使用大写的-P参数则会随机选择宿主机的一个端口进行映射)来指定宿主机和容器端口的映射,例如 这里是将容器内的

    2024年02月02日
    浏览(29)
  • 500行代码手写docker-实现硬件资源限制cgroups

    本系列教程主要是为了弄清楚容器化的原理,纸上得来终觉浅,绝知此事要躬行,理论始终不及动手实践来的深刻,所以这个系列会用go语言实现一个类似docker的容器化功能,最终能够容器化的运行一个进程。 本章的源码已经上传到github,地址如下: 之前我们对容器的网络命

    2024年02月06日
    浏览(30)
  • Docker中如何限制容器可用的 CPU

    默认情况下容器可以使用的主机 CPU 资源是不受限制的。和内存资源的使用一样,如果不对容器可以使用的 CPU 资源进行限制,一旦发生容器内程序异常使用 CPU 的情况,很可能把整个主机的 CPU 资源耗尽,从而导致更大的灾难。本文将介绍如何限制容器可以使用的 CPU 资源。

    2024年02月09日
    浏览(36)
  • 【Docker】限制已运行容器的Cpu和内存

    docker限制已运行容器的Cpu和内存 本文首发于 慕雪的寒舍 最近云服务器的内存经常不够用,而且是 莫名其妙 的增多,在腾讯云的控制台里面看,4g的内存占用了3.2g,就卡到连ssh都连不上了 PS: 已换过网络和设备,确认不是网络问题导致无法ssh 实在没辙了,只能把我的几个不

    2023年04月25日
    浏览(30)
  • 云计算day07-Docker容器_execstart= usr bin dockerd

    3.2 bridge(桥接式网络)(默认) 启动容器时,首先会在主机上创建一个docker0的虚拟网桥,相当于交换机,同时自动分配一对网卡设备,一半在容器(eth0),一半在宿主机,并且还关联到了docker0,从而进行连接。 每创建一个容器启动时自动分配地址以后会生成iptables规则,ip

    2024年04月25日
    浏览(25)
  • ubuntu 如何在docker容器内部查看允许使用的cpu详细信息以及管理员是否限制了docker容器可使用的cpu核心范围

    如题。最近在跑强化学习代码,发现自己的代码跑的好慢好慢好慢,怀疑是可使用的cpu数量被管理员限制了,于是去学习了一下如何查看docker容器中cpu的相关信息。 这将输出关于系统处理器的详细信息,包括每个 CPU 的数量、型号和速度。 在 Docker 容器中,默认情况下,可以

    2024年02月13日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包