运行composer安装,然后在Docker项目中复制项目文件

时间:2018-09-30 15:24:53

标签: docker composer-php dockerfile

试图了解我在PHP项目中发现的Dockerfile的这一点。

COPY composer.json composer.lock ./
RUN set -eux; \
    composer install --prefer-dist --no-dev --no-autoloader --no-scripts --no-progress --no-suggest; \
    composer clear-cache

COPY . ./

到目前为止,第1行和第2行复制了作曲家定义文件并运行composer install。

但是立即看来,所有项目文件(其中包括上述的作曲家定义文件)都被复制到相同的目标位置。

通过不运行composer install 之后可以得到什么。 COPY . ./步?如果在主机composer install上已经运行过,那岂不是会覆盖前两行所做的工作吗?

1 个答案:

答案 0 :(得分:2)

当您尝试再次构建docker映像时,可以利用docker的缓存。 假设您有以下内容:

COPY . ./

RUN set -eux; \
    composer install --prefer-dist --no-dev --no-autoloader --no-scripts --no-progress --no-suggest; \
    composer clear-cache

这很好,最终结果将是相同的。区别在于,如果您更改存储库中的任何文件,那么COPY中的所有指令将再次运行。这意味着,如果您进行了任何更改(例如,您添加了图像,更改了CSS文件或删除了php文件),即使您不需要,也将重新安装所有依赖项。 composer install也将花费其(较长)时间。您可以节省的时间。

现在以您的示例为例:

COPY composer.json composer.lock ./
RUN set -eux; \
    composer install --prefer-dist --no-dev --no-autoloader --no-scripts --no-progress --no-suggest; \
    composer clear-cache

COPY . ./

现在,仅当composer.jsoncomposer.lock更改时,才需要再次安装软件包。您不会每次都触发它。