AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 773388
Accepted
Morpheu5
Morpheu5
Asked: 2016-04-28 11:30:06 +0800 CST2016-04-28 11:30:06 +0800 CST 2016-04-28 11:30:06 +0800 CST

如何以较低的优先级运行 docker build?

  • 772

我经常需要重新构建 Docker 映像,并且我在运行容器的主机中执行此操作。偶尔我看到这会给 CPU 带来相当大的压力,所以我认为我可以docker build在nice -n19.就其他进程需要运行时 docker 的产量而言。

我宁愿不使用 Docker Hub 存储库,因为这是私人的东西,我现在正在努力节省每一分钱。我也知道我可以设置另一台机器作为构建/存储库——例如,我可以在办公室使用一台机器——但我不确定如何。

所以,问题:为什么nice -n19 docker build ...似乎不是很有帮助?

(将我指向有关如何设置我自己的私有构建/回购机器的文档的奖励积分)

docker nice
  • 3 3 个回答
  • 3674 Views

3 个回答

  • Voted
  1. Best Answer
    Lie Ryan
    2016-04-29T02:02:11+08:002016-04-29T02:02:11+08:00

    为什么 nice -n19 docker build ... 似乎不是很有帮助?

    这些docker命令是 docker 守护进程的客户端,它生成在容器中运行的进程。当您为docker命令提供较低优先级时,docker 守护程序本身的优先级不受影响,因此您的构建和执行程序以其默认优先级运行。这就像给您的网络浏览器较低的优先级并不意味着网络服务器将以较低的优先级为您的请求提供服务。

    如何设置我自己的私有构建/回购机器

    对于基本的独立构建机器,您只需执行docker export, scp, docker import. 但是对于更严肃的构建系统,您可能需要运行私有 docker 注册表。一些更有用的文档:

    • 在 Docker 中部署 Docker Registry
    • 如何使用自己的注册表

    如果您运行自己的私有注册表,则可以从办公室的本地工作站进行构建,然后使用docker push和docker pull将 docker 映像上传到您的私有注册表并将其提取到需要的任何位置。

    • 4
  2. John Steel
    2021-01-29T14:14:04+08:002021-01-29T14:14:04+08:00

    考虑使用CPU 管理docker API 为您提供nice的其他选项,而不是 using :

    docker build --help | grep cpu
          --cpu-period int          Limit the CPU CFS (Completely Fair Scheduler) period
          --cpu-quota int           Limit the CPU CFS (Completely Fair Scheduler) quota
      -c, --cpu-shares int          CPU shares (relative weight)
          --cpuset-cpus string      CPUs in which to allow execution (0-3, 0,1)
          --cpuset-mems string      MEMs in which to allow execution (0-3, 0,1)
    
    

    例如,我最近更新了一些构建,以保留我在我们的一台构建机器上拥有的 6 个 CPU 内核中的 1 个,使用如下命令:

    docker build --cpuset-cpus 0-4 .
    

    似乎这些选项中的任何一个都没有很好的价值支持,因此您可能想尝试看看哪种方法最适合您。我发布了一些我运行的快速测试,但可以通过运行更长的测试并在主机上使用 CPU 来更好地模拟共享来改进这些测试。

    --cpu-period="100000" --cpu-quota="150000"

    docker run --name 7z --rm -it --cpu-period="100000" --cpu-quota="150000" localhost/7z bash -c 'time dd if=/dev/zero bs=50K count=1K | 7zr -si a out.7z'
    
    7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
    p7zip Version 16.02 (locale=C,Utf16=off,HugeFiles=on,64 bits,12 CPUs Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz (306F2),ASM,AES-NI)
    
    Creating archive: out.7z
    
    Items to compress: 1
    
      0M1024+0 records in
    1024+0 records out
    52428800 bytes (52 MB, 50 MiB) copied, 0.0942925 s, 556 MB/s
                      
    Files read from disk: 1
    Archive size: 7815 bytes (8 KiB)
    Everything is Ok
    
    real    0m2.326s
    user    0m3.078s
    sys     0m0.359s
    

    --cpu-shares 500

    docker run --name 7z --rm -it --cpu-shares 500 localhost/7z bash -c 'time dd if=/dev/zero bs=50K count=1K | 7zr -si a out.7z'
    
    7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
    p7zip Version 16.02 (locale=C,Utf16=off,HugeFiles=on,64 bits,12 CPUs Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz (306F2),ASM,AES-NI)
    
    Creating archive: out.7z
    
    Items to compress: 1
    
      0M1024+0 records in
    1024+0 records out
    52428800 bytes (52 MB, 50 MiB) copied, 0.08448 s, 621 MB/s
                      
    Files read from disk: 1
    Archive size: 7815 bytes (8 KiB)
    Everything is Ok
    
    real    0m1.982s
    user    0m2.961s
    sys     0m0.343s
    

    好的

    docker run --name 7z --rm -it localhost/7z bash -c 'time dd if=/dev/zero bs=50K 
    count=1K | nice 7zr -si a out.7z'
    
    7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
    p7zip Version 16.02 (locale=C,Utf16=off,HugeFiles=on,64 bits,12 CPUs Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz (306F2),ASM,AES-NI)
    
    Creating archive: out.7z
    
    Items to compress: 1
    
      0M1024+0 records in
    1024+0 records out
    52428800 bytes (52 MB, 50 MiB) copied, 0.0928115 s, 565 MB/s
                      
    Files read from disk: 1
    Archive size: 7815 bytes (8 KiB)
    Everything is Ok
    
    real    0m2.026s
    user    0m3.066s
    sys     0m0.375s
    

    --cpuset-cpus 0-1

    docker run --name 7z --rm -it --cpuset-cpus 0-1 localhost/7z bash -c 'time dd if=/dev/zero bs=50K count=1K | 7zr -si a out.7z'
    
    7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
    p7zip Version 16.02 (locale=C,Utf16=off,HugeFiles=on,64 bits,12 CPUs Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz (306F2),ASM,AES-NI)
    
    Creating archive: out.7z
    
    Items to compress: 1
    
      0M1024+0 records in
    1024+0 records out
    52428800 bytes (52 MB, 50 MiB) copied, 0.0868617 s, 604 MB/s
                      
    Files read from disk: 1
    Archive size: 7815 bytes (8 KiB)
    Everything is Ok
    
    real    0m1.908s
    user    0m2.432s
    sys     0m0.295s
    

    无(控制)

    docker run --name 7z --rm -it localhost/7z bash -c 'time dd if=/dev/zero bs=50K count=1K | 7zr -si a out.7z'                                                                                               1 ↵
    
    7-Zip (a) [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
    p7zip Version 16.02 (locale=C,Utf16=off,HugeFiles=on,64 bits,12 CPUs Intel(R) Core(TM) i7-5820K CPU @ 3.30GHz (306F2),ASM,AES-NI)
    
    Creating archive: out.7z
    
    Items to compress: 1
    
      0M1024+0 records in
    1024+0 records out
    52428800 bytes (52 MB, 50 MiB) copied, 0.0938064 s, 559 MB/s
                      
    Files read from disk: 1
    Archive size: 7815 bytes (8 KiB)
    Everything is Ok
    
    real    0m2.036s
    user    0m3.021s
    sys.    0m0.389s
    
    • 1
  3. Joshua Huber
    2019-10-31T10:20:58+08:002019-10-31T10:20:58+08:00

    Lie 的回答给出了 Docker 不会为nice您构建的原因。我想在下面为您提供一个实用的解决方法。

    使 Docker 构建更温和的一种方法是识别 Dockerfile 的资源密集型部分,然后仅nice识别 Dockerfile 本身中的那些部分。这也将使您的构建在远程构建基础架构上更加温和(例如 Jenkins CI)。

    就我而言,我正在构建一个非常重的 Apache mod_perl 容器,其中包含大量 CPAN 模块。构建所有这些模块是昂贵的部分,因为它使用 GCC 编译了大量代码。无论如何,我可以nice通过将 Dockerfile 的行从

    RUN cpanm --quiet --installdeps --local-lib-contained /perlmod .
    

    至

    RUN nice -n19 cpanm --quiet --installdeps --local-lib-contained /perlmod . 
    

    尽管这有点笨拙而且有点 hacky,但我不确定我是否会nice在 Dockerfile 中发布软件,但你说这无论如何都是私人的东西,所以它可能是一个合适的解决方案。

    您可以将其推广到 Dockerfile 中的任何其他昂贵的操作,

    其他示例:

    Python

    RUN nice -n19 pip install some_module
    

    节点.js

    RUN nice -n19 npm install .
    

    昂贵的压缩步骤

    RUN nice -n19 xz some_file.bin
    
    • 0

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve