在Docker Compose file 3下限制CPU与Memory
最近在研究elastich,容器运行没有限制内存,导致服务器内存被沾满,导致mysql被杀掉,出现事故。
基本环境说明
1.macOS Mojave 10.14.5
2.docker 18.09.2
3.docker-compose version 1.23.2,build 1110ad01
4.docker-compose.yml
用来模拟cpu冲高的container
version:“3”
services:
redis:
image: redis:alpine
container_name: testredis
模拟CPU飙高
1.使用docker-compose启动container
进到docker-compose.yml的所在文件夹位置执行下列数据
docker-compose up -d
2.进行该conatiner中让cpu飙高
docker exec -it testredis sh
for i in $(seq `grep -c ^proc /proc/cpuinfo`);do(yes > /dev/null &);done
3.确认设定
使用docker inspect testredis | grep Cpu检查container相关设定
4.实际效果
透过docker stats testredis监控container的使用量可以看到cpu从0.33%直线上升至超过300%
加入CPU限制
1.修改yml
1.1version改用3.7
1.2加入deploy的resource limit
version: "3.7"
services:
redis:
image: redis:alpine
container_name: testredis
deploy:
resources:
limits:
cpus: '0.50'
2.启动container时加入--compatibility参数
docker-compose --compatibility up -d
2.1启动时未加入-compatibility的警告
WARNING: Some services(redis)use the 'deploy' key,which will be ignored.Compose does not support 'deploy' configuration - use `docker stack deploy` to deploy to a swarm.
3.确认设定
使用docker inspect testredis | grep Cpu检查container相关设定,可以看到NanoCpu = 500000000(1000000000 * 0�.5)
4.实际效果
透过docker stats testredis监控container的使用量可以看到cpu从0.3%上升至50%左右就不再上升
心得
同场加映memory限制
version: "3.7"
services:
redis:
image: redis:alpine
container_name: testredis
deploy:
resources:
limits:
cpus: '0.50'
memory: 500M
--compatibility是docker-compose 1.20.0加入,主要目的就是用来将deploy中的数据限制、replicas与重启策略直接转译为version 2的语法
虽然只是一个小小参数,但却透露出其实我对docker-compose的不熟悉,花了一点时间才找到,幸亏亡羊补牢,没有继续错下去.