【云原生Docker系列第四篇】Docker Cgroups资源控制操作(人人都喜欢森林,却都不想去种树)(二)

简介: 【云原生Docker系列第四篇】Docker Cgroups资源控制操作(人人都喜欢森林,却都不想去种树)(二)

三、对内存使用的限制


3.1 限制容器可以使用的最大内存

-m(--memory=):用于限制容器可以使用的最大内存
[root@localhost ~]# docker run -itd --name c4 -m 512m centos:7 /bin/bash
fb2ee21e0468d1426aacbd50bf628ba9314c9727ad67a0e7229d64901916f9f5
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS                       PORTS     NAMES
fb2ee21e0468   centos:7   "/bin/bash"   7 seconds ago    Up 6 seconds                           c4
81e3ea8f526e   centos:7   "/bin/bash"   6 minutes ago    Up 6 minutes                           c3
5c88ac86d48f   centos:7   "/bin/bash"   13 minutes ago   Exited (255) 6 minutes ago             c2
5dfeb7d377aa   centos:7   "/bin/bash"   15 minutes ago   Exited (255) 6 minutes ago             c1
[root@localhost ~]#docker stats
CONTAINER ID   NAME      CPU %     MEM USAGE / LIMIT     MEM %     NET I/O          BLOCK I/O         PIDS
fb2ee21e0468   c4        0.00%     392KiB / 512MiB       0.07%     648B / 0B        0B / 0B           1
81e3ea8f526e   c3        0.00%     202.2MiB / 1.781GiB   11.09%    32.3MB / 244kB   58.3MB / 25.3MB   1



3.2 限制可用的swap大小

–memory-swap :限制可用的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容器就可以使用多少)。


四、对磁盘Io配额控制(blkio)的限制


–device-read-bps:限制某个设备上的读速度bps(数据量),单位可以是kb、mb(M)或者gb。


–device-read-iops:限制读某个设备的iops(次数)


–device-write-iops:限制写入某个设备的iops(次数)


例:
docker run -itd --name test6 --device-read-bps /dev/sda:1mb centos:7 /bin/bash
--device-write-bps:限制某个设备上的写速度bps(数据量),单位可以是kb、mb(M)或者gb。
例:
docker run -itd --name c6 --device-write-bps /dev/sda:1mb centos:7 /bin/bash


4.1 创建容器,并限制写速度

#创建容器c6并限制写速度
[root@localhost ~]# docker run -itd --name c6 --device-write-bps /dev/sda:1mb centos:7 /bin/bash
525d77ff742386a8d676500326850597030fa966cdf9c1ef06bf3d3dd7f840c3
[root@localhost ~]# docker exec -it c6 bash
#通过dd命令来验证写的速度
[root@525d77ff7423 /]# dd if=/dev/zero of=/opt/test.out bs=10M count=5 oflag=direct
5+0 records in
5+0 records out
52428800 bytes (52 MB) copied, 50.5056 s, 1.0 MB/s
[root@525d77ff7423 /]#



五、清除docker占用的磁盘空间


docker system prune -a #可用于清理磁盘,删除关闭的容器、无用的数据卷和网络


#查看容器
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS                        PORTS     NAMES
525d77ff7423   centos:7   "/bin/bash"   3 minutes ago    Up 3 minutes                            c6
fb2ee21e0468   centos:7   "/bin/bash"   12 minutes ago   Up 12 minutes                           c4
81e3ea8f526e   centos:7   "/bin/bash"   18 minutes ago   Up 18 minutes                           c3
5c88ac86d48f   centos:7   "/bin/bash"   25 minutes ago   Exited (255) 19 minutes ago             c2
5dfeb7d377aa   centos:7   "/bin/bash"   27 minutes ago   Exited (255) 19 minutes ago             c1
#清理磁盘
[root@localhost ~]# docker system prune -a
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache
Are you sure you want to continue? [y/N] y
Deleted Containers:
5c88ac86d48f80c6261c834f92fbb1e89c67c3b8547d5cce91ec3ae56b476525
5dfeb7d377aafd309c90642799c6165026013af074b455e2da61cb2dfdb85957
Deleted Images:
untagged: stevelugyq/nginx:latest
untagged: stevelugyq/nginx@sha256:25dedae0aceb6b4fe5837a0acbacc6580453717f126a095aa05a3c6fcea14dd4
deleted: sha256:0e901e68141fd02f237cf63eb842529f8a9500636a9419e3cf4fb986b8fe3d5d
deleted: sha256:1e877fb1acf761377390ab38bbad050a1d5296f1b4f51878c2695d4ecdb98c62
deleted: sha256:834e54d50f731515065370d1c15f0ed47d2f7b6a7b0452646db80f14ace9b8de
deleted: sha256:d28ca7ee17ff94497071d5c075b4099a4f2c950a3471fc49bdf9876227970b24
deleted: sha256:096f97ba95539883af393732efac02acdd0e2ae587a5479d97065b64b4eded8c
deleted: sha256:de7e3b2a7430261fde88313fbf784a63c2229ce369b9116053786845c39058d5
deleted: sha256:ad6562704f3759fb50f0d3de5f80a38f65a85e709b77fd24491253990f30b6be
Total reclaimed space: 562.7MB
#再次查看容器
[root@localhost ~]# docker ps -a
CONTAINER ID   IMAGE      COMMAND       CREATED          STATUS          PORTS     NAMES
525d77ff7423   centos:7   "/bin/bash"   3 minutes ago    Up 3 minutes              c6
fb2ee21e0468   centos:7   "/bin/bash"   12 minutes ago   Up 12 minutes             c4
81e3ea8f526e   centos:7   "/bin/bash"   18 minutes ago   Up 18 minutes             c3
[root@localhost ~]#


总结


1.对cpu的限制参数

docker run -cpu-period #设置调度周期时间1000~1000000
-cpu-quota              #设置容器进程的CPU占用时间,要与调度周期时间成比例
--cpu-shares            #设置多个容器之间的CPU资源占用比
--cpuset-cpus           #绑核(第一个CPU从0开始)


2.对内存的限制

-m 物理内存 [--memory-swap=总值]


3.对磁盘IO的限制

--device-read-bps 设备文件:1mb/1M   #读速度
--device-write-bps                 #写速度
--device-read-iops                 #读次数
--device-write-iops                #写次数
docker system prune -a             #释放无用的资源


目录
相关文章
|
5天前
|
存储 Cloud Native 文件存储
云原生之使用Docker部署home-page个人导航页
【5月更文挑战第4天】云原生之使用Docker部署home-page个人导航页
19 1
|
1天前
|
Cloud Native 测试技术 数据安全/隐私保护
云原生之使用Docker部署Teedy轻量级文档管理系统
【5月更文挑战第8天】云原生之使用Docker部署Teedy轻量级文档管理系统
11 1
|
2天前
|
Cloud Native 测试技术 Linux
云原生之使用Docker部署homer静态主页
【5月更文挑战第7天】云原生之使用Docker部署homer静态主页
9 0
|
3天前
|
监控 Cloud Native 测试技术
云原生之使用Docker部署ServerBee服务器监控工具
【5月更文挑战第6天】云原生之使用Docker部署ServerBee服务器监控工具
12 1
|
4天前
|
存储 安全 数据中心
【Docker 专栏】Docker 容器与宿主机的资源隔离机制
【5月更文挑战第8天】Docker容器利用Namespace和Cgroups实现资源隔离,保证CPU、内存、网络和存储的独立,提升资源利用率和系统安全性。资源隔离有助于简化应用部署与管理,但也带来资源竞争、监控管理及安全挑战。理解并善用资源隔离机制能实现更高效、安全的容器运行。随着技术进步,Docker容器资源隔离将持续优化。
【Docker 专栏】Docker 容器与宿主机的资源隔离机制
|
5天前
|
Kubernetes Cloud Native 持续交付
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
【5月更文挑战第7天】本文探讨了Docker和Kubernetes如何协同构建和管理云原生应用。Docker提供容器化技术,Kubernetes则负责容器的部署和管理。两者结合实现快速部署、自动扩展和高可用性。通过编写Dockerfile创建镜像,然后在Kubernetes中定义部署和服务进行应用暴露。实战部分展示了如何部署简单Web应用,包括编写Dockerfile、构建镜像、创建Kubernetes部署配置以及暴露服务。Kubernetes还具备自动扩展、滚动更新和健康检查等高级特性,为云原生应用管理提供全面支持。
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
|
5天前
|
运维 Linux Docker
Docker详解(十一)——Docker容器CPU资源限额实战Docker详解
Docker详解(十一)——Docker容器CPU资源限额实战
23 5
|
5天前
|
存储 运维 Linux
Docker详解(十)——Docker容器CPU资源限额配置
Docker详解(十)——Docker容器CPU资源限额配置
21 3
|
7天前
|
存储 Cloud Native 文件存储
云原生之使用Docker部署Nas-Cab个人NAS平台
【5月更文挑战第2天】云原生之使用Docker部署Nas-Cab个人NAS平台
103 1
|
7天前
|
Kubernetes Cloud Native Go
Golang深入浅出之-Go语言中的云原生开发:Kubernetes与Docker
【5月更文挑战第5天】本文探讨了Go语言在云原生开发中的应用,特别是在Kubernetes和Docker中的使用。Docker利用Go语言的性能和跨平台能力编写Dockerfile和构建镜像。Kubernetes,主要由Go语言编写,提供了方便的客户端库与集群交互。文章列举了Dockerfile编写、Kubernetes资源定义和服务发现的常见问题及解决方案,并给出了Go语言构建Docker镜像和与Kubernetes交互的代码示例。通过掌握这些技巧,开发者能更高效地进行云原生应用开发。
49 1

热门文章

最新文章