我经常需要重新构建 Docker 映像,并且我在运行容器的主机中执行此操作。偶尔我看到这会给 CPU 带来相当大的压力,所以我认为我可以docker build
在nice -n19
.就其他进程需要运行时 docker 的产量而言。
我宁愿不使用 Docker Hub 存储库,因为这是私人的东西,我现在正在努力节省每一分钱。我也知道我可以设置另一台机器作为构建/存储库——例如,我可以在办公室使用一台机器——但我不确定如何。
所以,问题:为什么nice -n19 docker build ...
似乎不是很有帮助?
(将我指向有关如何设置我自己的私有构建/回购机器的文档的奖励积分)
这些
docker
命令是 docker 守护进程的客户端,它生成在容器中运行的进程。当您为docker
命令提供较低优先级时,docker 守护程序本身的优先级不受影响,因此您的构建和执行程序以其默认优先级运行。这就像给您的网络浏览器较低的优先级并不意味着网络服务器将以较低的优先级为您的请求提供服务。对于基本的独立构建机器,您只需执行
docker export
,scp
,docker import
. 但是对于更严肃的构建系统,您可能需要运行私有 docker 注册表。一些更有用的文档:如果您运行自己的私有注册表,则可以从办公室的本地工作站进行构建,然后使用
docker push
和docker pull
将 docker 映像上传到您的私有注册表并将其提取到需要的任何位置。考虑使用CPU 管理docker API 为您提供
nice
的其他选项,而不是 using :例如,我最近更新了一些构建,以保留我在我们的一台构建机器上拥有的 6 个 CPU 内核中的 1 个,使用如下命令:
似乎这些选项中的任何一个都没有很好的价值支持,因此您可能想尝试看看哪种方法最适合您。我发布了一些我运行的快速测试,但可以通过运行更长的测试并在主机上使用 CPU 来更好地模拟共享来改进这些测试。
--cpu-period="100000" --cpu-quota="150000"
--cpu-shares 500
好的
--cpuset-cpus 0-1
无(控制)
Lie 的回答给出了 Docker 不会为
nice
您构建的原因。我想在下面为您提供一个实用的解决方法。使 Docker 构建更温和的一种方法是识别 Dockerfile 的资源密集型部分,然后仅
nice
识别 Dockerfile 本身中的那些部分。这也将使您的构建在远程构建基础架构上更加温和(例如 Jenkins CI)。就我而言,我正在构建一个非常重的 Apache mod_perl 容器,其中包含大量 CPAN 模块。构建所有这些模块是昂贵的部分,因为它使用 GCC 编译了大量代码。无论如何,我可以
nice
通过将 Dockerfile 的行从至
尽管这有点笨拙而且有点 hacky,但我不确定我是否会
nice
在 Dockerfile 中发布软件,但你说这无论如何都是私人的东西,所以它可能是一个合适的解决方案。您可以将其推广到 Dockerfile 中的任何其他昂贵的操作,
其他示例:
Python
节点.js
昂贵的压缩步骤