docker 是一个非常不错的容器, 让我们可以先把程序部署在镜像中, 然后再放到某个实体机器上跑. 若一个实体机中我们使用多个容器, 我们可能需要限制一个容器占用的系统资源. 比如内存, CPU 等
docker run reference 中提供了一些参数来处理系统限制.
内存,CPU的系统限制如下:
| Option | Description |
|---|---|
| -m, --memory="" | Memory limit (format: <number>[<unit>] , where unit = b, k, m or g) |
| --memory-swap="" | Total memory limit (memory + swap, format: <number>[<unit>], where unit = b, k, m or g) |
| -c, --cpu-shares=0 | CPU shares (relative weight) |
| --cpu-period=0 | Limit the CPU CFS (Completely Fair Scheduler) period |
| --cpuset-cpus="" | CPUs in which to allow execution (0-3, 0,1) |
| --cpuset-mems="" | Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. |
| --cpu-quota=0 | Limit the CPU CFS (Completely Fair Scheduler) quota |
| --blkio-weight=0 | Block IO weight (relative weight) accepts a weight value between 10 and 1000. |
| --oom-kill-disable=false | Whether to disable OOM Killer for the container or not. |
| --memory-swappiness="" | Tune a container’s memory swappiness behavior. Accepts an integer between 0 and 100. |
设置内存处理标志
| Option | Result |
|---|---|
| memory=inf, memory-swap=inf (default) | There is no memory limit for the container. The container can use as much memory as needed. |
| memory=L<inf, memory-swap=inf | (specify memory and set memory-swap as -1) The container is not allowed to use more than L bytes of memory, but can use as much swap as is needed (if the host supports swap memory). |
| memory=L<inf, memory-swap=2*L | (specify memory without memory-swap) The container is not allowed to use more than L bytes of memory, swap *plus* memory usage is double of that. |
| memory=L<inf, memory-swap=S<inf, L<=S | (specify both memory and memory-swap) The container is not allowed to use more than L bytes of memory, swap *plus* memory usage is limited by S. |
比如我们可以使用
docker run -ti -m 300M --memory-swap -1 centos /bin/bash其中 -m 300M 限制内存最多占用 300MB, 此处支持 B, K, M, G 等.
--memory-swap -1 表示交换分区不限制
docker run -ti --memory-swappiness=0 centos /bin/bashdocker run -ti --cpuset-cpus="1,3" centos /bin/bash表示 docker 仅使用 1, 3 两个 cpu 进程
docker run -ti --cpuset-cpus="0-2" centos /bin/bashdocker run -ti --cpuset-mems="1,3" centos /bin/bashdocker run -ti --cpuset-mems="0-2" centos /bin/bash--cpu-period 和 --cpu-quota 一般一起使用.
docker run -ti --cpu-period=50000 --cpu-quota=25000 centos /bin/bashReferences:
- Docker —— 从入门到实践 http://yeasy.gitbooks.io/docker_practice/content/index.html
- Docker run reference https://docs.docker.com/reference/run/#runtime-constraints-on-resources
Comments · 8