linuxea:docker-compose2和3的常用参数和资源限制

marksugar
2021-12-18 / 0 评论 / 875 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年12月21日,已超过340天没有更新,若内容或图片失效,请留言反馈。

通常我们在编排一个容器的时候,最简单的方式就是使用docker-compose,compose是简单的将docker run的命令进行组织起来。而在docker早期的产品里面compose被收购后是很重要的一个环节。

当我们run一个容器的时候,一般而言,我们关注她的网络,持久化,资源情况
以rabbitmq为例,如下:

2.4

version: '2.4'
services:
  rabbitmq:
    image: rabbitmq:3.7.7-management
    container_name: rabbitmq
    restart: always
    hostname: "rabbitmqA"
    network_mode: "host"
    environment:
    - RABBITMQ_ERLANG_COOKIE="DSSOQQK1"
    - RABBITMQ_DEFAULT_USER=linuxea
    - RABBITMQ_DEFAULT_PASS=DSSOQQK1PASSWORD
    - RABBITMQ_DEFAULT_VHOST="/"
    volumes:
    - /data/rabbitmq/data:/var/lib/rabbitmq
    - /data/rabbitmq/rabbitmq_delayed_message_exchange-3.8.0.ez:/plugins/rabbitmq_delayed_message_exchange-3.8.0.ez
    mem_limit: 2048m

如上,我们关注几个配置项目
restart: always: 配置了容器重启策略,如果不配置此项,在docker被重启后,容器未必会被拉起。
container_name: 运行的容器命名
hostname: 容器的主机名
network_mode: 当被配置"host"的时候,docker不会隔离网络名称空间,这是最简单粗暴也有效的方式。我喜欢这样使用,特别是在你用iptables的时候
mem_limit: 在2.4的版本中mem_limit是用来限制内存大小的选项,不限制则使用所有了

3

[root@test rabbitmq]# docker stats rabbitmq

CONTAINER ID   NAME       CPU %     MEM USAGE / LIMIT   MEM %     NET I/O   BLOCK I/O     PIDS
5c1aed8e7ce5   rabbitmq   0.00%     42.66MiB / 2GiB     2.08%     0B / 0B   0B / 32.8kB   43

3

version: '3'
services:
  rabbitmq:
    image: rabbitmq:3.7.7-management
    container_name: rabbitmq
    restart: always
    hostname: "rabbitmqA"
    network_mode: "host"
    environment:
    - RABBITMQ_ERLANG_COOKIE="DSMAOMOXML"
    - RABBITMQ_DEFAULT_USER=mark
    - RABBITMQ_DEFAULT_PASS=E4OWYyNj11SXOA
    - RABBITMQ_DEFAULT_VHOST="/"
    volumes:
    - /data/rabbitmq/data:/var/lib/rabbitmq
    - /data/rabbitmq/rabbitmq_delayed_message_exchange-3.8.0.ez:/plugins/rabbitmq_delayed_message_exchange-3.8.0.ez
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 2048m
        reservations:
          cpus: '1'
          memory: 2048m

而在compose3版本中更倾向对集群的使用了,从而资源限制的方式也变了。
2.4到3版本并不是一个2.4到3的平滑升级,3对于docker公司来说是另外一个商业计划。这样来理解,相信你已经明白了

    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 2048m
        reservations:
          cpus: '1'
          memory: 2048m

如上,我们在限制内存的时候使用的是0.5。
要理解CPU限制为什么是0.5CPUS,以及了解CFS调度。
我们最快的方式查看docker官网的configure-the-default-cfs-scheduler解释

--cpus=<value>: 指定容器可以使用多少可用 CPU 资源。例如,如果主机有两个 CPU 并且您设置了--cpus="1.5",则容器最多保证一个半 CPU。这相当于设置--cpu-period="100000"和--cpu-quota="150000"。
如果你只有1个CPU,配置是0.5的时候,就是使用一半的CPU,50%,1个CPU的整个是100%
CPU的限制实际上有很多,你甚至可以限制它运行在某一颗上

另外,之所以内存的reservations和limits是一样,是为了减少内存回收可能产生的比必要的问题,所以请求和限制设置是一样的。而CPU我们是可压缩的,所以我们可以灵活的进行配置

https://docs.docker.com/compose/compose-file/compose-file-v2/#restart

[root@test rabbitmq]# docker stats rabbitmq 

CONTAINER ID   NAME       CPU %     MEM USAGE / LIMIT   MEM %     NET I/O   BLOCK I/O     PIDS
a46e89266a99   rabbitmq   0.00%     102.3MiB / 2GiB     5.00%     0B / 0B   0B / 90.1kB   162

CONTAINER ID   NAME       CPU %     MEM USAGE / LIMIT   MEM %     NET I/O   BLOCK I/O     PIDS
a46e89266a99   rabbitmq   0.00%     102.3MiB / 2GiB     5.00%     0B / 0B   0B / 90.1kB   162

CONTAINER ID   NAME       CPU %     MEM USAGE / LIMIT   MEM %     NET I/O   BLOCK I/O     PIDS
a46e89266a99   rabbitmq   0.13%     102MiB / 2GiB       4.98%     0B / 0B   0B / 90.1kB   162
0

评论

博主关闭了当前页面的评论