【问题标题】:Cloning private git repo in the docker container在 docker 容器中克隆私有 git repo
【发布时间】: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 映像中的最佳做法是什么?

谢谢

【问题讨论】:

标签: git docker


【解决方案1】:

正如您所发现的,将您的私有 ssh 密钥保存在 docker 映像中对安全性不利。我已经看到了两种方法:

  1. 创建一个新的只读帐户并将其密钥保存在 docker 映像中。对该帐户设置的限制越多,安全性就越好,但您仍然在实际源代码之上封装了一个秘密。

    另外,这并不能解决您的脚本问题,我承认我不知道如何解决。

  2. 使用已复制的代码托管整个打包的 docker 文件。这是 Mark O'Conner 在他的评论中提到的方法。发布的工作流程是:

    • 将代码复制到 docker 容器中。
    • 更新 docker 镜像。
    • 将新映像上传到您的 docker 存储库(例如 hub.docker.com 或 Amazon Web Services Elastic Beanstalk)。
    • 更新或启动新容器映像的新实例。

对于开发,即每天使用第二种方法,您可以有一个启动脚本,将您的代码复制到 docker 容器中,并根据需要运行或重新启动容器内的容器或服务器。或者,您可以配置一个单独的开发 docker 映像,将源代码控制目录挂载为单独的卷。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-31
    • 2013-11-07
    • 1970-01-01
    • 2019-07-22
    • 2013-08-07
    • 2022-12-20
    • 1970-01-01
    相关资源
    最近更新 更多