本文目录
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: always
image: app-server:V1.0.0
deploy:
resources:
limits:
cpus: '0.1' #使用的容器的CPU核心数量或百分比
cpuset: '0-3' #可以使用的具体CPU核心1~3
memory: 1G #内存上限为1G
memswap_limit: 2G #内存+swap内存总上限为2G
reservations:
memory: 256M #内存预留为256M
cpus: "0.1" # 保留的CPU使用量为10%