Docker注册表和索引

时间:2014-06-14 11:12:20

标签: docker docker-registry

美好的一天!

我看了很多关于docker注册表的信息,但仍然有一些问题...请帮助我理解关于索引和注册表的一些事情。

  1. 我已为私有存储库安装了docker-registry。我使用独立模式是真的。据我所知,docker注册表无法对用户进行身份验证 - 它会要求索引权限和身份验证。因此,我禁用了独立模式,因此docker-registry需要通过index.docker.io对我进行身份验证,但它不起作用 - 注册表允许我推送和拉出我想要的任何图像。所以问题是 - 为什么docker-registry不会尝试通过i对我进行身份验证 index.docker.io?

  2. 如果docker-registry通过index.docker.io对我进行身份验证,那么存储授权参数的位置是什么?我的意思是,如果我想授予用户vozerov仅推送到private.repo.domain:5000 / vozerov存储库。

  3. Docker搜索索引。因此,如果我想在我的私有存储库中搜索我的图像,我需要告诉index.docker.io有新的私有存储库。它是真的还是我说错了?

  4. 我在github找到了docker-index项目 - https://github.com/ekristen/docker-index。它是index.docker.io的替代品。那么,如果我安装它,登录它,docker搜索命令搜索我的私有索引或通过index.docker.io?

  5. UPD

    今晚我在docker-registry上工作了很多,所以我有点困惑:

    1. 如果独立模式为true,则不使用disable_token_auth 任何变种。所以我们可以:

      1.1使用此repo而不使用auth(对所有人提取和推送权限)。

      1.2使用nginx和docker登录my.registry.com的基本身份验证,因此每个拥有基本身份验证信息的用户都可以推送。因此,我们在这种模式下没有授权。

    2. 如果独立模式为false,则docker-registry需要与index.docker.io通信,但它没有。两种变体:

      2.1。如果disable_auth_token为true - 我得到405错误(方法不允许),但这意味着我允许任何人推或拉图像?

      2.2。如果disable_auth_token为false - 我得到405错误......

    3. 对于2.1和2.2 docker登录my.registry.com无法正常工作 - 它向我显示404错误......也许这是我的错误配置?

3 个答案:

答案 0 :(得分:1)

  

1.我已为私有存储库安装了docker-registry。我使用独立模式是真的。据我所知,docker注册表无法对用户进行身份验证 - 它会要求索引权限和身份验证。因此,我禁用了独立模式,因此docker-registry需要通过index.docker.io对我进行身份验证,但它不起作用 - 注册表允许我推送和拉出我想要的任何图像。所以问题是 - 为什么docker-registry没有尝试通过i index.docker.io来验证我?

您设置的私有docker注册表没有身份验证,因为您没有设置它。您必须使用nginx作为反向代理来设置身份验证,并且由于docker客户端不支持没有SSL的基本身份验证,您还必须在反向代理上设置SSL。

当您推或拉时,您正在使用泊坞窗客户端。它可以连接到您设置的任何注册表,私有注册表以及docker hub。以下几点需要考虑:

  • 当您从泊坞窗客户端启动泊坞窗搜索时,它将默认搜索泊坞窗群集,并且只要它是公开的,您就可以从中拉出任何图像。

  • 需要登录才能在Docker Hub中推送图像。

  • 现在,如果要搜索私有docker注册表,则必须告知docker客户端以下列格式搜索该注册表:

      docker search private.repo.domain:5000/vozerov 
    
  • 现在,根据您实际想要搜索的注册表,如果您使用反向代理设置它,您的私人注册表将需要它自己的身份验证,如果您使用docker hub,则需要您登录想用它来推送图像。

  • 您可以推/拉/搜索的原因是因为您可能只是通过指定domain_name:port / image_name告诉docker客户端在您的私有注册表中执行这些操作,即使您没有指定默认情况下使用Docker Hub,除非您尝试推送图像,否则不会遇到身份验证问题。

  

2.如果docker-registry通过index.docker.io对我进行身份验证,那么存储授权参数的位置是什么?我的意思是,如果我想授予用户vozerov仅推送到private.repo.domain:5000 / vozerov存储库。

  • 授权参数存储在docker客户端计算机上的以下文件中(它是一个隐藏文件,因此请使用ls -la)。文件名为:" .dockercfg"

  • 在该文件中,您可以找到您尝试成功登录的注册管理机构的登录凭据详细信息:

    {
            "your_domain.com": {
                    "auth": "dXNlcjE6cGFzc3dvcmQxMjM="
                    "email": ""
    }
    
  • " auth"是您的基本64位编码(用户名:密码)凭据

  • Docker私有注册表仅提供登录(在反向代理的帮助下)。如果您想要一个完整的基于用户的身份验证/授权或访问控制系统,您可以查看Artifactory或核心OS企业注册表等解决方案

  

3.Docker搜索索引。因此,如果我想在我的私有存储库中搜索我的图像,我需要告诉index.docker.io有新的私有存储库。它是真的还是我说错了?

  • Docker客户端搜索index.io,如果您没有指定希望它搜索您的私人注册表。这是docker的默认行为。您的私人码头注册表完全独立于官方docker索引,与它无关。如果要在Docker客户端中搜索私有注册表,可以使用以下命令:native / curl:
  • 使用curl(apt-get install jq):

    curl -s -X GET http://private.repo.domain:5000/v1/search | jq '.results[].name'
    
  • 使用泊坞搜索:

    docker search private.repo.domain:5000/<search_keyword>
    
  

4.我在github找到了docker-index项目 - https://github.com/ekristen/docker-index。它是index.docker.io的替代品。那么,如果我安装它,登录它,docker搜索命令搜索我的私有索引还是通过index.docker.io?

  • 看起来这个项目正在停止,因为Docker正在推出一个新的注册表。从来没有真正尝试过,所以我不知道它搜索的是哪个注册表。我认为这是你与私有注册表集成的东西,因为Docker Hub已经拥有它自己的索引,所以如果我猜测它会搜索你的私人注册表。

答案 1 :(得分:0)

如果您想要对您的私人注册表进行身份验证(和加密),那么您需要将nginx或apache作为代理放在docker前面,并在那里使用http身份验证和SSL终止。

据我所知,没有办法让docker搜索命令搜索您的私人注册表。该命令仅搜索Docker Hub。

答案 2 :(得分:-1)

Docker注册表管理docker-images。 Docker索引管理身份验证。 Docker注册表是open source,而Docker索引不是开源的。

如果部署docker-registry,则必须对其进行身份验证。

Docker索引可以为您提供私有的docker-registry,请检查this