在Ubuntu中,使用Docker时可以通过docker run
命令的参数来设置资源限制。主要的资源限制包括CPU、内存、磁盘I/O和网络带宽。以下是一些常用的参数:
--cpus
或 -c
: 限制容器可以使用的CPU核心数。docker run --cpus=2 ubuntu:latest
--memory
或 -m
: 限制容器可以使用的最大内存量。docker run --memory=512m ubuntu:latest
--memory-swap
: 限制容器可以使用的总内存(包括交换空间)。docker run --memory-swap=1g ubuntu:latest
Docker本身不直接支持磁盘I/O限制,但可以通过cgroups(控制组)来实现。可以使用--device-read-bps
和--device-write-bps
参数来限制设备的读写速度。
docker run --device-read-bps=/dev/sda:1mb ubuntu:latest
docker run --device-write-bps=/dev/sda:1mb ubuntu:latest
Docker本身也不直接支持网络带宽限制,但可以通过cgroups来实现。可以使用--net-classic
参数来启用经典网络模式,并结合cgroups工具(如cgcreate
、cgset
等)来设置网络带宽限制。
以下是一个综合示例,展示了如何设置CPU、内存和磁盘I/O限制:
docker run --cpus=2 \
--memory=512m \
--memory-swap=1g \
--device-read-bps=/dev/sda:1mb \
--device-write-bps=/dev/sda:1mb \
ubuntu:latest
如果你希望这些资源限制在容器重启后仍然有效,可以将这些参数添加到Docker的配置文件中(通常是/etc/docker/daemon.json
),然后重启Docker服务:
{
"default-ulimits": {
"memlock": {
"Name": "memlock",
"Hard": -1,
"Soft": -1
}
},
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
然后重启Docker服务:
sudo systemctl restart docker
通过这些方法,你可以在Ubuntu中灵活地设置Docker容器的资源限制。