Docker-原理之cgroup

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们在上一章,讲了虚拟化,虚拟化是把硬件虚拟化,然后创建出来的虚拟机完全隔离,而Docker则是软件(内核)虚拟化,他的隔离性会低于虚拟机。我们将通过3-4周来讲解Docker相关内容,由于涉及到内容较多,就不一一列出来具体的细节,主要从以下几个方面来讲解:

Docker基本情况

Docker基本命令

Dockerfile

Docker镜像

Docker仓库

Docker原理(本小节属于)

Docker网络&存储&日志

Docker-Compose

Docker番外篇

这个cgroup,我们在讲Linux-sys文件系统kvm-资源控制cgroup都讲过了,这里再讲下。

下面部分内容是我给重庆某211大学培训Docker里面的ppt里面部分内容,当然实际图片来源于互联网,当时还是cgroup v1版本。

我们使用的和使用虚拟机实际上是一样的,基本上只会针对内存和cpu来限制,如果默认未添加cpu和内存参数,那么这个容器就可以使用当前宿主机的全部资源。

虽然docker已经有能力限制了容器的内存等资源,但是在早期的jdk是无法感知到这个cgroup的存在的。比如一个服务器假设有16g内存,我给一个tomcat容器限制了1g内存,但是tomcat默认启动它并不知道这个cgroup限制存在,从而按照java的默认物理内存的25%来配置堆内存,从而导致业务无法正常使用的情况。当然新版jdk已经适应了这个限制。

我们还是通过2个例子看下这个限制是怎么落实到cgroup里面。

csharp 复制代码
#创建一个限制cpu的容器
[root@localhost ~]# docker run -itd --cpus="0.5" centos:7
e8bd94fb3082ca31c43c7f7767bd1d1e193ded8241f2dbea51d73a491398ad9f

在限制上和kvm比较一致都是通过/sys/fs/cgroup/xxx/docker/xxx来实现的,每个容器都有的一个对应的cgroup目录。

CPU限制

如果有没有对应的限制参数,则cgroup则是下面这样的。-1则表示不限制。

如果是有限制,则是下面这样的,这里限制的就是0.5个cpu。

内存限制

docker就是通过这个方式来限制每个容器的的资源限制,来保证容器之前不会相互影响。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

相关推荐
松涛和鸣20 分钟前
DAY43 HTML Basics
linux·前端·网络·网络协议·tcp/ip·html
广东大榕树信息科技有限公司36 分钟前
如何通过动力环境监控系统提升决策效率?
运维·网络·物联网·国产动环监控系统·动环监控系统
谁在夜里看海.42 分钟前
【Linux-网络】HTTP的清风与HTTPS的密语
linux·网络·http·https
HIT_Weston44 分钟前
82、【Ubuntu】【Hugo】搭建私人博客:文章目录(一)
linux·运维·ubuntu
CAU界编程小白1 小时前
Linux系统编程系列之文件fd
linux·文件
冉佳驹1 小时前
Linux ——— 文件操作与缓冲机制的核心原理
linux·重定向·用户级缓冲区·open的返回值·进程中的当前路径
我爱学习好爱好爱1 小时前
Prometheus监控栈 监控docker和进程
docker·容器·prometheus
牛奶咖啡131 小时前
Linux的ext4文件系统元数据故障恢复实践教程
linux·服务器·机械硬盘的结构·ext4文件系统的构成·ext4超级块故障的修复·ext4块组描述故障修复·ext4块组的构成
hhzz1 小时前
Docker 搭建 NextCloud + OnlyOffice 完整教程(Linux Centos7系统)
linux·docker·容器·onlyoffice·nextcloud
.普通人1 小时前
树莓派4Linux 可操作多个gpio口驱动编写
linux