一点上下文:我是Docker的新手,尚不知道任何最佳实践。我的任务是基于PHP创建一个Web服务,我决定使用Docker-Compose进行配置。
因为我们知道我们都是花哨的开发人员 - 如今,不使用作曲家就无法建立PHP应用程序。
我的问题:
我应该在构建中安装依赖项吗?因此,通过将其添加到我的Dockerfile:
RUN cd /app && composer install --no-interaction --prefer-source --optimize-autoloader
或我应该在开发过程中安装依赖项并构建具有依赖关系的容器图像?
我只知道一种不做的方法:在开发机上本地安装依赖项,然后构建容器。但是"最佳练习"将如何?
和 - 因为我是该领域的新鸟 - 我如何为我的应用服务容器运行"作曲家需要/包装"?
顺便说一句
我还注意到一条消息"不要将作曲家作为根/超级用户!"构建容器时。我在我的env文件中添加了 COMPOSER_ALLOW_SUPERUSER=1
(如下所示),但是此消息仍然出现。
是否可以不执行作曲家在Docker容器中以根的安装?我可以忽略该消息吗?
预先感谢菲利普
目前我正在为以下索引工作:
开发环境:
将整个SRC添加为卷:
volumes:
- .:/app
初始作曲家安装命令
docker-compose exec app composer install
安装新作曲家软件包:
docker-compose exec app composer require some/package
该软件包将通过您的Composer软件包目录中的容器安装(默认情况下为/供应商),可以在IDE中检查源代码,等等。
。生产环境:
仅定义为卷的应用程序状态,例如:
volumes:
- public/uploads:/app/public/uploads
添加/供应商到.dockerignore
和运行作曲家在构建期间安装
RUN cd /app && composer install --no-dev --no-interaction --optimize-autoloader
因此,您将有一个预部构建的图像可以部署,但仍然能够以更敏捷的方式开发。
此解决方案中仍然有两个缺点,也许有人为我提供输入:
1)构建变得有点慢 - 似乎作曲家缓存无法正常工作
解决方案(我不知道在作曲家中是否可以使用)可能是作曲家高速缓存目录的卷。
2)Docker创建的所有软件包均由Root拥有,因此您只能使用Sudo/root Session上的这些文件/文件夹。
我不知道如何正确修复此问题。也许我可以为开发容器的开发用户名创建一个用户,并具有此用户运行命令和php-fpm等。
我仍然是Docker的新手,并为更好的解决方案开放,所以我不会接受此答案。
更新
在Dockerfile
中的Docker用户中添加新用户。如下
RUN useradd -ms /bin/bash newuser
USER newuser
如果您想创建家庭用户
WORKDIR /home/newuser
或
mkdir /home/newuser
如果您想返回root用户,可以做
USER root
a-coin的两侧 -
在构建图像期间做的一个很好的做法,我也与您相同。
我们将从公共存储库中获得最新更新,但硬币的另一面是我们不能确保它们与开发的版本相同。您需要通过在Composer.json中指定精确版本来处理此操作(请勿使用 ^, *)。