在Ubuntu中配置Docker容器的资源限制可以通过以下几种方式进行:
docker run
命令的参数--cpus
或 -c
参数来限制容器可以使用的CPU核心数。例如,--cpus=1.5
表示容器最多可以使用1.5个CPU核心。--memory
或 -m
参数来限制容器可以使用的最大内存量。例如,--memory="512m"
表示容器最多可以使用512MB的内存。--cpus
和 --memory
参数来设置CPU和内存的限制。例如,--cpus=1.5 --memory="512m"
。如果你使用Docker Compose来管理容器,可以在 docker-compose.yml
文件中设置资源限制。
version: '3'
services:
myservice:
image: ubuntu:latest
deploy:
resources:
reservations:
cpus: '0.5'
memory: 256M
limits:
cpus: '1'
memory: 512M
在这个例子中,myservice
服务被限制最多使用1个CPU核心和512MB内存。
如果你通过 systemd 管理 Docker 容器,可以在服务文件中设置资源限制。
[Service]
ExecStart=/usr/bin/docker start -a mycontainer
ExecStop=/usr/bin/docker stop -t 2 mycontainer
Restart=on-failure
CPUQuota=50%
MemoryLimit=512M
Docker 底层使用 Linux 的 cgroups 来管理容器的资源限制。你可以直接操作 cgroups 来更细粒度地控制资源分配。
docker inspect --format='{{ .HostConfig.CgroupParent }}' <container_id>
cd /sys/fs/cgroup/cpu/docker/<container_id>
echo 200000 > cpu.cfs_quota_us
echo 100000 > cpu.cfs_period_us
--cpus
参数限制的是CPU核心数,而不是CPU时间。--memory
参数限制的是容器的总内存使用量,包括堆栈、堆和其他内存映射文件。通过以上方法,你可以在Ubuntu中有效地设置Docker容器的资源限制,确保系统的稳定性和性能。