docker cgroup资源占用及docker的镜像创建

news/2025/7/8 15:28:45

cgroup用来资源限制

包括cpu,内存,磁盘三大方面

基本复写了常见的资源配额和使用量控制

cgroup是controlgroup的缩写

设置cpu使用率的上限

linux通过cfs(完全公平调度器)来调度各个进程对cpu的使用,cfs默认的调度周期是100ms

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

cpu分多少时间。

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

 cd /sys/fs/cgroup/cpu/docker/容器目录

 

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

--cpu-shares 1024

docker run -itd --name c1 --cpu-shares 1024 centos:7

docker run -itd --name c2 --cpu-shares 2048 centos:7

docker exec -it c1 bash

stress 多进程压测

两个关掉一个容器另一个用所有资源

lscpu

docker ps -a

docker run -itd --name c3 --cpuset-cpus 1 centos:7

docker ps -a

docker exec -it c3 bash

yum install -y epel-release

yum -y install stress

Cgroup 资源限制

控制容器进程对cpu,内存,磁盘io 使用量的限制

docker run --cpu-period  --cpu-quota 容器进程使用cpu的使用率的上限

--cpu-period 1000~1000000

--cpu-quota >=1000

docker run --cpu-shares 1024的倍数#设置多个容器的cpu使用的占用比,只能在多个容器同时运行时且资源紧张时有效

docker run --cpuset-cpus cpu编号 #设置容器绑定指定cpu,如多个cpu用逗号,间隔

2)对内存使用的限制

//

 docker run -m 内存大小 --memory-swap=内存与swap的总大小

#=-1 不限制swap的使用,宿主机有多少可以用多少

#=0或不设置 swap为-m的两倍

=与-m的值相同 则不适用swap

-m 512mb --memory-swap=2G 内存512 swap 1.5G #限制容器的内存和swap大小

1M=1mb

测试:

docker exec -it c4 sh

dd if=/dev/zero of/opt/test.txt bs =1M count=10 oflag=direct

exit

docker run -itd --name c2 --device-write-bps /dev/sda:1M centos:7

磁盘io读写限制

docker run --device-read-bps 磁盘设备文件名:速率(单位可以是 kb mb M gb) #限制容器在磁盘上读的速率

docker run --device-write-bps 磁盘设备文件名:速率(单位可以是 kb mb M gb) #限制容器在磁盘上写的速率

docker run --device-read-iops 磁盘设备文件名:次数 #限制容器在磁盘上读的速率

docker run --device-write-iops 磁盘设备文件名:次数 #限制容器在磁盘上写的速率

docker的镜像创建(只读模板文件,包含容器里应用程序所需的所有内容)

创建镜像的三种方法:分别是为基于已有镜像的创建,基于本地模板创建以及基于dockerfile创建

1)基于现有镜像创建

首先启动一个镜像,在镜像做修改

然后修改后的同时提交为新的镜像需要使用

镜像文件网站

 创建容器的方法

1)基于现有镜像创建

先使用现有镜像创建容器 docker run

再进入容器进行内容跟新 docker exec

最后提交成新的镜像 docker commit docker export

+docker import导入

2)基于模板创建

可从本地容器导出模板文件 docker export或从网上下载现成的模板文件 http://openvz.org/Downlord/templete/precreated

再将模板文件导入成镜像 docker import

3) dockerfile 构建

docker镜像架构联合文件系统架构unionFS

支持对文件系统作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个修文件系统下AUFS,overlayFS及devicemapper都是一种unionFS

bootfs加载宿主机的内核

//镜像加载原理

Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是UnionES。

bootfs主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统。

在Docker镜像的最底层是bootfs,这一层与我们典型的Linx/unix系统是一样的,包含boot 加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

rootfs,在bootfs之上。包含的就是典型Limx系统中的/dev,/proc,/bin,/etc等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如ubuntu,centos等等

我们回以理解成一开始内核里什么都没有,操作一个命今下我debian,这时就会在内孩上面加了一层某础镜像:再安装一个emacs,会在基础镜像上叠加一层image: 按着再安装一apache。又会在images面加一image。最后它们看起来就像一文件系统即究赛的rootfs。在Docker的体系里把这些rootsr的境像。但是,此的每一层rootfs都是read-only的,我们此时还不能对其进行作。当我们创建一个容器,也就是将Docker镜像进行实例化,系统会在一层或是多层read-only的rootfs之上分配一层空的read-write的rootfs.

//为什么Docker里的centos的大小才200M?

因为对于精简的OS,工O0ts可以很小,只需要包含最基本的命令、工具和程序库就可以了,因为底层直接用宿主机的Kaml,自己只需要提供rotfs就可以了。由此可见对于不同的linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。

//Dockerfile

Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如置名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、检建、操作的金今都写入一个脚本,用这个制太夹构建、定制接像,那么转像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。

dockerfile是一个文本文件,其内包含了一条条的指令 (Instruction),每一条指今构建一层,因此每一条指令的内容,就是捕述该层应当如何构建。有了nockerfi1le,当我们需要定制自己额外的需求时,只需在Dockerfile上添加或者修改指令,重新生成 image 即可, 省去了敲命令的麻烦

 

rootfs包含标准目录和文件(linux系统)

docker inspect 产看详细信息

可以理解成一开始内核里什么都没有,操作一个命令下载一个debian

 

dockerfile机构包含四个部分,基础镜像信息,维护者信息,镜像操作指令和容器启动时执行指令.容器数据的持久化用数据卷.(# ;不管前面的命令是否成功都会执行下一个)

写时复制技术

 


https://dhexx.cn/news/show-4633854.html

相关文章

K8s in Action 阅读笔记——【11】Understanding Kubernetes internals

K8s in Action 阅读笔记——【11】Understanding Kubernetes internals 11.1 Understanding the architecture Kubernetes集群分为两个部分: k8s控制平面工作节点 控制平面的组件 构成控制平面的组件有: etcd:etcd是一个分布式的持久化键…

Tomcat部署及多实例部署

Tomcat部署及多实例部署 一、什么是Tomcat二、Tomcat核心组件1.什么是servlet2.什么是 JSP 三、Tomcat 功能组件结构1.Connector2.Container2.1Container 包含四个子容器 3.Service 四、Tomcat 请求过程五、Tomcat 服务部署1.关闭防火墙2.上传jdk包,查看jdk版本&…

zerotier使用

目标 使用zerotier进行内网穿透,使外网客户端访问内网服务器 步骤 1.1 注册 进入zerotier官网,注册 ​ 完成后进入个人中心,点击networks,选择创建网络,得到一个networkid ​ 点击id进入设置,编辑名称…

状态转移矩阵计算方法及其离散化转换(含举例)

状态转移矩阵计算方法及其离散化转换 1. 何为状态转移矩阵2. 状态转移矩阵计算举例3. 离散系统的状态方程4. 离散系统的状态方程计算举例 1. 何为状态转移矩阵 一般地,对于一个线性定常系统,可以写成如下的柯西标准型形式 { x ˙ ( t ) A ( t ) x ( t…

算法与数据结构(三)

一、堆 1,堆结构就是用数组实现的完全二叉树结构 根节点的左孩子的下标为:2i1,右孩子为2i2。两个孩子的父节点为(i-1)/2向下取整 2,完全二叉树中如果每棵子树的最大值都在顶部就是大根堆 从下往上将孩子与父节点进行比较,如果子叶…

美化代码,让页面更优雅!使用「页面代码美化」模块,让您的代码一目了然!

在网页设计和开发的过程中&#xff0c;优雅的代码是不可或缺的。如果您想要让您的页面代码更加美观、易读&#xff0c;那么不要错过「页面代码美化」模块&#xff01;这个强大的工具能够自动识别页面中的 <code> 和 <pre> 标签&#xff0c;并将其内部的代码进行美化…

OpenGL 纹理

1.简介 纹理是一个2D图片&#xff08;甚至也有1D和3D的纹理&#xff09;&#xff0c;它可以用来添加物体的细节&#xff1b;你可以想象纹理是一张绘有砖块的纸&#xff0c;无缝折叠贴合到你的3D的房子上&#xff0c;这样你的房子看起来就像有砖墙外表了。 为了能够把纹理映射(M…

Ingress详解

Ingress Service对集群外暴露端口两种方式&#xff0c;这两种方式都有一定的缺点&#xff1a; NodePort &#xff1a;会占用集群集群端口&#xff0c;当集群服务变多时&#xff0c;缺点明显LoadBalancer&#xff1a;每个Service都需要一个LB&#xff0c;并且需要k8s之外设备支…

科研工具-R-META分析与【文献计量分析、贝叶斯、机器学习等】多技术融合实践

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…