Phi*_*ann 6 php composer-php docker docker-compose devops
一点背景:我是 docker 新手,还不知道任何最佳实践。我的任务是创建一个基于 php 的网络服务,我决定使用 docker-compose 进行配置。
因为我们都是优秀的开发人员,所以我们知道 - 现在没有使用 Composer 构建 php 应用程序的方法。
我应该在构建中安装依赖项吗?因此,通过将其添加到我的 Dockerfile 中:
RUN cd /app && composer install --no-interaction --prefer-source --optimize-autoloader
Run Code Online (Sandbox Code Playgroud)
或者我应该在开发过程中安装依赖项并构建包含依赖项的容器映像?
我只知道一种不这样做的方法:在开发机器上本地安装依赖项,然后构建容器。但是“最佳实践”会是什么样子呢?
而且 - 因为我是这个领域的新手 - 我将如何为我的应用程序服务容器运行“composer require some/package”?
我还注意到一条消息“不要以 root/超级用户身份运行 Composer!” 在构建容器时。我添加COMPOSER_ALLOW_SUPERUSER=1到我的 Env 文件(如这里所示),但此消息仍然出现。
是否可以不在 docker 容器中以 root 身份执行 composer install?我可以忽略该消息吗?
提前致谢,菲利普
目前我正在努力实现以下解决方案:
将整个 src 添加为音量:
volumes:
- .:/app
Run Code Online (Sandbox Code Playgroud)
初始作曲家安装命令
docker-compose exec app composer install
Run Code Online (Sandbox Code Playgroud)
安装新的作曲家包:
docker-compose exec app composer require some/package
Run Code Online (Sandbox Code Playgroud)
该包将通过您的 Composer 包目录中的容器安装(当然默认为 /vendor),可以在您的 ide 中检查源代码等。
仅定义为音量的应用程序状态,例如:
volumes:
- public/uploads:/app/public/uploads
Run Code Online (Sandbox Code Playgroud)
将 /vendor 添加到 .dockerignore
并在构建期间运行 composer install
RUN cd /app && composer install --no-dev --no-interaction --optimize-autoloader
Run Code Online (Sandbox Code Playgroud)
因此,您将拥有一个预构建的映像来部署,但仍然能够以更敏捷的方式进行开发。
一个解决方案(我不知道这在作曲家中是否可行)可能是作曲家缓存目录的卷。
我不知道如何正确解决这个问题。也许我可以为开发容器创建一个具有 dev 用户名称的用户,并让这个用户运行命令和 php-fpm 等......我猜对于生产 root 来说没问题。
我对 docker 还是很陌生,并愿意寻求更好的解决方案,所以我不会接受这个答案。
更新
在 docker 用户中添加新用户Dockerfile。如下
RUN useradd -ms /bin/bash newuser
USER newuser
Run Code Online (Sandbox Code Playgroud)
如果您也想创建家庭用户
WORKDIR /home/newuser
Run Code Online (Sandbox Code Playgroud)
或者
mkdir /home/newuser
Run Code Online (Sandbox Code Playgroud)
如果你想回到 root 用户,你可以这样做
USER root
Run Code Online (Sandbox Code Playgroud)
Agg*_* .J -1
硬币的两面——
在构建图像期间这是一个很好的做法,我也和你一样。
我们将从公共存储库获取最新更新,但硬币的另一面是我们无法确保它们与我们开发的版本相同。你需要通过在composer.json中指定确切的版本来处理这个问题(不要使用^,*)。
| 归档时间: |
|
| 查看次数: |
4540 次 |
| 最近记录: |