Docker 容器的一大优势就是可以限制资源,包括 CPU、内存、IO 等,swarm 集群下可对应用进行资源限制。

您可以在容器服务管理控制台上通过设置界面上的参数或者通过编写编排模板来限制容器资源。

通过设置界面上的参数

您可以在创建应用 或者变更应用配置 时,设置资源限制

在 swarm 集群下,cpu 以 100 代表 1 核;内存的单位为 MB。


通过编排模板

在编排模板中,支持通过 mem_limitcpu_shares 标签对 CPU 和内存的资源进行限制。

限制 CPU

一个 CPU 核等于 100 CPU 资源。如果机器配置是 4 核,则总共可用的 CPU 资源为 400。在编排模板中,可以通过 cpu_shares 参数指定。cpu_shares: 50表示使用 0.5 个核。

限制内存

您可以使用 mem_limit 参数限制内存,单位为 Byte,最小内存为 4MB。如果设置了内存限制,当容器申请的内存超过限制时,容器会因为 OOM 而停止运行。

下面的编排模板演示了如何限制 CPU 和内存。

n1:
  expose:
    - 443/tcp
    - 80/tcp
  image: 'nginx:latest'
  cpu_shares: 50 #0.5核
  mem_limit: 536870912 #512MB
  labels:
    aliyun.scale: '1'
  restart: always
  volumes:
    - /var/cache/nginx

资源调度

为了保证容器能获得足量的指定资源,比如上述例子里的 0.5 核 CPU 和 512MB 内存,容器服务会为容器预留资源。比如,一台 4 核的机器,最多会调度 8 个 cpu_shares=50 的容器。但是,如果创建容器时未指定 cpu_sharesmem_limit,则默认不会为容器预留资源。

限制其他资源

其他资源限制请参考 Docker Compose 的说明