一点背景:我是docker的新手,并且还不知道任何最佳实践 . 我的任务是创建一个基于php的Web服务,我决定使用docker-compose进行配置 .
因为我们都是花哨的开发者,我们知道 - 这些天没有使用composer就没有办法构建一个php应用程序 .
我的问题:
我应该在构建中安装依赖项吗?所以通过将其添加到我的Dockerfile:
RUN cd /app && composer install --no-interaction --prefer-source --optimize-autoloader
或者我应该在开发期间安装依赖项并使用包含的依赖项构建容器映像?
我只知道一种不这样做的方法:在开发机器上本地安装依赖项,然后构建容器 . 但“最佳实践”将如何?
并且 - 因为我是这个领域的新手 - 我如何为我的应用服务容器运行“composer require some / package”?
顺便说一下
在构建容器时我也注意到了一条消息"Do not run Composer as root/super user!" . 我将 COMPOSER_ALLOW_SUPERUSER=1
添加到我的Env文件中(如here所示),但仍会显示此消息 .
是否有可能不在docker容器中以root身份执行composer install?我可以忽略那条消息吗?
菲利普,提前谢谢
2 回答
目前我正致力于以下解决方案:
开发环境:
将整个src添加为volume:
initial composer install command
install new composer package:
该软件包将通过您的composer软件包目录中的容器安装(当然默认为/ vendor),可以在您的ide中检查源代码等 .
生产环境 环境:
仅将app状态定义为volume,例如:
添加/供应商到.dockerignore
并在构建期间运行composer install
因此,您将部署预先构建的映像,但仍能够以更灵活的方式进行开发 .
这个解决方案还有两个缺点,也许有人为我输入:
1)构建变得有点慢 - 似乎作曲家缓存无法正常工作
解决方案(我不知道在编写器中是否可行)可以是作曲家缓存目录的卷 .
2)docker创建的所有包都归root所有,因此您只能使用sudo / root会话处理这些文件/文件夹 .
我不知道如何妥善解决这个问题 . 也许我可以为开发容器创建一个具有开发用户名称的用户,并让这个用户运行命令和php-fpm等...对于 生产环境 root,我猜是好的 .
我仍然是码头 Worker 的新手,并且开放以获得更好的解决方案,所以我不接受这个答案 .
UPDATED
在
Dockerfile
中在docker用户中添加新用户 . 如下如果你想创建家庭用户
要么
如果你想回到root用户,你可以这样做
两面一硬币 -
Build 图像期间是一个很好的做法,我也和你一样 .
我们将从公共存储库获得最新更新,但硬币的另一面是我们无法确保它们与我们开发的版本相同 . 你需要通过在composer.json中指定确切的版本来处理这个问题(不要使用^,*) .