1. 限制容器使用的CPU share
容器默认CPU share为1024。假设机器有4个CPU核,使用stress进行测试。
# root身份
docker run -it --rm --cpuset-cpus="1,2,3,4" stress --cpu 4
这里 --cpu 4 是stress参数,第二个容器设置share为512
docker run --rm --it --cpuset-cpus="1,2,3,4" -c 512 stress --cpu 4
运行结果如上,CPU占比不是很明显。
2. 限制容器使用的CPU
使用 --cpus可以限制使用的CPU个数
docker run --it --rm --cpus=3 stress --cpu 4
这里限制使用3个CPU,但是启动了4个进程。
总共300%左右的使用率,如何3个核的设置。
--cpus的参数不能超过机器的核数。
3. 限制容器运行在某些CPU核上
使用 --cpuset-cpus=1,2,3,4 表示限制在1,2,3,4号核
4. 限制容器内存使用量
-m --memory
:容器能使用的最大内存大小,最小值为 4m--memory-swap
:容器能够使用的 swap 大小--memory-swappiness
:默认情况下,主机可以把容器使用的匿名页(anonymous page)swap 出来,你可以设置一个 0-100 之间的值,代表允许 swap 出来的比例--memory-reservation
:设置一个内存使用的 soft limit,如果 docker 发现主机内存不足,会执行 OOM 操作。这个值必须小于--memory
设置的值--kernel-memory
:容器能够使用的 kernel memory 大小,最小值为 4m。--oom-kill-disable
:是否运行 OOM 的时候杀死容器。只有设置了-m
,才可以把这个选项设置为 false,否则容器会耗尽主机内存,而且导致主机应用被杀死
关于 --memory-swap
的设置必须解释一下,--memory-swap
必须在 --memory
也配置的情况下才能有用。
- 如果
--memory-swap
的值大于--memory
,那么容器能使用的总内存(内存 + swap)为--memory-swap
的值,能使用的 swap 值为--memory-swap
减去--memory
的值 - 如果
--memory-swap
为 0,或者和--memory
的值相同,那么容器能使用两倍于内存的 swap 大小,如果--memory
对应的值是200M
,那么容器可以使用400M
swap - 如果
--memory-swap
的值为 -1,那么不限制 swap 的使用,也就是说主机有多少 swap,容器都可以使用
docker run --rm -it -m 64m stress
5. IO资源(磁盘)限制
这个是对IO速度限制,没有对容量限制
--device-read-bps
:磁盘每秒最多可以读多少比特(bytes)--device-write-bps
:磁盘每秒最多可以写多少比特(bytes)
--device-read-iops
:磁盘每秒最多可以执行多少 IO 读操作--device-write-iops
:磁盘每秒最多可以执行多少 IO 写操作
#限制读的速度为1M
docker run -it --device /dev/sda:/dev/sda --device-read-bps /dev/sda:1mb ubuntu:16.04 bash
#限制磁盘每秒最多读100次
docker run -it --device /dev/sda:/dev/sda --device-read-iops /dev/sda;100 ubuntu:16.0 bash
6. 修改docker本地镜像与容器的存储方法
docker的存放位置可以使用docker info查看,默认在/var/lib。
1. 建立软连接。首先停掉docker服务
systemctl stop docker
mv /var/lib/docker /root/data/docker
ln -s /root/data/docker /var/lib/docker
2. 修改镜像和容器的存放路径
指定镜像和容器存放路径的参数是 --graph=/var/lib/docker
在/etc/sysconfig/docker中修改
OPTIONS=--graph="/root/data/docker" --selinux-enabled -H fd://
#然后重启docker service
systemctl restart docker
#如果无效,如下操作
vim /etc/default/docker
添加配置信息
DOCKER_OPTS="--graph=/home/docker"
保存退出
service docker restart
发现配置并没有生效
解决方案:
mkdir -p /etc/systemd/system/docker.service.d
cat /etc/systemd/system/docker.service.d/Using_Environment_File.conf
如果没有该文件则自行创建,添加以下内容
[Service]
EnvironmentFile=-/etc/default/docker
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// $DOCKER_OPTS
载入配置重启服务
systemctl daemon-reload
service docker restart
查看配置是否生效