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
在使用此插件之前,我的一个 Dockerfile 构建需要5分 49 秒,而使用插件后仅需2 分 4 秒。哇!
如果你想知道我是如何计算时间的:
$ time docker build --no-cache .
规则 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
规则 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 . ./
总的来说,你的 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 . ./
第 N 条规则
你听说过dive吗?它是一个用于探索 Docker 镜像、查看镜像层内容以及寻找缩小 Docker/OCI 镜像大小方法的工具。我以前经常使用 dive 来查找可以改进的地方。要分析 Docker 镜像,只需运行 dive 并传入镜像标签/ID/摘要即可:
$ dive <your-image-tag>
或者,如果您想构建自己的形象,那就直接进入分析阶段:
$ dive build -t <some-tag> .
很简单,对吧?别忘了去 GitHub 查看更详细的文档。
文章来源:https://dev.to/maateen/php-composer-speed-up-your-docker-build-1dib原文发表于https://blog.maateen.me,日期为 2020 年 7 月 1 日。