在普通 docker 中,您可以使用命令行选项来实现每个限制:
一个容器可以限制为单个 CPU 内核(或当前英特尔硬件上的超线程):
docker run \
--cpus 1 \
image
或受限于Dockers CPU shares,默认为 1024。这仅在您的大部分减慢任务也在 Docker 容器中时才有帮助,因此它们也被分配了 Docker 共享。
docker run \
--cpu-shares 512 \
image
Limiting memory 有点挑剔,因为如果达到限制,您的进程就会崩溃。
docker run \
--memory-reservation 2000 \
--memory 2048 \
--memory-swap 2048 \
image
Block or Device IO 比性能的总空间更重要。这可能会受到每台设备的限制,因此如果您将数据保存在特定设备上以进行转化:
docker run \
--volume /something/on/sda:/conversion \
--device-read-bps /dev/sda:2mb \
--device-read-iops /dev/sda:1024 \
--device-write-bps /dev/sda:2mb \
--device-write-iops /dev/sda:1024 \
image
如果您还想限制总磁盘使用量,则需要correct storage setup。在devicemapper、btrfs 和zfs 存储驱动程序上支持配额,并且在使用pquota 选项挂载的xfs 文件系统上使用overlay2 驱动程序时也支持配额。
docker run \
--storage-opt size=120G
image
撰写/服务
Docker compose v3 似乎已将其中一些概念抽象为可应用于服务/群的内容,因此您无法获得相同的细粒度控制。
对于 v3 文件,使用 resources 对象为 cpu 和内存配置 limits 和 reservations:
services:
blah:
image: blah
deploy:
resources:
limits:
cpu: 1
memory: 2048M
reservations:
memory: 2000M
基于磁盘的限制可能需要支持设置限制的卷驱动程序。
如果您可以返回到v2.2 Compose file,您可以在服务的基础级别的容器上使用full range of constraints,这类似于docker run 选项:
cpu_count,cpu_percent,cpu_shares,cpu_quota,cpus,cpuset,mem_limit,memswap_limit,memswap_limit,mem_swappiness,mem_reservation,mem_reservation,@98654352@,@98765435@