1.内存分配
内存限额与操作系统类似,容器可使用的内存包括两部分:物理内存和swap。Docker通过下面两组参数来控制容器内存的使用量。
(1)-m或-memory:设置内存的使用限额,例如100MB,2GB。
(2)-memory-swap:设置内存+swap的使用限额。
默认情况下对容器内存和swap的使用没有限制。如果在启动容器时只指定-m而不指定–memory-swap,那么–memory-swap默认为-m的两倍。
当我们执行如下命令:
docker run -m 200M --memory-swap=300M ubuntu --vm 1 --vm-bytes 280M
该命令允许容器最多使用200MB的内存和100MB的swap。vm 1表示容器启动1个内存工作线程
vm-bves280M表示每个线程分配280MB内存。
2.CPU限制
CPU限额默认设置下,所有容器可以平等地使用主机的CPU资源并且没有限制。Docker可以通过-c或–cpu-shares设置容器使用CPU的权重。如果不指定,默认值为1024。与内存限额不同,通过-c设置的 cpu share并不是CPU资源的绝对数量,而是一个相对的权重值。某个容器最终能分配到的CPU资源取决于它的 cpu share占所有容器 cpu share总和的比例。换句话说:通过-c可以设置容器使用CPU的优先级。
如果容器A的cpu share值是容器B的两倍,当两个容器都需要CPU资源时,容器A获得的CPU是容器B的两倍。需要特别注意的是,这种按权重分配CPU只会发生在CPU资源紧张的情况下。如果CPU存在空闲,这时为了充分利用CPU资源,容器可以分配到全部可用的CPU。