Docker注册表和索引

美好的一天!

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

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

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

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

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

UPD

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

  • 如果独立模式为true,则不在任何变体中使用disable_token_auth . 所以我们可以:

1.1使用此repo而不使用auth(对任何人提取和推送权限) .

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

  • 如果独立模式为false,则docker-registry需要与index.docker.io进行通信,但事实并非如此 . 两种变体:

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

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

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

回答(3)

2 years ago

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

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

当您推或拉时,您正在使用docker客户端 . 它可以连接到您设置的任何注册表,私有注册表以及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已经拥有它自己的索引,所以如果我猜测它会搜索你的私人注册表 .

2 years ago

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

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

2 years ago

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

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

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