Docker容器的资源使用限制

如何设置Docker容器的CPU和内存使用限制

容器布署后数,每个容器占用资源数不同,当资源不够用时,互相影响,docker提供上资源使用限制功能

  1. 查看docker 容器内存及CPU使用命令

docker stats

CONTAINER           CPU %               MEM USAGE / LIMIT       MEM %               NET I/O             BLOCK I/O           PIDS
c7bdcdc77786        7.04%               1.212 GiB / 7.638 GiB   15.87%              0 B / 0 B           8.08 MB / 372 MB    183
da75d82bfa9c        7.21%               1.5 GiB / 7.638 GiB     19.64%              0 B / 0 B           9.86 MB / 372 MB    184
4769f05b983c        7.66%               1.225 GiB / 7.638 GiB   16.04%              0 B / 0 B           13.6 MB / 372 MB    187

. 通过docker run来限制Docker容器资源
我们可以使用docker run命令直接设置资源限制。这是一个简单的办法。但是,该限制于只适用于映像的一次特定执行任务

2.1 Memory 内存限制
例如,让我们将容器可以使用的内存限制为512mb

docker run -m 512m nginx


我们还可以设置一个软限制或者叫保留,当docker检测到主机内存不足时激活:

docker run -m 512m --memory-reservation=256m nginx

2.2 CPU 限制
默认情况下,访问主机的CPU是无限制的,我们可以使用CPUs参数设置cpu限制。例如,让我们约束容器最多使用两个cpu:

docker run --cpus=2 nginx


我们还可以指定CPU分配的优先级。默认值是1024,数字越高优先级越高:

docker run --cpus=2 --cpu-shares=2000 nginx


与内存保留,当计算能力不足且需要在竞争进程之间进行分配时,CPU共享起主要作用

使用docker-compose文件来设置容器资源
我们可以使用docker-compose文件来实现类似的结果。请注意,不同版本的docker-compose的格式设置上是不同的

3.1 docker swarm Versions 3 以上的版本
让我们给Nginx的服务限制是一半的CPU和512m的内存,保留四分之一的CPU和128m的内存。我们需要在我们的服务配置中创建“部署”和“资源”分段:

services:
  service:
    image: nginx
    deploy:
        resources:
            limits:
              cpus: 0.50
              memory: 512M
            reservations:
              memory: 128M

注:reservations没有设置cpus的命令
一般情况下容器的cpus使用被限制在一半,内存为512MB ,如果服务器资源紧张的时候,cpus占用变为1/4,内存占用被限制为128MB

如果要使用上述docker-compose.yaml部署应用我们需要使用docker stack命令 , 部署应用到swarm中

docker stack deploy --compose-file docker-compose.yml bael_stack

3.2 docker-compose Version 2 配置方式
在旧版本的docker-compose中,我们可以将资源限制放在与服务的主要属性相同的级别上。它们的名字也略有不同:

service:
  image: nginx
  mem_limit: 512m
  mem_reservation: 128M
  cpus: 0.5
  ports:
    - "80:80"

 

你可能感兴趣的:(docker,docker)