我可能有一个看起来像这样的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