Docker学习(一):linux中的cgroups

2023-11-02 02:38
文章标签 linux 学习 docker cgroups

本文主要是介绍Docker学习(一):linux中的cgroups,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在我职业生涯中第一个大项目做完之后(基于solaris的),我终于有点时间可以充充电,学习一些别的知识了。 

近几年随着虚拟化技术的发展,各种云计算,open stack等术语几乎霸占各个IT网站的首页。我平时只是跟着了解,并没有做太深入的跟进。借着这个机会,也是该进场了。但毕竟相关技术太多,我也只能寻找一个突破点,从点到线,从线到面地把整个知识网编织起来了。纵观各大网站,最近讨论最热的莫过于docker了,那就从这个开始吧。

Docker是什么?

Docker最初是Paas提供商dotCloud公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码基于Go语言并且遵循Apache2.0协议开源,目前托管于GitHub上。它是基于64位的linux开发的,所以不能运行在windows,其他unix系统以及32位的linux系统。

既然它要依赖LXC技术,那么在了解它之前,有必要先起底一下LXC。LXC是Linux containers的简称,是linux上基于容器的操作系统级别的虚拟化技术。它可以在操作系统层次上为进程提供虚拟的执行环境,一个虚拟的执行环境就是一个容器。有了容器之后,就可以为容器绑定特定的系统资源(比如CPU,memory,network/disk bandwidth)并为其提供独立的namespace(网络、pid、ipc等)。

众所周知,linux kernel现在使用cgroups来实现系统资源的隔离和监控,所以还得先了解一下cgroups。好吧,真不容易。不过这就是学习一个新东西的过程,不断挖掘不断学习。说了这么多,才引出了这篇文章的重点,不要嫌我罗嗦啊。

Cgroups是Control Groups的缩写,它是由两个google的工程师在2006年开发的,并且在2007年加入到linux的kernel里。它提供一种在linux上方便管理和监控的资源划分的机制,这些资源可以是CPU,内存等,接着把划分后的资源放在不同的组里,然后为不同的组分配不同的可执行任务。从技术的角度来说,系统的资源是由不同的子系统来管理的(也称为controller),目前常见的子系统有

1)blkio——这个子系统针对物理磁盘(disk,ssd,USB等)的IO 进行限制。

2)cpu——这个系统通过系统的scheduler来调控隶属于不同groups上的tasks的cpu资源

3)memory——这个子系统限制了不同groups可以使用的内存。

4)net_cls——这个子系统可以为不同groups的网络包标记不同的id来允许Linux traffic controller(tc)来

5)  net_prio——该子系统可以动态的设置每个network interface的优先级。

6)ns——该子系统可以为不同的groups分配不同的命名空间(Process identifiers, UTS namesapce 允许修改hostname)。

说了这么多你可能还是不太了解,那么我来举个例子吧。假设你有一个server,上面跑着一些对内存,cpu等资源有要求的应用程序, 那么就可以创建两个groups,一个用于这个应用程序,另一个用于系统,并将相应的资源分配到这两个组里。


我们主要看一下group2,通常在我们创建一个group之前,我们一般会清楚需要为它分配什么资源, 比如在这个例子中,应用程序需要10GB的内存,80%的网络带宽,80%的磁盘带宽并且占用的CPU资源不能超过80%。


接下来,将接着介绍lxc。

参考资料:

  • Wikipedia: cgroups
  • kernel.org: cgroups.txt
  • kernel.org: cgroups folder
  • Red Hat: Introduction to Control Groups (Cgroups)

这篇关于Docker学习(一):linux中的cgroups的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/327512

相关文章

Linux镜像文件制作方式

《Linux镜像文件制作方式》本文介绍了Linux镜像文件制作的过程,包括确定磁盘空间布局、制作空白镜像文件、分区与格式化、复制引导分区和其他分区... 目录1.确定磁盘空间布局2.制作空白镜像文件3.分区与格式化1) 分区2) 格式化4.复制引导分区5.复制其它分区1) 挂载2) 复制bootfs分区3)

python项目打包成docker容器镜像的两种方法实现

《python项目打包成docker容器镜像的两种方法实现》本文介绍两种将Python项目打包为Docker镜像的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录简单版:(一次成功,后续下载对应的软件依赖)第一步:肯定是构建dockerfile,如下:第二步

Python + Streamlit项目部署方案超详细教程(非Docker版)

《Python+Streamlit项目部署方案超详细教程(非Docker版)》Streamlit是一款强大的Python框架,专为机器学习及数据可视化打造,:本文主要介绍Python+St... 目录一、针对 Alibaba Cloud linux/Centos 系统的完整部署方案1. 服务器基础配置(阿里

Linux服务器数据盘移除并重新挂载的全过程

《Linux服务器数据盘移除并重新挂载的全过程》:本文主要介绍在Linux服务器上移除并重新挂载数据盘的整个过程,分为三大步:卸载文件系统、分离磁盘和重新挂载,每一步都有详细的步骤和注意事项,确保... 目录引言第一步:卸载文件系统第二步:分离磁盘第三步:重新挂载引言在 linux 服务器上移除并重新挂p

Linux下屏幕亮度的调节方式

《Linux下屏幕亮度的调节方式》文章介绍了Linux下屏幕亮度调节的几种方法,包括图形界面、手动调节(使用ACPI内核模块)和外接显示屏调节,以及自动调节软件(CaliseRedshift和Reds... 目录1 概述2 手动调节http://www.chinasem.cn2.1 手动屏幕调节2.2 外接显

Linux(centos7)虚拟机没有IP问题及解决方案

《Linux(centos7)虚拟机没有IP问题及解决方案》文章介绍了在CentOS7中配置虚拟机网络并使用Xshell连接虚拟机的步骤,首先,检查并配置网卡ens33的ONBOOT属性为yes,然后... 目录输入查看ZFhrxIP命令:ip addr查看,没有虚拟机IP修改ens33配置文件重启网络Xh

linux实现对.jar文件的配置文件进行修改

《linux实现对.jar文件的配置文件进行修改》文章讲述了如何使用Linux系统修改.jar文件的配置文件,包括进入文件夹、编辑文件、保存并退出编辑器,以及重新启动项目... 目录linux对.jar文件的配置文件进行修改第一步第二步 第三步第四步总结linux对.jar文件的配置文件进行修改第一步进

Docker + Redis 部署集群的实现步骤

《Docker+Redis部署集群的实现步骤》本文详细介绍了在三台服务器上部署高可用Redis集群的完整流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录一、环境准备1. 服务器规划(3 台服务器)2. 防火墙配置(三台服务器均执行)3. 安装 docke

linux ssh如何实现增加访问端口

《linuxssh如何实现增加访问端口》Linux中SSH默认使用22端口,为了增强安全性或满足特定需求,可以通过修改SSH配置来增加或更改SSH访问端口,具体步骤包括修改SSH配置文件、增加或修改... 目录1. 修改 SSH 配置文件2. 增加或修改端口3. 保存并退出编辑器4. 更新防火墙规则使用uf

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出