发布于 2026-01-06 1 阅读
0

PHP Composer:加速您的 Docker 构建

PHP Composer:加速您的 Docker 构建

我曾经对将 Node.js 应用容器化感到失望。运行起来npm install就像离开地球去火星一样。多亏了 Yarn 才让我摆脱了困境。但现在 PHP Composer 已经取代了它的位置。composer install以前在 Docker 中运行非常耗时,严重拖慢了 CI/CD 的速度。不过,我已经通过一些巧妙的技巧成功加速了构建过程。

规则 1

使用 Composer 搭配 prestissimo。它是一个可以并行下载软件包的插件。但我更愿意称它为 PHP 版的 Yarn。不过,别忘了在运行实际命令之前安装 prestissimo composer install

RUN composer global require hirak/prestissimo
Enter fullscreen mode Exit fullscreen mode

在使用此插件之前,我的一个 Dockerfile 构建需要5分 49 秒,而使用插件后仅需2 分 4 秒。哇!

如果你想知道我是如何计算时间的:

$ time docker build --no-cache .
Enter fullscreen mode Exit fullscreen mode

规则 2

不要composer install单独使用。使用以下选项可以节省您的时间:

选项 描述
--no-scripts 禁用根包中定义的脚本的执行。
--无交互 请勿提出任何互动性问题。
--no-autoloader 跳过自动加载器生成。
--no-dev 不包括来自 require-dev 软件包的建议。
--prefer-dist 如有可用软件包,请从 dist 目录安装。

举个例子:

RUN composer install --no-scripts --no-interaction --no-autoloader --no-dev --prefer-dist
Enter fullscreen mode Exit fullscreen mode

规则 3

在添加主源代码之前,请先添加您的composer.jsonComposercomposer.lock文件并运行composer install。原因很简单。与您的主源代码相比,这些 Composer 文件不会频繁更改。您将受益于 Docker 缓存。

ADD composer.json composer.lock ./
RUN composer install --no-scripts --no-interaction --no-autoloader --no-dev --prefer-dist
ADD . ./
Enter fullscreen mode Exit fullscreen mode

总的来说,你的 Dockerfile 中可能包含以下部分,以加快 Docker 构建速度:

RUN composer global require hirak/prestissimo
ADD composer.json composer.lock ./
RUN composer install --no-scripts --no-interaction --no-autoloader --no-dev --prefer-dist
ADD . ./
Enter fullscreen mode Exit fullscreen mode

第 N 条规则

你听说过dive吗?它是一个用于探索 Docker 镜像、查看镜像层内容以及寻找缩小 Docker/OCI 镜像大小方法的工具。我以前经常使用 dive 来查找可以改进的地方。要分析 Docker 镜像,只需运行 dive 并传入镜像标签/ID/摘要即可:

$ dive <your-image-tag>
Enter fullscreen mode Exit fullscreen mode

或者,如果您想构建自己的形象,那就直接进入分析阶段:

$ dive build -t <some-tag> .
Enter fullscreen mode Exit fullscreen mode

很简单,对吧?别忘了去 GitHub 查看更详细的文档。

原文发表于https://blog.maateen.me,日期为 2020 年 7 月 1 日。

文章来源:https://dev.to/maateen/php-composer-speed-up-your-docker-build-1dib