Docker实践之05-限制Docker容器运行资源

Docker容器在默认情况下会使用宿主机的所有CPU和内存资源,为了明确限制每一个Docker容器的运行资源,需按如下操作进行设置。

首先,执行:sudo docker info,如果提示:“WARNING: No swap limit support”,表示系统未开启资源隔离支持。

解决办法:

1.编辑/etc/default/grub文件
2.找到GRUB_CMDLINE_LINUX=配置项,并追加“cgroup_enable=memory swapaccount=1”(注意:如果GRUB_CMDLINE_LINUX=内有内容,切记不可删除,只需在后面追加cgroup_enable=memory swapaccount=1并用空格和前面的内容分隔开。)

其次,在启动容器时指定参数限定CPU和内存资源:
--cpus=N : 限制CPU核数
-m or --memory=4096m :容器可使用最大内存为4g,单位可以为 b,k,m,g
--memory-swap=4096m :只有当--memory设置之后,--memory-swap 才会生效

例如:

sudo docker run -it --cpus=4 -m 4096M --memory-swap=4096M -v $(pwd)/config:/data/config ai-media-hub:latest /bin/sh
sh-4.2#

如何查看真正分配到的资源?

如上,启动并进入到Docker容器之后,如果是执行top命令,或者cat /proc/cpuinfo等方式查看容器本身的资源信息是行不通的,通过这些命令查看到的都是宿主机本身的信息。

在容器内部使用如下命令查看Docker容器真正的资源信息:

1.查看内存大小

cat /sys/fs/cgroup/memory/memory.limit_in_bytes
4294967296

查询结果单位为字节,如上:Docker容器的内存大小为4GB。

2.查看CPU核数

expr `cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us` / `cat /sys/fs/cgroup/cpu/cpu.cfs_period_us`
4

如上:Docker容器分配的CPU核数为4。

【参考】
https://www.k2zone.cn/?p=2356 解决docker警告WARNING: No swap limit support
https://www.cnblogs.com/cptao/p/10936256.html docker内存限制
https://blog.csdn.net/hknaruto/article/details/107511106 Docker在容器中获取当前实例内存限制、CPU限制
https://www.cnblogs.com/sparkdev/p/7821376.html 查看 docker 容器使用的资源

posted @ 2021-04-30 17:03  nuccch  阅读(266)  评论(0编辑  收藏  举报