如何限制Docker构建命令的CPU使用率?

问题描述 投票:0回答:2

我的 Dockerfile 执行

RUN npm run build
命令。当我在 t2.micro EC2 实例上执行
docker build
命令时,实例冻结并且不响应(我什至无法使用 ssh 连接)。当我监控CPU使用率时,我可以看到CPU使用率达到了最高水平。因此,我尝试使用
--max_semi_space_size=1
--max_old_space_size=198
参数来限制内存使用,但没有成功。

如果我可以为 docker build 命令设置 CPU 使用限制,我认为它可能会起作用。有人可以帮助我吗?

我知道,如果我增加 EC2 实例的 vCPU 数量,那么我可以毫无问题地构建我的应用程序,但由于它是一个演示项目,我尝试将其部署在免费层上。

Dockerfile:

FROM node:16-alpine
COPY . .
# Install dependencies
RUN node \
--max_semi_space_size=1 \
--max_old_space_size=198 \
$(which npm) ci
# Build the app
RUN node \
--max_semi_space_size=1 \
--max_old_space_size=198 \
$(which npm) run build
EXPOSE 3000
# Start the app
CMD [ "npx", "serve", "build" ]
node.js docker cpu-usage docker-build npm-run
2个回答
0
投票

在您的系统中,运行

sudo docker info
。如果您收到警告:没有交换限制支持,则需要首先通过运行
sudo nano /etc/default/grub
并添加以下行:
GRUB_CMDLINE_LINUX="cdgroup_enable=memory swapaccount=1"
并保存来手动编辑 grub 配置。

然后就可以限制CPU了。有关限制内存和CPU的命令可以查看这篇文章。 限制容器中的CPU和内存使用


0
投票

Docker 本身并没有提供直接的机制来通过 docker build 命令限制构建过程中的 CPU 使用率。但是,您可以尝试一些解决方法:

  1. 在 cgroup 中运行 Docker:如果您的 EC2 实例运行的是现代 Linux 操作系统,它可能支持 cgroup。您可以在内部运行 Docker 守护进程 有 CPU 限制的 cgroup。但这有点复杂,并且会 限制所有 Docker 操作的 CPU,而不仅仅是构建。

  2. 将 buildkit 与 buildx 一起使用:Docker 引入了 buildkit 作为 实验性功能,为 Docker 提供高级功能 构建。这些功能之一是能够设置资源 构建的约束。您可以使用 docker buildx 来利用 构建套件。

  3. 使用构建容器:此方法涉及创建一个容器,其中 您执行构建。该容器可能有资源限制,并且您 构建完成后可以将生成的文件复制出来。

© www.soinside.com 2019 - 2024. All rights reserved.