在Docker中設置內存和CPU限制

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 rundocker-compose命令的用法。最後,我們使用docker stats控制資源消耗。