我已经阅读了很多为您的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的新手,想要确切了解每一步中发生的事情,而不是盲目地复制和粘贴各种示例和教程中的内容。
答案 0 :(得分:6)
脚本make
中包含的docker-php-ext-install
个调用的作业数量(行53将该选项存储在变量$j
和105-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,那么当第四个将启动时,它将因内存不足而退出并出现错误,从而阻止整个编译过程。