Dockerhub 自动构建多个私有仓库

Posted

技术标签:

【中文标题】Dockerhub 自动构建多个私有仓库【英文标题】:Dockerhub automated builds with multiple private repos 【发布时间】:2015-02-10 19:09:07 【问题描述】:

在自动 dockerhub 构建期间,有没有办法连接到多个私有 git 存储库?我们正在构建 golang 应用程序,需要“获取”其他私有仓库作为我们构建的一部分,目前它们失败了,因为 docker 无法连接到它们,只有目标私有仓库。

主仓库很好,因为部署密钥是通过 Dockerhub 安装的,但任何后续私有仓库导入都会失败。

我可以看到解决此问题的一种方法是在本地构建映像,将其“docker push”到 dockerhub,然后在部署端将其拉下,这违背了 dockerhub 和自动构建系统的目的。另一种是将 ssh 密钥烘焙到基础映像中,这不是一个好主意。

有没有人解决这个问题,不涉及将 ssh 密钥烘焙到图像中或在本地构建?

非常感谢。

【问题讨论】:

不确定:即使是 go mobile 也会先 curl 其依赖项,然后在 Dockerfile (github.com/golang/mobile/blob/master/Dockerfile) 中构建自己,如 deferpanic.com/blog/logging-panics-in-golang-on-android 中所述。 您可以在某种 CI 服务器上进行构建,例如 CircleCI。我在他们的服务上构建图像并推送到 Docker Hub 方面有很好的经验。我想可以集成多个 repos,但我从未尝试过。 【参考方案1】:

单个 ssh 密钥

如果您只有一个ssh-key,那么将其添加到 Docker 容器 (/root/.ssh/id_rsa) 中的 root ssh-path 应该足以成功提取您的存储库。取决于您的私人仓库在哪里,您可能应该在.ssh 中添加一些其他配置。

多个 ssh 密钥

如果你有不同的ssh-keys 我建议你为你的所有回购创建一个个人令牌。这样您就可以轻松解决问题。您应该在获取之前更新git-url:

[取自这里:https://gist.github.com/shurcooL/6927554]

git config --global url."https://$GITHUB_TOKEN:x-oauth-basic@github.com/".insteadOf "https://github.com/"

通过此更改,您应该能够成功构建您的 docker-container。


使用vendor-工具可以帮助您解决这个问题。来自go1.5 的供应商功能可供使用。我们使用的是Glide,它只存储引用(而不是整个项目)。

【讨论】:

这样安全吗?你的 ssh 密钥会被泄露吗? @AleksandarJovanovic 如果有人可以访问 docker 容器,是的,潜在的攻击者可以窃取您的 ssh 密钥。这取决于您在容器和“托管”容器的主机上添加的安全层。为了减少窃取 ssh 密钥的机会,您可以在容器启动时将其删除

以上是关于Dockerhub 自动构建多个私有仓库的主要内容,如果未能解决你的问题,请参考以下文章

GitHub + circleCI 自动构建/自动部署 应用

GitHub + circleCI 自动构建/自动部署 应用

使用GitHub Actions自动构建DockerHub镜像

使用Github自动构建Docker

docker commit构建镜像(不推荐)

自动化部署之Maven的私有仓库Nexus