美文网首页
docker buildx 跨平台构建镜像时限制CPU使用率

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

作者: EvineDeng | 来源:发表于2022-11-25 13:06 被阅读0次

    本文同步发表在我的个人博客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
      

    相关文章

      网友评论

          本文标题:docker buildx 跨平台构建镜像时限制CPU使用率

          本文链接:https://www.haomeiwen.com/subject/utvffdtx.html