【发布时间】:2015-10-28 05:27:26
【问题描述】:
我有一个项目(用 ruby 编写),我想在 docker 映像中运行它。项目源代码存储在私有 git repo 中,镜像由 Dockerfile 照常创建。项目很大,所以 git clone 需要的时间比较长。
问题是,我不确定如何(何时/何地)正确地将 git repo 克隆到 docker 映像。我可以将 git 存储库克隆到 temp 目录并通过 Dockerfile 中的 COPY 命令复制源代码。我不喜欢这样做,因为我必须在临时目录中维护第二个克隆。
或者,我可以在 docker 镜像中克隆 repo。问题是我无法合理保留在图像中的 ssh 密钥。我只能向允许访问所有内容的 git 服务器添加“我自己的”密钥。
所以,我创建了一个这样的脚本:
UUID=`uuid`
docker run \
-v $HOME/.ssh:/home/user/.ssh:ro\
--name=$UUID \
-it $1 /scripts/git-clone-update.sh
docker commit $UUID $1
docker rm $UUI
git-clone-update.sh 如果项目不存在则克隆项目,如果项目存在则更新。为此,密钥已安装到 .ssh。它工作得很好。我只需调用将图像名称作为参数传递的脚本即可轻松更新图像中的代码。唯一的问题是 Config.Cmd 总是更改为 /scripts/git-clone-update.sh。
知道如何保留原来的 Config.Cmd 吗?将私有 ropo 克隆到 docker 映像中的最佳做法是什么?
谢谢
【问题讨论】:
-
你看过官方的红宝石图片吗?它使用 ONBUILD 功能从 git 工作目录中创建图像。无需在容器内调用 git。例如,请参阅:stackoverflow.com/questions/29844622/…