docker|docker内存限制

作者:【吴业亮】
博客:https://wuyeliang.blog.csdn.net/
-m 和 --memory-swap

docker run -it --rm -m 100M --memory-swap -1 ubuntu-stress:latest /bin/bash

指定限制内存大小并且设置 memory-swap 值为 -1,表示容器程序使用内存受限,而 swap 空间使用不受限制(宿主 swap 支持使用多少则容器即可使用多少。如果 --memory-swap 设置小于 --memory则设置不生效,使用默认设置)。
ocker run -it --rm -m 100M --memory-swap -1 centos /bin/bash

按照官方文档的理解,如果指定 -m 内存限制时不添加 --memory-swap 选项,则表示容器中程序可以使用 100M 内存和 100M swap 内存。默认情况下,–memory-swap 会被设置成 memory 的 2倍。
–memory-swappiness=0
表示禁用容器 swap 功能(这点不同于宿主机,宿主机 swappiness 设置为 0 也不保证 swap 不会被使用):
docker run -it --rm -m 100M --memory-swappiness=0 ubuntu-stress:latest /bin/bash

–memory-reservation
选项可以理解为内存的软限制。如果不设置 -m 选项,那么容器使用内存可以理解为是不受限的。按照官方的说法,memory reservation 设置可以确保容器不会长时间占用大量内存。
–oom-kill-disable
docker run -it --rm -m 100M --memory-swappiness=0 --oom-kill-disable ubuntu-stress:latest /bin/bash

–kernel-memory
内核内存与用户内存根本不同,因为内核内存无法换出。无法交换使容器可能通过占用过多的内核内存来阻止系统服务。内核内存包括:
  • stack pages
  • slab pages
  • sockets memory pressure
  • tcp memory pressure
【docker|docker内存限制】如果无特殊需求,kernel-memory 一般无需设置,这里不作过多说明。

    推荐阅读