docker buildx 跨平台构建镜像时限制CPU使用率

2022-11-25  本文已影响0人  EvineDeng

本文同步发表在我的个人博客https://devome.github.io/blog

官方教程中提供了一种做法,也就是提供buildkitd的配置文件后再创建builder:

# 宿主上新建/etc/buildkitd.toml,比如限制同时最多4个进程
[worker.oci]
  max-parallelism = 4

然后创建builder:

$ docker buildx create --use \
  --name mybuilder \
  --driver docker-container \
  --config /etc/buildkitd.toml

这里再提供一种不依靠docker本身,而是使用cgroup2的功能来实现:

  1. 如果限制使用总CPU的百分之多少(需要root用户运行)

    ## 创建builder
    docker run --privileged --rm tonistiigi/binfmt --install all &>/dev/null
    docker buildx create --name builder --use 2>/dev/null || docker buildx use builder
    docker buildx inspect --bootstrap
    
    ## 限制builder至多使用多少CPU
    ## 右边的数值指把每个CPU线程时间分为多少份(默认值100000)
    ## 左边的数值指本程序按照每个线程时间的份数,至多使用全部CPU线程时间的多少份(默认值max,意为最大)
    ## 针对一台8线程的主机,下面的值指最多使用50%线程时间(差不多就是CPU使用率的50%),可自行根据情况修改
    ## 而如果是一台16线程的主机,那么下面的值指最多使用25%线程时间
    cpu_max="400000 100000"
    
    ## 下面的命令需要安装jq方可正确运行
    echo "$cpu_max" > /sys/fs/cgroup/system.slice/docker-$(docker inspect buildx_buildkit_builder0 | jq -r .[0].Id).scope/cpu.max
    
  2. 如果限制docker的builder只能使用固定的核心(需要root用户运行)

    ## 创建builder
    docker run --privileged --rm tonistiigi/binfmt --install all &>/dev/null
    docker buildx create --name builder --use 2>/dev/null || docker buildx use builder
    docker buildx inspect --bootstrap
    
    ## 限制builder只能使用固定的CPU核心(线程),核心(线程)的编号范围
    ## 核心(线程)编号从0开始计,所以下面的含义是第4、第6、第13-16个核心(线程)
    ## nproc 这个命令可以输出总核心(线程)数
    cpu_limit="3,5,12-15" 
    
    ## 下面的命令需要安装jq方可正确运行
    echo "$cpu_limit" > /sys/fs/cgroup/system.slice/docker-$(docker inspect buildx_buildkit_builder0 | jq -r .[0].Id).scope/cpuset.cpus
    
上一篇下一篇

猜你喜欢

热点阅读