hub.docker.com的自托管替代方案?

时间:2015-12-09 20:32:05

标签: docker dockerfile self-hosting docker-registry dockerhub

我想设置一个私有版本的hub.docker.com,让我创建一个由我的私有gitlab实例推送的webhook。换句话说 - 当我推送到Gitlab时,这个Docker注册表会检查存储库并构建它。

我需要这样才能抵御恶意Dockerfiles,这样服务器就不会轻易受到攻击,泄露所有托管容器的内容。有没有办法轻松实现这个目标?

2 个答案:

答案 0 :(得分:5)

您需要单独单独设置注册表和构建服务器。这样,当您推送到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)。请注意,您需要在安装后从&#34; Manage Jenkins&#34;安装CI插件。 - &GT; &#34;配置系统&#34;。请注意,未实现私有令牌功能。因此,在该字段中输入随机内容。

    <小时/> enter image description here

  • 现在,您可以使用服务 - &gt;配置GitLab回购以在推送到回购后启动CI事件 GitLab CI
    请注意:我在GitLab v7.7.2上试过这个。 AFAIK较新的GitLab版本已经与早期的单独GitLab CI进行了交互。

    <小时/> enter image description here

  • 在jenkins服务器上,创建一个新的自由式项目或编辑现有项目。然后检查 Build on Push Events

    <小时/> Gitlab CI Push

  • 现在,最后一步,执行以下代码片段作为shell脚本。请注意,您需要使用insecure注册表选项启动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。

答案 1 :(得分:0)

为帮助将来的访问者,gitlab现在有一个内置的docker image repo(如果不是在2015年)。 https://docs.gitlab.com/ee/user/project/container_registry.html