-j选项对docker-php-ext-install做了什么?

时间:2017-10-26 14:48:26

标签: dockerfile

我已经阅读了很多为您的PHP特定设置创建dockerfile的示例,包括安装扩展。 -j$(nproc)命令有时会包含nproc作为选项。到底发生了什么?我怀疑FROM php:7.0-fpm RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg62-turbo-dev \ libmcrypt-dev \ libpng-dev \ && docker-php-ext-install -j$(nproc) iconv mcrypt \ && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \ && docker-php-ext-install -j$(nproc) gd 与进程数有关吗?

以下是https://github.com/docker-library/docs/tree/master/php#php-core-extensions

的示例
joined_pointx = spark.sql("""SELECT c.unique_reference_number, c.name, c.brand, c.pointx_classification_name, c.lat, c.long, CAST(d.poi_radious_meters as INT) as poi_radious_meters
  FROM adp_uk.pointx as c INNER JOIN temp.pointx_category d ON c.pointx_classification_code = d.category_code""")

我是docker的新手,想要确切了解每一步中发生的事情,而不是盲目地复制和粘贴各种示例和教程中的内容。

1 个答案:

答案 0 :(得分:6)

脚本make中包含的docker-php-ext-install个调用的作业数量(行53将该选项存储在变量$j105-106中致电make -j$j)。

命令nproc直接向脚本提供系统可用的物理线程数。例如,在我的系统上,它将简化为:

make -j$(nproc) -> make -j8

因此它使用8个平行配方运行make。

来自make manual

  

-j [jobs], --jobs[=jobs]:   指定要同时运行的作业(命令)数。如果有多个-j选项,则最后一个选项有效。如果在没有参数的情况下给出-j选项,make将不会限制可以同时运行的作业数。

有关 parallel jobs GNU make文档中的更多信息:

  

GNU make知道如何一次执行多个食谱。通常,make一次只执行一个配方,等待它在执行下一个配方之前完成。但是,-j--jobs选项告诉make 同时执行多个食谱。 [...]在MS-DOS上,-j选项无效,因为该系统不支持多处理。

     

如果-j选项后跟一个整数,这是一次执行的食谱数量;这称为作业槽数。如果在-j选项之后没有看起来像整数,则作业槽的数量没有限制。 默认的作业位数是1,这意味着连续执行(一次一件)

理想情况下,如果该数字等于可用的物理线程的数量(大致是处理器的数量,或者在这种情况下由{{返回的数字) 1}}),你应该得到最快的编译。您必须考虑可用内存。例如,如果您分配8个只有1GB内存的插槽,并且3个并发作业的编译填充RAM,那么当第四个将启动时,它将因内存不足而退出并出现错误,从而阻止整个编译过程。