Docker 限制容器资源

默认情况下,容器没有资源的限制,它可以使用整个主机的所有资源。Dcoker提供了控制资源的方法,

多少内存,CPU,IO,都可以在docker run使用标志符来设置。

内存


Docker可以强制执行硬内存限制,允许容器使用不超过给定数量的用户或系统内存,

或软限制,允许容器使用所需的内存,除非满足某些条件,例如 内核检测到主机上的低内存或争用。

当单独使用或设置多个选项时,这些选项中的一些具有不同的效果。

选项 说明
-m or --memory=
容器能使用的最大的内存。

如果你设置了这个选项,最小允许使用的值为4M。

--memory-swap*
容器允许swap的内存大小。

更多细节:--memory-swap details.

--memory-swappiness
默认情况下,不需要设置。

主机内核可以让容器使用一定比例的匿名内存页。你可以通过这个参数来设置这个百分比。更多细节: --memory-swappiness details.

--memory-reservation 允许你指定软限制,比--memory 参数值要小。这软限制在Docker检测到主机上的连接或内存较少时激活。
--kernel-memory
容器可以使用的最大的内核内存。最小值是4M。 因为内核内存不能被交换出去,一个缺少内核内存的容器可能会阻碍主机的资源,这会对主机和其他容器产生负面影响。

更多细节:--kernel-memory details.

--oom-kill-disable 默认情况下:out-of-memory(oom)内存溢出的错误出现,内核杀死容器中的进程。使用--oom-kill-disable 可以改变这种行为。 仅仅在已经设置了-m 的容器中关闭 OOM 杀死。 如果-m 标志没有设置,主机可能耗尽内存,内核可能需要杀死主机系统进程来释放内存。

--memory-swap 细节

  • 如果没有设置,而--me内核内存限制以分配给容器的总内存来表示。mory设置如300m了,则swap默认为300*2=600M
  • 如果--memory,--memory-swap都设置了
    • --memory-swap 代表了可以使用的总共内存,--memory 代表不使用swap的内存
    • 如:--memory-swap=1g,--memory=300M,
      • docker可以使用300M内存,1g-300m=700m swap.
  • 如果设置为-1,则容器不限制使用swap 内存。

 

CPU


Option Description
--cpu-shares Set this flag to a value greater or less than the default of 1024 to increase or reduce the container’s weight, and give it access to a greater or lesser proportion of the host machine’s CPU cycles. This is only enforced when CPU cycles are constrained. When plenty of CPU cycles are available, all containers use as much CPU as they need. In that way, this is a soft limit. --cpu-sharesdoes not prevent containers from being scheduled in swarm mode. It prioritizes container CPU resources for the available CPU cycles. It does not guarantee or reserve any specific CPU access.
--cpu-period 容器上一个逻辑CPU的调度周期. --cpu-periodmor默认值是100000(100ms)
--cpu-quota 在由--cpu-period设置的时间段内容器可以调度的最大时间量。
--cpuset-cpus 使用这个选项指定CPU使用一个或者多个CPU核,并用逗号分隔。

--cpu-period 和 --cpu-qota

例子:如果你有1核的CPU系统,容器run使用--cpu-period=100000

--cpu-quota=50000,容器可以消耗高达50%的1个CPU

$ docker run -ti --cpu-period=10000 --cpu-quota=50000 busybox

如果你有4核的CPU系统,容器运行--cpu-period=100000

--cpu-quota=200000,容器可以使用最多2个逻辑CPU(--cpu-period的200%)

$ docker run -ti --cpu-period=100000 --cpu-quota=200000

--cpu-set-cpus

给容器实际4核的CPU

$ docker run -ti --cpuset-cpus=4 busybox

阻塞IO


有两个选项可用于调整给定容器对直接块IO设备的访问。

您还可以按照每秒的字节数或每秒的IO操作来指定带宽限制。

Option Description
blkio-weight By default, each container can use the same proportion of block IO bandwidth (blkio). The default weight is 500. To raise or lower the proportion of blkio used by a given container, set the --blkio-weight flag to a value between 10 and 1000. This setting affects all block IO devices equally.
blkio-weight-device The same as --blkio-weight, but you can set a weight per device, using the syntax --blkio-weight-device="DEVICE_NAME:WEIGHT" The DEVICE_NAME:WEIGHT is a string containing a colon-separated device name and weight.
--device-read-bps and--device-write-bps Limits the read or write rate to or from a device by size, using a suffix of kbmb, or gb.
--device-read-iops or--device-write-iops Limits the read or write rate to or from a device by IO operations per second.

如果指定--blkio-weight和-blkio-weight-device,Docker使用--blkio-weight作为默认权重,

并使用--blkio-weight-device重写命名设备上的默认值。

要将/ dev / sda的容器的设备权重设置为200,而不指定默认blkio-weight:

$ docker run -it --blkio-weight-device "/dev/sda:200" ubuntu

此示例将ubuntu容器限制为从/ dev / sda到每秒1000次IO操作的最大读取速率:

$ docker run -ti --device-read-iops /dev/sda:1000 ubuntu

总结


 

  • 默认容器没有资源的限制,Docker提供了控制方法;

    • 内存,CPU,IO
    • docker run + 标志符来设置
  • 主要参数
    • 内存

      • -m 容器能使用的最大内存
      • --memory--reservation 
        • 比-m的值要小,在docker检测到主机的内存较少时激活
    • CPU
      • --cpu-period, --cpu-quota
      • 允许容器使用50%的CPU
        • --cpu-period = 10 ,--cpu-quota=5
      • 允许容器使用主机4核中的两核
        • --cpu-period = 10 , --cpu-quota=20
    • IO
      • 控制每秒的字节数或每秒的IO操作来限制带宽
      • 限制从/dev/sda 每秒1000次的IO读取操作
        • docker run -ti --device-read-iops /dev/sda:1000 ubuntu
时间: 2024-11-05 22:46:18

Docker 限制容器资源的相关文章

Docker监控容器资源的占用情况

启动一个容器并限制资源 启动一个centos容器,限制其内存为1G ,可用cpu数为2 [[email protected] ~]# docker run --name os1 -it -m 1g --cpus=2 centos:latest bash 启动容器后,可以使用docker 的监控指令查看容器的运行状态 docker top 容器名: 查看容器的进程,不加容器名即查看所有 docker stats 容器名:查看容器的CPU,内存,IO 等使用信息 [[email protected]

Docker Cgroup 容器资源限制

docker通过cgroup来控制容器使用的资源配额,包括CPU.内存.磁盘三大方面. 1.限制内存 查询系统中已经mount的cgroup的文件系统,这里的t表示type [[email protected] ~]# mount -t cgroup 搜索cgroup软件包 [[email protected] ~]# yum search cgroup 安装libcgroup [[email protected] ~]# yum install -y libcgroup-tools.x86_6

docker容器资源配额控制之内存-io-数据映射

docker容器资源配额控制之内存-io-数据映射 当容器中服务或命令运行结束后,自动删除容器 作用:当容器命令运行结束后,自动删除容器.应用场景:在某些环境下,可能需要大量的新建docker虚拟机,然后仅仅运行几秒钟,然后就彻底删除.如运行单元测试等,测试弹性云计算,需要创建1万虚拟机,运行1小时,模拟双11的压力,1小时后自动删除. [[email protected] ~]# docker run -it --rm --name apeng centos sleep 5 [[email p

docker --Docker微容器Alpine Linux

Alpine Linux的官网: http://www.alpinelinux.org/    #官方 https://pkgs.alpinelinux.org/packages  #官方提供的安装包查询 使用Docker创建容器时,基础镜像通常选择Ubuntu或Centos,不管哪个镜像的大小都在100MB以上. Alpine Linux是一个面向安全的轻型的Linux发行版. Alpine Linux采用了 musl libc 和 busybox以减小系统的体积和运行时资源消耗. 在保持瘦身

docker之容器管理常用命令篇

常用命令如下表: 选项 描述 ls 列出容器 inspect 查看一个或多个容器详细信息 exec 在运行容器中执行命令 commit 创建一个新镜像来自一个容器 cp 拷贝文件/文件夹到一个容器 logs 获取一个容器日志 port 列出或指定容器端口映射 top 显示一个容器运行的进程 stats 显示容器资源使用统计 stop/start 停止/启动一个或多个容器 rm 删除一个或多个容器 1.ls - 列出容器 只列出正在运行的容器:[[email protected] ~]# dock

Docker Kubernetes 容器扩容与缩容

Docker Kubernetes 容器扩容与缩容 环境: 系统:Centos 7.4 x64 Docker版本:18.09.0 Kubernetes版本:v1.8 管理节点:192.168.1.79 工作节点:192.168.1.78 工作节点:192.168.1.77 创建环境: 1.Deployment名称:nginx-deployment 2.pods副本数为:3  3.image镜像:nginx1.9 管理节点:扩容或缩容deploymnet的pod副本数. kubectl scale

Docker: 限制容器可用的内存

原文:Docker: 限制容器可用的内存 默认情况下容器使用的资源是不受限制的.也就是可以使用主机内核调度器所允许的最大资源.但是在容器的使用过程中,经常需要对容器可以使用的主机资源进行限制,本文介绍如何限制容器可以使用的主机内存. 为什么要限制容器对内存的使用? 限制容器不能过多的使用主机的内存是非常重要的.对于 linux 主机来说,一旦内核检测到没有足够的内存可以分配,就会扔出 OOME(Out Of Memmory Exception),并开始杀死一些进程用于释放内存空间.糟糕的是任何进

Docker: 限制容器可用的 CPU

原文:Docker: 限制容器可用的 CPU 默认情况下容器可以使用的主机 CPU 资源是不受限制的.和内存资源的使用一样,如果不对容器可以使用的 CPU 资源进行限制,一旦发生容器内程序异常使用 CPU 的情况,很可能把整个主机的 CPU 资源耗尽,从而导致更大的灾难.本文将介绍如何限制容器可以使用的 CPU 资源.本文的 demo 中会继续使用<Docker: 限制容器可用的内存>一文中创建的 docker 镜像 u-stress 进行压力测试,文中就不再过多的解释了. 限制可用的 CPU

Kubernetes+Docker+Istio 容器云实践

随着社会的进步与技术的发展,人们对资源的高效利用有了更为迫切的需求.近年来,互联网.移动互联网的高速发展与成熟,大应用的微服务化也引起了企业的热情关注,而基于Kubernetes+Docker的容器云方案也随之进入了大众的视野.开普勒云是一个基于Kubernetes+Docker+Istio的微服务治理解决方案. 一.Microservices 1.1 解决大应用微服务化后的问题 现在各大企业都在谈论微服务,在微服务的大趋势之下技术圈里逢人必谈微服务,及微服务化后的各种解决方案. 1.2 当我们