首页 文章

docker和php:将依赖项(composer)放入容器中

提问于
浏览
2

一点背景:我是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 回答

  • 0

    目前我正致力于以下解决方案:

    开发环境:

    将整个src添加为volume:

    volumes:
      - .:/app
    

    initial composer install command

    docker-compose exec app composer install
    

    install new composer package:

    docker-compose exec app composer require some/package
    

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

    生产环境 环境:

    仅将app状态定义为volume,例如:

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

    添加/供应商到.dockerignore

    并在构建期间运行composer install

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

    因此,您将部署预先构建的映像,但仍能够以更灵活的方式进行开发 .

    这个解决方案还有两个缺点,也许有人为我输入:

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

    解决方案(我不知道在编写器中是否可行)可以是作曲家缓存目录的卷 .

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

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

    我仍然是码头 Worker 的新手,并且开放以获得更好的解决方案,所以我不接受这个答案 .

    UPDATED

    Dockerfile 中在docker用户中添加新用户 . 如下

    RUN useradd -ms /bin/bash  newuser
    USER newuser
    

    如果你想创建家庭用户

    WORKDIR /home/newuser
    

    要么

    mkdir /home/newuser
    

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

    USER root
    
  • 1

    两面一硬币 -

    Build 图像期间是一个很好的做法,我也和你一样 .

    我们将从公共存储库获得最新更新,但硬币的另一面是我们无法确保它们与我们开发的版本相同 . 你需要通过在composer.json中指定确切的版本来处理这个问题(不要使用^,*) .

相关问题