代码之家  ›  专栏  ›  技术社区  ›  yivi SilverLink

运行composer install,然后在docker项目中复制项目文件

  •  0
  • yivi SilverLink  · 技术社区  · 6 年前

    试图理解我在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安装,到目前为止还不错。

    但似乎所有的项目文件(包括前面提到的composer定义文件)都立即被复制到了同一个目的地。

    composer install 之后 这个。 COPY . ./ 台阶?如果在主机上 编写器安装 已经运行了,这会覆盖前两行的工作吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Federkun    6 年前

    当您再次尝试构建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.json composer.lock 变化。你不会每次都触发它。