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

前端之家收集整理的这篇文章主要介绍了php – 我应该在我的docker build中运行composer install前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我可能有一个看起来像这样的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 /之后复制目录.这是正确的方法吗?

还有其他方法可以解决这个问题吗?

最佳答案
这是一个非常好的问题,它描述了我现在面对过几次的原则,实际上是两个独立但相关的问题:

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

猜你在找的Docker相关文章