gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:13:52 34 4
gpt4 key购买 nike

试图了解我在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定义文件并运行composer install,到目前为止一切顺利。

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

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

最佳答案

当您尝试再次构建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更改时,才需要再次安装软件包。您不会每次都触发它。

关于docker - 运行composer安装,然后在Docker项目中复制项目文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52579285/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com