【问题标题】:Self-hosted alternative to hub.docker.com?hub.docker.com 的自托管替代方案?
【发布时间】:2015-12-09 20:32:04
【问题描述】:
我想设置一个私有版本的 hub.docker.com,它可以让我创建一个由我的私有 gitlab 实例推送的 webhook。换句话说 - 当我推送到 Gitlab 时,这个 Docker 注册表会检查存储库并构建它。
我需要它来抵抗恶意 Dockerfile,这样服务器就不会被轻易破坏,从而泄露所有托管容器的内容。有什么方法可以轻松实现吗?
【问题讨论】:
标签:
docker
dockerfile
self-hosting
docker-registry
dockerhub
【解决方案1】:
您需要分别设置注册表和构建服务器。这样,当您推送到 GitLab 时,它会通知构建系统(通过 POST)并构建图像。构建完成后,最终镜像会被推送到注册表(自托管或 hub.docker.com)。
设置注册表
- 首先确保您已安装 docker。
-
然后运行以下命令,将启动注册表实例。
sudo docker run --restart='always' -d -p 5000:5000 --name=registry \
-e GUNICORN_OPTS=["--preload"] \
-v /srv/registry:/tmp/registry \
registry
-
要为上述注册表公开 Web UI,请运行以下命令。 (替换为注册中心的IP)
sudo docker run -d -P --restart='always' \
-e ENV_DOCKER_REGISTRY_HOST=<REGISTRY_IP> \
-e ENV_DOCKER_REGISTRY_PORT=5000 \
konradkleine/docker-registry-frontend
设置构建服务器
- 无处不在的 Jenkins 构建服务器可以填补这一空白。
-
您需要安装部分模拟 GitLab CI API 的 GitLab CI 插件(用于 Jenkins)。请注意,您还需要在安装后从“管理 Jenkins”->“配置系统”配置 CI 插件。请注意,未实现私有令牌功能。因此,在该字段中输入随机的内容。
-
现在您可以使用 Services -> GitLab CI 将 GitLab 存储库配置为在推送到存储库后触发 CI 事件。
请注意:我已经在 GitLab v7.7.2 上尝试过了。 AFAIK 较新的 GitLab 版本已与较早的单独 GitLab CI 交互。
-
在 jenkins 服务器上,创建一个新的 freestyle 项目或编辑一个现有项目。然后检查基于推送事件构建。
-
现在进行最后一步,将以下代码 sn-p 作为 shell 脚本执行。请注意,您需要使用不安全的注册表选项启动 docker 守护程序。参考:https://docs.docker.com/registry/insecure/
# Build and push image
cd $WORKSPACE
docker build -t <REGISTRY_IP>:5000/<PROJECT_NAME>:latest .
docker push <REGISTRY_IP>:5000/<PROJECT_NAME>:latest
或者
看看tarzan。它的工作方式与 docker hub 非常相似,但需要从 GitHub 事件(而不是 GitLab)触发。也因为没试过,所以不能保证。
我怀疑即使 tarzan 据说只适用于 GitHub,它也可能适用于 GitLab。