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中指定确切的版本来处理(不要使用^,*)。