1.概述
在很多情况下,我们需要限制docker主机上资源的使用。
在本教程中,我们将学习如何为Docker容器设置内存和CPU限制。
docker run
设置资源限制
docker run
命令直接设置资源限制。这是一个简单的解决方案。但是,该限制仅适用于图像的一种特定执行。
2.1 内存限制
例如,让我们将容器可以使用的内存限制为512 MB。要限制内存,我们需要使用m
参数:
$ docker run -m 512m nginx
我们还可以设置称为保留的软限制。当docker检测到主机上的内存不足时将激活它:
$ docker run -m 512m --memory-reservation=256m nginx
2.2 CPU限制
默认情况下,对主机的计算能力的访问不受限制。我们可以使用cpus
参数设置CPU限制。例如,让我们限制容器最多使用两个CPU:
$ docker run --cpus=2 nginx
我们还可以指定CPU分配的优先级。默认值为1024,数字越大优先级越高:
$ docker run --cpus=2 --cpu-shares=2000 nginx
与内存保留类似,当计算能力不足且需要在竞争进程之间分配时,CPU份额扮演着主要角色。
3.使用docker-compose文件设置内存限制
docker-compose
文件获得类似的结果。 docker-compose
的格式和可能性会有所不同。
3.1。 docker swarm
版本3和更高版本
让我们给Nginx服务限制一半的CPU和512 MB的内存,以及保留四分之一的CPU和128 MB的内存。我们需要在我们的服务配置中deploy
”然后是“ resources
”段:
services: service: image: nginx deploy: resources: limits: cpus: 0.50 memory: 512M reservations: cpus: 0.25 memory: 128M
要利用deploy
段,我们需要使用docker stack
命令。要将堆栈部署到集群,我们运行deploy
命令:
$ docker stack deploy --compose-file docker-compose.yml bael_stack
3.2。版本2与docker-compose
在较早版本的docker-compose,
我们可以将资源限制与服务的主要属性置于同一级别。它们的命名也略有不同:
service: image: nginx mem_limit: 512m mem_reservation: 128M cpus: 0.5 ports: - "80:80"
要创建已配置的容器,我们需要运行docker-compose
命令:
$ docker-compose up
4.验证资源使用情况
设置限制后,我们可以使用docker stats
命令验证它们:
$ docker stats CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 8ad2f2c17078 bael_stack_service.1.jz2ks49finy61kiq1r12da73k 0.00% 2.578MiB / 512MiB 0.50% 936B / 0B 0B / 0B 2
5.总结
在本教程中,我们探索了限制docker访问主机资源的方法。我们研究了docker run
和docker-compose
命令的用法。最后,我们使用docker stats
控制资源消耗。
0 评论