docker 1.6之资源配置
一..docker通过控制cgroup来控制容器使用的资源限制,可以对docker限制的资源CPU 内存 磁盘
1.指定容器使用cpu份额,可以用-c指定,默认每个docker容器的cpu份额都是1024
实验:开两个容器A和B,分别给1000和500的cpu份额
两个情况:(1)两个容器正常运行,占用同一个cpu ,在cpu时间片分配时候,A容器比B容器多一倍机会获得CPU时间片
(2)分配的结果取决于当时其他容器的运行状态,比方容器A的进程一直是空的,B容器就可以获得比A容器更多的cpu份额
2.安装压测工具stress,可以用stress --help查看帮助信息
[root@elk ~]# yum install -y stress
[root@elk ~]# stress -c 2 -i 2 --timeout 20 stress: info: [74928] dispatching hogs: 2 cpu, 2 io, 0 vm, 0 hdd stress: info: [74928] successful run completed in 20s
运行起来立马开一个终端,用top查看
案例二:运行两个容器,给容器指定使用哪个cpu
[root@elk ~]# docker run --name t1 -it --cpuset-cpus 0,1 --cpu-shares 512 centos:7 /bin/bash
#--cpuset-cpus 0,1 指定t1容器只能运行在cpu0和cpu1上
#--cpu-shares 512 给t1分配512的cpu份额
[root@elk ~]# docker run --name t2 -it --cpuset-cpus 0,1 --cpu-shares 1024 centos:7 /bin/bash
创建t2的容器,cpu份额是1024
分别进入两个容器,进行压力测试,可以看到t2比t1分配CPU的份额要多,
二。docker容器控制内存分配
1.Docker提供参数-m, --memory=""限制容器的内存使用量。
案例一:允许容器使用的内存上限为128M:
1 | [root@elk ~]# docker run --name t3 -it -m 128M centos:7 |
案例二:创建一个docker,只使用2个cpu核心,只能使用128M内存
[root@elk ~]# docker run --name t4 -it -c 2 -m 128m centos:7 /bin/bash
三.docker容器控制IO
1. 格式: --device-write-bps value 限制写入的速度,单位可以是kb、mb或者gb
--device-read-bps value 限制此设备上的读速度,单位可以是kb、mb或者gb (场景:防止某个docker容器跑满磁盘的I/O)
# --device参数:将主机设备添加到容器
案例一:限制容器实例对硬盘的最高写入速度设定为 2MB/s
[root@elk ~]# docker run --name t1 -it -v /var/www/test:/var/t6 --device /dev/sda1:/dev/sda1 --device-write-bps /dev/sda:2mb centos:7 /bin/bash
加红色部分不能是/dev/sda1 不知道为啥
--device参数:将主机设备添加到容器
1 2 3 4 5 6 7 8 9 10 11 12 13 | [root@elk ~]# mkdir / var /www/test -p 宿主机创建挂载目录 [root@elk ~]# docker run --name t1 -it -v / var /www/test:/ var /t6 --device /dev/sda1:/dev/sda --device-write-bps /dev/sda:2mb centos:7 /bin/bash #宿主机上创建容器 [root@688e69f718b9 /]# time dd if =/dev/sda of=/ var /t6/test. out bs=2M count=50 oflag=direct,nonblock 50+0 records in 50+0 records out 104857600 bytes (105 MB) copied, 50.034 s, 2.1 MB/s real 0m50.035s user 0m0.001s sys 0m0.101s<br><br> |
四。docker容器运行结束释放资源
--rm 参数:当容器命令运行结束后,自动删除容器,自动释放资源
[root@elk ~]# docker run -it --rm --name t9 centos:7 sleep 5 等5s后看容器被删除了
[root@elk ~]# docker ps|grep t9
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了