php – 我应该在我的docker build中运行composer install

weixin_38081011 2019-09-12 01:50:33
我可能有一个看起来像这样的docker文件: COPY . ./ RUN composer install --no-dev --no-interaction -o 但是我的composer.json中有私有存储库,这要求我复制ssh键以使docker构建正常工作.我觉得在我的php应用程序docker镜像中包装我的ssh键感到很不舒服. 或者,我可以在docker build之外运行composer install(例如在build.sh bash脚本中),并在填充vendor /之后复制目录.这是正确的方法吗? 还有其他方法可以解决这个问题吗?
...全文
56 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38098679 2019-09-12
  • 打赏
  • 举报
回复
这是一个非常好的问题,它描述了我现在面对过几次的原则,实际上是两个独立但相关的问题: 1.)如何最好地处理Docker中的瞬态文件 Docker非常擅长封装环境的全部和完全重新创建.如果您在容器“外部”处理部分进程,即在docker构建过程之外运行composer install,那么您的可移植构建过程较少,因为您可能已经引入了您不知道的机器/环境依赖性. 如果你总是在Docker中重建完整的环境,那么你可以保证你的依赖关系总是得到满足,并且你可以将dockerfile提供给其他任何人,并且他们也很有信心能够在没有问题的情况下在本地重建. 瞬态文件非常适合在Docker中构建!所以我会尝试尽可能在容器内构建它们. 2.)如何从Docker构建过程中解除授权 这引出了我们的第二个问题,如何从构建中解除授权? 选项1 – 在作曲家auth.json中为特定构建用户烘焙信用: 正如其他答案所说,您可以“烘焙”凭据,然后再次删除它们.但是你不想像你的ssh键一样“烘烤”敏感的东西.Composer支持auth.json文件,那么为什么不创建一个专用的构建用户并将其信用(而不是你的)存储在auth.json文件中?如果它受到损害,您可以更改密码.编辑器安装完成后删除或覆盖文件. COPY . ./ RUN composer install --no-dev --no-interaction -o RUN rm -f ./auth.json 选项2 – 使信用卡本身成为瞬态并使用docker exec将它们传递到Docker容器中: 我还没有完全测试过这种方法,但我不明白为什么这样的东西不起作用. 1.)你构建了一个基本的PHP容器,它能够运行’composer install'(或者使用docker hub中的一个) 2.)你旋转这个基础容器,使其运行 3.)您使用docker exec将您的信用卡传递给已经烘焙到容器中的包装脚本.包装器脚本将运行composer install使用HTTP基本身份验证 – 它已经有了用户名,因此您只需要提供http-basic technique的密码即可 docker exec -d my_base_php_container php -f /my_wrapper_script.php ${PASSWORD} 4.)您将此容器提交为新图像 docker commit --change "composer install" ${CONTAINER_ID} my_installed_image:1.0

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧