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的功能来实现:
-
如果限制使用总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
-
如果限制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