gpt4 book ai didi

php - docker 和 PHP : getting dependencies (composer) into the container

转载 作者:可可西里 更新时间:2023-11-01 01:13:11 25 4
gpt4 key购买 nike

一点背景:我是 docker 的新手,还不知道任何最佳实践。我的任务是创建一个基于 php 的网络服务,我决定使用 docker-compose 进行配置。

因为我们都是花哨的开发人员,所以我们知道 - 如今不使用 composer 就无法构建 php 应用程序。

我的问题:

我应该在构建中安装依赖项吗?因此,将其添加到我的 Dockerfile 中:

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

或者我应该在开发期间安装依赖项并使用包含的依赖项构建容器镜像吗?


我只知道一种不这样做的方法:在开发机器上本地安装依赖项,然后构建容器。但是“最佳实践”会是什么样子呢?

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

顺便说一下

我还注意到一条消息“不要以根/ super 用户身份运行 Composer!”构建容器时。我将 COMPOSER_ALLOW_SUPERUSER=1 添加到我的 Env 文件中(如 here 所示),但此消息仍然出现。

是否可以在 docker 容器中不以 root 身份执行 composer install?我可以忽略该消息吗?

提前致谢,菲利普

最佳答案

目前我正在努力实现以下解决方案:

开发环境:

将整个 src 添加为卷:

volumes:
- .:/app

初始 Composer 安装命令

docker-compose exec app composer install

安装新的 Composer 包:

docker-compose exec app composer require some/package

包将通过容器安装在您的 composer 包目录(当然默认为/vendor),源代码可以在您的 ide 等中检查。

生产环境:

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

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

将/vendor 添加到 .dockerignore

并在构建期间运行 composer install

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

因此,您将拥有要部署的预构建镜像,但仍能够以更敏捷的方式进行开发。

这个解决方案还有两个缺点,也许有人为我提供了意见:

1) 构建变得有点慢 - composer 缓存似乎无法正常工作

一个解决方案(我不知道这在 composer 中是否可行)可以是 composer 缓存目录的卷。

2) docker 创建的所有包都归 root 所有,因此您只能使用 sudo/root session 处理这些文件/文件夹。

我不知道如何正确解决这个问题。也许我可以为开发容器创建一个具有开发用户名称的用户,并让该用户运行命令和 php-fpm 等...我想对于生产 root 是可以的。

我对 docker 还是很陌生,并且愿意寻求更好的解决方案,所以我不会接受这个答案。

已更新

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

RUN useradd -ms /bin/bash  newuser
USER newuser

如果你也想创建家庭用户

WORKDIR /home/newuser

mkdir /home/newuser

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

USER root

关于php - docker 和 PHP : getting dependencies (composer) into the container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47548150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com