【问题标题】:How does Composer (PHP) fit into a Docker workflow?Composer (PHP) 如何融入 Docker 工作流程?
【发布时间】:2020-11-04 07:04:32
【问题描述】:

我希望了解将 Composer (PHP) 融入我的 Docker WordPress 开发工作流程的最佳实践。

我刚刚开始使用 Docker 和 Composer 进行 PHP/WordPress 开发。这有点陡峭的学习曲线,但就我阅读大量指南和教程而言,这一切似乎都很有意义。

我有 Docker 工作并且(我认为)对如何/为什么使用它有很好的理解。我知道 Docker 的一个好处是我不需要修改我的主机操作系统,即安装 PHP 和 Composer,而且它可以轻松移动,因为它包含了所需的一切。许多教程似乎都在主机操作系统上安装了 Composer 和 PHP,因为设置项目的第一步是使用 Composer 在主机操作系统上拉下 Roots Bedrock 之类的东西,然后将此目录用作 Docker 中的卷。据我目前了解,这不是最好的方法,因为我正在修改主机操作系统并且项目容器不包含运行所需的所有内容。

我对更好方法的最佳猜测是一个专用的 Composer 容器,它将我的整个项目目录(包含我所有不同的项目)作为一个卷。然后,我可以在此容器中的相应项目目录中运行 Composer 命令。我对此的坚持是,每个项目容器也不包含运行所需的所有内容(Composer)。所以我的下一个想法是每个项目都应该有一个自己的 Composer 容器。这将导致每个项目都有以下容器:WordPress 官方镜像、MariaDB、phpMyAdmin、Composer。我不确定这是否会使每个项目都使用 4 个容器过大?

如果有人能够就执行此操作的最佳实践方法以及我非常感激的原因提供建议!谢谢! :)

【问题讨论】:

  • 不久前,我在stackoverflow.com/a/34215978/684908 上整理了一个示例。我认为要点仍然是相关的。但是,一般问题有点含糊,很难回答,因为适合您的正确工作流程可能与其他人不同。
  • 为什么不简单地使用包含源代码 Composer 的 Docker 映像进行开发?那是另外一个文件
  • @NicoHaase 你的意思是不要使用 WordPress 图像(包含 PHP),而是使用 Nginx 图像之类的东西并添加 Composer 吗?抱歉,我对这个工作流程还是很陌生,所以不完全理解。
  • @AndyShinn 谢谢!我现在正在通读。听起来这是它自己的专用 Composer 容器,我只是为我正在处理的当前项目启动一个卷,然后在我需要处理另一个项目时交换卷?感谢帮助。只是寻找一个好的最佳实践起点。
  • 只需扩展 Wordpress 图像,安装 Composer 即可完成

标签: php wordpress docker docker-compose composer-php


【解决方案1】:

如果我没听错的话,你希望能够在你的 wordpress php 项目中安装和运行 php composer 包。

如果您使用的是 macOS 或 Linux,有一个非常方便的东西叫做 homebrew。这将使您的生活更轻松地管理和更新系统上的软件包;比如node、composer等

按照https://brew.sh/ 的简单安装指南安装隐藏包。

我在 wordpress 中使用composer php 包的经验,您必须将这些包(供应商文件夹)上传到服务器(在您的主题文件夹中),这样您就可以通过autoload.php 文件使用它们。 与 node 和 javascript 不同,只有您使用的必需模块被编译到单个文件中。

所以我很确定您不需要在 docker 中创建一个额外的容器来处理这个问题,因为您将如何将 composer 包部署到您的生产环境中,这会使 wordpress 的事情变得过于复杂。再加上更多的容器可能会减慢您的本地环境。

使用composer.json 管理当前项目中的包,将每个项目视为自己的项目。


我使用composer是这样的(一旦你安装了homebrew)...

找到一个你想使用的 php 包,例如Netspot Carbon

这也在packagist.org/packages/nesbot/carbon

在本地项目wp主题目录下,运行包安装命令...

composer require nesbot/carbon

这将在您的主题目录中创建这些文件和文件夹(不是 .gitignore 文件)。

您可以使用此方法安装任意数量的软件包。

如果您查看 composer.json 文件,您将看到这个 json 数组...

{
    "require": {
        "nesbot/carbon": "^2.36"
    }
}

所以如果你想删除一个作曲家包,只需从 json 数组中取出 vendor/package 键并像这样运行它......

composer remove nesbot/carbon

最好不要手动编辑composer.json 文件。使用 composer 命令来构建这个文件。

所以现在你已经安装了一些作曲家包,你需要将它们加载到你的主题中。

在您顶部的functions.php 中,或您打算调用包之前的任何位置,添加此php 代码...

// load our composer autoloader
require 'vendor/autoload.php';

这个autoload.php文件是通过composer生成的,它会加载你所有安装的包和包依赖项,

现在您可以像这样在您的主题 php 中使用一个包...(Netspot Carbon 示例)

use Carbon\Carbon;

$time = Carbon::createFromTimestampMs($cart['updated']['time'],'Asia/Dubai');

此外,您从不需要将composer.jsoncomposer.lock 文件上传到您的服务器。您只需要部署vendor 文件夹即可。

而你从不需要提交vendor文件夹,你只需要提交composer.json。有了这个 json 文件,您可以使用这个命令轻松地重新构建 vendor 文件夹和 composer.lock 文件...

composer install

...在将您的项目拉到另一台计算机时非常方便。

vendor 文件夹可能非常繁重,对其进行版本控制 (git) 毫无意义,因为 composer.json 保存了当前的包版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-29
    • 2012-07-17
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    相关资源
    最近更新 更多