本文目錄
- docker的限制方式
- 限制CPU占用
- 限制內存占用
- docker-compose
docker的限制方式
限制CPU占用
Docker使用--cpus
參數來限制容器的CPU資源。該參數指定了分配給容器的CPU核心數量或百分比。
例子:限制CPU使用個數
docker run --cpus=2 <imageName>
以上命令代表限制容器使用2個CPU核心
例子:限制CPU使用百分比
docker run --cpus=0.1 <imageName>
以上命令代表限制容器使用10%的CPU利用率。
使用--cpuset-cpus
參數來限制容器可以使用的具體CPU核心,通過使用逗號分隔的CPU編號列表。
docker run --cpuset-cpus=0,2 <imageName>
以上命令代表限制容器只能使用第1個和第3個的CPU核心。
限制內存占用
Docker使用-m,--memory
參數來限制容器可使用的內存大小,使用--memory-swap
參數來限制容器可使用的內存+交換分區大小。
參數 | 含義 |
---|---|
-m,–memory | 限制容器可使用的內存大小,單位可為‘b,k,m,g’,最小為4m |
–memory-swap | 限制容器可使用的內存+交換分區大小,值要比-m參數的值大,建議為-m的2倍 |
交換分區的含義:
在內存不足的情況下交換分區充當臨時存儲引擎,當容器需要更多的內存時,交換區會對緩存中的數據進行移動,以便為應用程序留出更多的內存空間。交換分區通常是由操作系統在硬盤上創建的,它的訪問速度慢于內存,因此在需要時盡量避免使用交換區,尤其是在容器中。因此,建議將--memory-swap
參數設置得高一些,但不要超過宿主機的物理內存大小。
當宿主機沒有開啟swap ,那么--memory-swap
不管怎么設置,都不會用到swap,這時容器使用的最大內存為--m
參數設置的大小。
例子:
docker run --m=1g <imageName>
docker run --m=1g --memory-swap=2g <imageName>
--memory
和--memory-swap
組合配置有什么不通的含義?
–memory | –memory-swap | 效果 |
---|---|---|
1g | 0/不限制 | 容器最大可用內存為 2g,其中 ram 為 1g,swap 為 1g |
1g | 2g | 容器最大可用內存為 2g,其中 ram 為 1g,swap 為 1g |
1g | -1 | 容器最大可用內存為 1g+主機可用swap |
docker-compose
docker-compose.yaml
文件如下
version: '3'
services:app:restart: alwaysimage: app-server:V1.0.0deploy:resources:limits:cpus: '0.1' #使用的容器的CPU核心數量或百分比cpuset: '0-3' #可以使用的具體CPU核心1~3memory: 1G #內存上限為1Gmemswap_limit: 2G #內存+swap內存總上限為2Greservations:memory: 256M #內存預留為256Mcpus: "0.1" # 保留的CPU使用量為10%