docker和PHP:获取依赖关系(composer php)的容器

一个小背景:我是docker工人,不知道任何最佳做法。 我的任务是创build一个基于PHP的web服务,我决定使用docker-compose进行configuration。

因为我们都是花哨的开发者,我们知道 – 现在没有办法在没有使用作曲者的情况下创build一个php应用程序。

我的问题:

我应该在构build中安装依赖关系吗? 所以通过添加到我的Dockerfile中:

RUN cd /app && composer install --no-interaction --prefer-source --optimize-autoloader 

或者我应该在开发过程中安装依赖关系,并使用包含的依赖关系构build容器映像?


我只知道一种方法不这样做:在开发机器上本地安装依赖关系,然后构build容器。 但是,“最佳实践”将如何呢?

而且 – 因为我是这个领域的新手,我将如何为我的应用程序服务容器运行“composer require some / package”?

顺便一提

我还注意到一条消息:“不要以root /超级用户的身份运行Composer!” build造集装箱时。 我添加COMPOSER_ALLOW_SUPERUSER=1到我的环境文件(如图所示),但是这个消息仍然出现。

有没有可能不执行作为根在docker集装箱的composer php安装? 我可以忽略这个消息吗?

在此先感谢,菲利普

目前我正在努力解决以下问题:

开发环境:

将整个src添加为卷:

 volumes: - .:/app 

最初的composer php安装命令

 docker-compose exec app composer install 

安装新的composer php包:

 docker-compose exec app composer require some/package 

该软件包将通过容器安装在composer软件包目录中(当然,默认情况下是/ vendor),源代码可以在ide中查看等等。

生产环境:

只有应用状态定义为音量,例如:

 volumes: - public/uploads:/app/public/uploads 

添加/供应商到.dockerignore

并在构build期间运行composer php安装

 RUN cd /app && composer install --no-dev --no-interaction --optimize-autoloader 

因此,您将拥有预先部署的映像,但仍然能够以更灵活的方式进行开发。

这个解决scheme还有两个缺点,也许有人对我有所帮助:

1)构build变得缓慢 – 似乎composer phpcaching不能正常工作

一个解决scheme(我不知道这是否可能在composer php)可能是composer php高速caching目录的卷。

2)由docker创build的所有包都由root拥有,所以只能使用sudo / root会话来处理这些文件/文件夹。

我不知道如何解决这个问题。 也许我可以创build一个用户的开发容器的开发用户的名称,并有这个用户运行命令和PHP-FPM,等等…对于生产根将没事我猜。

对于docker工人来说,我还是很新的,并且为更好的解决scheme而开放,所以我不会接受这个答案。

更新

Dockerfile中的Dockerfile用户添加新用户。 如下

 RUN useradd -ms /bin/bash newuser USER newuser 

如果你也想创build家庭用户

 WORKDIR /home/newuser 

要么

 mkdir /home/newuser 

如果你想回到root用户,你可以这样做

 USER root 

两面硬币 –

这是一个很好的做法,build立图像期间,我也一样。

我们将从公共仓库获得最新的更新,但硬币的另一面是我们无法确保它们与我们开发的版本相同。 你需要通过在composer.json中指定确切的版本来处理(不要使用^,*)。

Interesting Posts