注册表作为通过缓存

预计阅读时间:4分钟

该页面包含有关使用开源Docker Registry托管自己的注册表的信息。有关Docker Hub的信息,它提供了托管注册表以及其他功能,例如团队,组织,Web挂钩,自动构建等,请参阅Docker Hub

用例

如果您的环境中运行着多个Docker实例,例如都在运行Docker的多个物理或虚拟机,则每个守护程序都将访问Internet,并从Docker存储库中获取本地没有的映像。您可以运行本地注册表镜像,并将所有守护程序指向该目录,以免产生额外的互联网流量。

笔记

Docker Official Images是Docker的知识产权。未经事先同意而将Docker官方映像分发给第三方可能会违反Docker服务条款

备择方案

另外,如果您正在使用的图像集是有界的,则可以简单地手动拉出图像并将其推送到简单的本地专用注册表中。

此外,如果映像全部是内部生成的,则最简单的情况是完全不使用集线器,而完全依赖于本地注册表。

Gotcha

当前无法镜像另一个私有注册表。只有中央集线器可以镜像。

笔记

Docker Hub的镜像仍受Docker合理使用政策的约束。

解决方案

注册表可以配置为通过缓存。在这种模式下,注册表会响应所有正常的docker pull请求,但会将所有内容存储在本地。

它是如何工作的?

第一次从本地注册表镜像请求映像时,它会从公共Docker注册表中提取该映像并将其存储在本地,然后再将其返回给您。根据后续请求,本地注册表镜像能够从其自己的存储中提供映像。

如果集线器上的内容发生更改怎么办?

尝试使用标签进行拉取时,注册表会检查遥控器,以确保其是否具有所请求内容的最新版本。否则,它将获取并缓存最新内容。

那我的磁盘呢?

在高流失率的环境中,过时的数据可能会在缓存中累积。当作为拉入式缓存运行时,注册表会定期删除旧内容以节省磁盘空间。后续对已删除内容的请求将导致远程获取和本地重新缓存。

为了确保最佳性能和正确性,应将注册表缓存配置为使用filesystem驱动程序进行存储。

将注册表作为穿梭式缓存运行

将注册表作为拉入式缓存运行注册表的最简单方法是运行正式的注册表映像。至少,你需要指定proxy.remoteurl范围内/etc/docker/registry/config.yml 如下面的小节中描述。

可以在同一后端上部署多个注册表缓存。单个注册表缓存可确保并发请求不会提取重复数据,但是此属性对于注册表缓存群集不适用。

配置缓存

要将注册表配置为作为拉入式缓存运行,proxy需要在配置文件中添加一个 部分。

要访问Docker Hub上的私有映像,可以提供用户名和密码。

proxy:
  remoteurl: https://registry-1.docker.io
  username: [username]
  password: [password]

警告:如果您指定用户名和密码,那么一定要了解您的镜像上是否可以使用此用户可以访问Docker Hub的私有资源,这一点非常重要。如果您希望这些资源保持私有状态,则必须通过实施身份验证来保护镜像

警告:要让调度程序清除旧条目,delete必须在注册表配置中启用它。有关更多详细信息,请参见 注册表配置

配置Docker守护程序

手动--registry-mirror启动时传递选项dockerd,或者编辑/etc/docker/daemon.json 并添加registry-mirrors键和值以使更改永久生效。

{
  "registry-mirrors": ["https://<my-docker-mirror-host>"]
}

保存文件并重新加载Docker以使更改生效。

一些看似错误的日志消息实际上是参考消息。

检查该level字段,以确定该消息是警告您有关错误还是正在提供信息。例如,此日志消息是参考性的:

time="2017-06-02T15:47:37Z" level=info msg="error statting local store, serving from upstream: unknown blob" go.version=go1.7.4

它告诉您该文件在本地缓存中尚不存在,并且正在从上游拉出。

注册表本地图像标签存储库分发镜像Hub配方高级