在CentOS中,使用Docker时可以通过docker run
命令的参数来设置资源限制。以下是一些常用的资源限制参数:
-c
或 --cpus
: 指定容器可以使用的CPU核心数。docker run -it --cpus=2 ubuntu:latest /bin/bash
-m
或 --memory
: 指定容器可以使用的最大内存量。docker run -it --memory=512m ubuntu:latest /bin/bash
--memory-swap
: 指定容器可以使用的最大内存和交换空间的总量。docker run -it --memory=512m --memory-swap=1g ubuntu:latest /bin/bash
Docker本身不直接支持磁盘I/O限制,但可以通过cgroups(控制组)来实现。可以使用--device-read-bps
和--device-write-bps
来限制设备的读写速度。
docker run -it --device-read-bps=/dev/sda:1mb --device-write-bps=/dev/sda:1mb ubuntu:latest /bin/bash
Docker 1.13及以上版本支持网络带宽限制,可以使用--network
参数结合--device-read-bps
和--device-write-bps
来限制网络带宽。
docker run -it --network=host --device-read-bps=eth0:1mb --device-write-bps=eth0:1mb ubuntu:latest /bin/bash
可以通过修改cgroups配置文件来设置更细粒度的资源限制。首先需要确保Docker使用cgroups v2(默认情况下是cgroups v1)。
编辑/etc/docker/daemon.json
文件,添加以下内容:
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
然后重启Docker服务:
sudo systemctl restart docker
之后,可以通过修改/sys/fs/cgroup/cpu/docker/<container_id>/cpu.shares
、/sys/fs/cgroup/memory/docker/<container_id>/memory.limit_in_bytes
等文件来设置具体的资源限制。
通过以上方法,可以在CentOS中为Docker容器设置资源限制,以确保系统的稳定性和资源的合理分配。