Docker资源配额

        Docker资源配额指的是对Docker容器或服务在系统资源使用方面的限制。 通过资源配额,可以控制和限制Docker容器可以使用的CPU、内存、磁盘空间和网络带宽等资源。

        根据应用程序的需求和系统环境来设置适当的资源配额:过于严格的配额可能导致应用程序性能下降,而过于宽松的配额可能会导致资源浪费和冲突,资源配额提供了更好的资源控制和管理机制,以确保容器化环境的稳定性和性能。

CPU资源配额

#查看帮助
docker run --help | grep cpu
      --cpu-period int                 Limit CPU CFS (Completely Fair Scheduler) period
      --cpu-quota int                  Limit CPU CFS (Completely Fair Scheduler) quota
      --cpu-rt-period int              Limit CPU real-time period in microseconds
      --cpu-rt-runtime int             Limit CPU real-time runtime in microseconds
  -c, --cpu-shares int                 CPU shares (relative weight)
      --cpus decimal                   Number of CPUs
      --cpuset-cpus string             CPUs in which to allow execution (0-3, 0,1)
      --cpuset-mems string             MEMs in which to allow execution (0-3, 0,1)

#CPU份额-c, --cpu-shares
CPU shares在创建容器时指定容器所使用的CPU份额值
是一个相对的加权值,不能保证获取绝对的core数量,默认docker容器cpu份额为1024
份额为1000的A容器和2000的B容器,B获取CPU占用时间的是A的两倍
如果CPU是充足,那么A和B都能获得充足的CPU
docker run -itd --name cpu1 --cpu-shares 1000 centos /bin/bash
docker exec -it cpu1 /bin/bash
cat /sys/fs/cgroup/cpu/cpu.shares
#1000

#CPU核数--cpuset-cpus、--cpuset-mems
可以控制容器运行限定使用哪些cpu内核和内存节点
更适用于具有NUMA拓扑(具有多CPU、多内存节点)的服务器
#nproc查看有多少个可用cpu
8
#使其绑定两个CPU
docker run -itd --name cpu1 --cpuset-cpus 0,1 centos /bin/bash

#puset-cpus和cpu-shares混合使用
docker run -itd --name cpu1 --cpuset-cpus 0,1 --cpu-shares 1000 centos /bin/bash
docker exec -it cpu1 /bin/bash
rm -rf /etc/yum.repos.d/* && exit

docker cp Centos-vault-8.5.2111.repo cpu1:/etc/yum.repos.d/
docker run -itd --name cpu2 --cpuset-cpus 0,1 --cpu-shares 2000 centos /bin/bash
docker exec -it cpu2 /bin/bash
rm -rf /etc/yum.repos.d/* && exit
docker cp Centos-vault-8.5.2111.repo cpu2:/etc/yum.repos.d/
#在容器内下载与使用stress压测软件,然后我忘了要在里面放centos8的源文件了
docker exec -it cpu1 yum install -y epel-release
docker exec -it cpu1 yum install -y stress
docker exec -it cpu2 yum install -y epel-release
docker exec -it cpu2 yum install -y stress
stress --help #查看stress帮助,直接看example就行
#Example: stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

#开始测试,开三个terminal,一个cpu1,一个cpu2,一个看top
docker exec -it cpu1 /bin/bash 
stress -c 2 --timeout 5m
docker exec -it cpu2 /bin/bash
stress -c 2 --timeout 5m
#再开一个terminal看top

Docker资源配额_第1张图片

内存资源配额

根据容器所运行的业务,配置相应最大内存,防止用太多影响其他的业务
docker run --help | grep -i memory
      --kernel-memory bytes            Kernel memory limit
  -m, --memory bytes                   Memory limit
      --memory-reservation bytes       Memory soft limit
      --memory-swap bytes              Swap limit equal to memory plus swap: '-1' to enable unlimited swap
      --memory-swappiness int          Tune container memory swappiness (0 to 100) (default -1)

docker run -itd --name mem1 -m 1g centos
docker exec -it mem1 cat /sys/fs/cgroup/memory/memory.limit_in_bytes
1073741824

IO资源配额

控制IO资源
docker run --help | grep write
      --device-write-bps list          Limit write rate (bytes per second) to a device (default [])
      --device-write-iops list         Limit write rate (IO per second) to a device (default [])
docker run --help | grep read
      --device-read-bps list           Limit read rate (bytes per second) from a device (default [])
      --device-read-iops list          Limit read rate (IO per second) from a device (default [])

#创建容器io,设置存储映射关系,设备sda限制io速度1mb每秒
docker run -it  -v /test/:/test/ --device /dev/sda:/dev/sda \\
--device-write-bps /dev/sda:1mb --name io centos  /bin/bash
#使用dd命令,从sda写到/test/内,块大小1M,传送60个块,绕过内核缓存,直接读取和写入设备
time dd if=/dev/sda of=/test/transblock bs=1M count=60 oflag=direct,nonblock

#读数据同理

Docker资源配额_第2张图片

结束运行资源释放

设置容器结束运行后自动释放资源,适用于一次性的容器如测试容器
如果容器是异常退出了也会被删除
docker run --help | grep rm
      --rm                             Automatically remove the container when it exits
#只设置一个5秒钟的任务
docker run -it --rm --name rmtest alpine sleep 5
docker ps -a | grep rm
#无,已经被自动删除了

你可能感兴趣的:(liunx运维,云原生,docker,容器,运维)