[toc]
资源限制介绍
官网:TP
带有内存、CPU 和 GPU 的运行时选项
默认情况下,容器没有资源限制,可以使用主机内核调度程序允许的尽可能多的给定资源。Docker 提供了控制容器可以使用多少内存或 CPU 的方法,设置docker run命令的运行时配置标志。
何时应该设置此类限制以及设置这些限制可能出现哪些影响?
其中许多功能需要您的内核支持 Linux 功能。要检查支持,您可以使用该 docker info命令。
如果您的内核中禁用了某个功能,您可能会在输出的末尾看到如下警告:WARNING: no swap limit support
警告示例
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 
 | docker info
 Client: Docker Engine - Community
 Version:    24.0.2
 Context:    default
 Debug Mode: false
 Plugins:
 buildx: Docker Buildx (Docker Inc.)
 Version:  v0.10.5
 Path:     /usr/libexec/docker/cli-plugins/docker-buildx
 compose: Docker Compose (Docker Inc.)
 Version:  v2.18.1
 Path:     /usr/libexec/docker/cli-plugins/docker-compose
 
 Server:
 Containers: 11
 Running: 5
 Paused: 0
 Stopped: 6
 Images: 23
 Server Version: 24.0.2
 Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Using metacopy: false
 Native Overlay Diff: true
 userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
 Volume: local
 Network: bridge host ipvlan macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: runc io.containerd.runc.v2
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 3dce8eb055cbb6872793272b4f20ed16117344f8
 runc version: v1.1.7-0-g860f061
 init version: de40ad0
 Security Options:
 seccomp
 Profile: builtin
 Kernel Version: 3.10.0-957.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 972.6MiB
 Name: elkstack02
 ID: 157d082e-1c28-4abf-8857-2e2d9bacbdf1
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
 10.0.0.82
 127.0.0.0/8
 Registry Mirrors:
 https://pgz00k39.mirror.aliyuncs.com/
 Live Restore Enabled: false
 
 WARNING: bridge-nf-call-iptables is disabled
 WARNING: bridge-nf-call-ip6tables is disabled
 
 | 
资源限制示例
Docker内存限制
内存限制相关语法
| 12
 3
 4
 5
 6
 
 | -m
 --vm
 
 
 docker run -m 200m -it busybox  /bin/sh
 
 | 
内存限制示例
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 
 | docker stats
 CONTAINER ID   NAME            CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O       PIDS
 3ccba8015e98   test_mem1       0.00%     56KiB / 200MiB        0.03%     656B / 0B         0B / 0B         1
 e4ccf0b811bb   harbor-portal   0.00%     1.375MiB / 972.6MiB   0.14%     1.54kB / 0B       266kB / 0B      2
 8adfdf10d542   registryctl     0.00%     3.078MiB / 972.6MiB   0.32%     1.54kB / 0B       2.61MB / 0B     6
 e454f59c7e0c   registry        0.00%     5.043MiB / 972.6MiB   0.52%     1.5kB / 0B        3.02MB / 0B     7
 9df3af7ae3de   redis           0.12%     1.207MiB / 972.6MiB   0.12%     1.54kB / 0B       258kB / 0B      4
 83445c67d178   harbor-log      0.00%     3.25MiB / 972.6MiB    0.33%     98.9kB / 59.5kB   1.5MB / 4.1kB   11
 
 
 docker pull lorel/docker-stress-ng
 
 
 docker run --rm  --name test_mem4 -it lorel/docker-stress-ng --vm 3
 CONTAINER ID   NAME        CPU %     MEM USAGE / LIMIT    MEM %     NET I/O     BLOCK I/O         PIDS
 9b375a58845b   test_mem4   70.07%    770MiB / 3.84GiB     19.58%    656B / 0B   35MB / 5.71MB     7
 6d524edf3a2f   test_mem3   52.77%    401.4MiB / 500MiB    80.27%    656B / 0B   2.44GB / 2.63GB   7
 7f81b0bb1fa4   jenkins     6.87%     187.2MiB / 3.84GiB   4.76%     656B / 0B   1.34GB / 9.81MB   46
 99d88cd4a1e3   gitlab      57.24%    1.89GiB / 3.84GiB    49.22%    656B / 0B   3.43GB / 13.7MB   269
 
 
 docker run --rm  --name test_mem3 -m 500m -it lorel/docker-stress-ng --vm 3
 CONTAINER ID   NAME        CPU %     MEM USAGE / LIMIT    MEM %     NET I/O     BLOCK I/O         PIDS
 9b375a58845b   test_mem4   70.07%    770MiB / 3.84GiB     19.58%    656B / 0B   35MB / 5.71MB     7
 6d524edf3a2f   test_mem3   52.77%    401.4MiB / 500MiB    80.27%    656B / 0B   2.44GB / 2.63GB   7
 7f81b0bb1fa4   jenkins     6.87%     187.2MiB / 3.84GiB   4.76%     656B / 0B   1.34GB / 9.81MB   46
 99d88cd4a1e3   gitlab      57.24%    1.89GiB / 3.84GiB    49.22%    656B / 0B   3.43GB / 13.7MB   269
 
 | 
Docker限制CPU
CPU限制相关语法
CPU限制示例
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 | docker pull lorel/docker-stress-ng
 
 
 docker run --rm  --name test_cpu1 -it lorel/docker-stress-ng --cpu 8
 
 CONTAINER ID   NAME        CPU %     MEM USAGE / LIMIT    MEM %     NET I/O     BLOCK I/O         PIDS
 e5ae29cca3de   test_cpu1   295.87%   17.88MiB / 3.84GiB   0.45%     656B / 0B   0B / 0B           9
 7f81b0bb1fa4   jenkins     1.06%     139MiB / 3.84GiB     3.53%     656B / 0B   1.41GB / 9.81MB   46
 99d88cd4a1e3   gitlab      25.94%    1.984GiB / 3.84GiB   51.67%    656B / 0B   4.02GB / 13.8MB   266
 
 
 docker run --rm  --name test_cpu1 --cpus 1 -it lorel/docker-stress-ng --cpu 8
 
 CONTAINER ID   NAME        CPU %     MEM USAGE / LIMIT    MEM %     NET I/O     BLOCK I/O         PIDS
 9a6f9487e33b   test_cpu1   134.87%   17.85MiB / 3.84GiB   0.45%     656B / 0B   0B / 0B           9
 7f81b0bb1fa4   jenkins     1.34%     139.3MiB / 3.84GiB   3.54%     656B / 0B   1.42GB / 9.81MB   46
 99d88cd4a1e3   gitlab      6.55%     2.004GiB / 3.84GiB   52.20%    656B / 0B   4.05GB / 13.8MB   266
 
 | 
总结
我们资源限制不是目的,目的是我们要随时监控到我们的资源,能看到容器对宿主机资源的使用,才能更好的做限制,不要盲目限制,不知道资源使用的情况下,就对容器资源限制,就是在作死。