作为拉取缓存的镜像库

预计阅读时间: 1 分钟

应用场景

如果您的环境中有多个 Docker 实例正在运行(例如,多个物理或虚拟机,全部都运行 Docker 守护进程),每次其中一个实例需要它没有的镜像时,它将访问互联网并从公用 Docker 镜像库获取镜像。通过运行本地的镜像库服务, 您可以在本地网络中保留大多数冗余镜像获取流量。

替代方法

或者,如果要使用的一组镜像进行了明确的定界,您可以手动拉取它们并推送到简单的本地专用镜像库。

另外,如果您的镜像全部是在内部构建的,而不使用 Hub,完全依赖您的本地镜像库是最简单的方案。

Gotcha

当前无法生成另一个专用镜像库的镜像。只能生成中央 Hub 的镜像。

解决方案

可以将镜像库配置为拉取缓存。在此模式下,镜像库会对所有正常的 docker 拉取请求做出响应,但会在本地存储所有内容。

它如何工作?

您首次通过本地镜像库服务请求镜像时,它会从公用 Docker 镜像库中拉取镜像并将其存储在本地,然后再回传给您。在后续请求中,本地镜像库服务可以从它自己的存储器中提供镜像。

如果内容在 Hub 上发生更改会出现什么情况?

使用标签尝试进行拉取时,镜像库将检查远程以验证它是否具有所请求内容的最新版本。如果没有最新内容,它将获取最新内容并对其进行缓存。

我的磁盘怎么样?

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

如需确保最佳性能并保证正确性,应将镜像库缓存配置为将 filesystem 驱动用于存储。

以拉取缓存方式运行镜像库

以拉取缓存方式运行镜像库的最简单方法是运行官方镜像库镜像。

可以在同一后端上部署多个镜像库缓存。单个镜像库缓存将确保并发请求不会拉取重复数据,但对于镜像库缓存集群,此属性不会保持为 true。

配置缓存

如需将镜像库配置为以拉取缓存形式运行,必须向配置文件中添加 proxy 部分。

为了访问 Docker Hub 上的专用镜像,可以提供用户名和密码。

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

警告:如果您指定了用户名和密码,必须了解 此用户可以访问的专用资源,Docker Hub 将 在您的镜像中提供。如果您期望这些资源保持为专用资源,必须通过 实施身份验证来保护镜像

警告:为了让调度器清除旧条目,必须在 镜像库配置中启用 delete。请参阅 镜像库配置,以获取更多详细信息。

配置 Docker 守护进程

手动启动 dockerd 时传递 --registry-mirror 选项,或者编辑 /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`

它告诉您此文件不存在于本地缓存中并且 将从上游拉取。

应用场景:中国的镜像库镜像

中国的镜像库镜像的 URL 为 registry.docker-cn.com。您可以从此镜像中拉取镜像,如同您通过在 docker pull 命令中指定完整路径(包括镜像库)来为其他镜像库执行的操作一样,例如:

$ docker pull registry.docker-cn.com/library/ubuntu

您可以使用 --registry-mirror 启动参数配置 Docker 守护进程:

$ docker --registry-mirror=https://registry.docker-cn.com -d

或者,默认情况下,您可以将“https://registry.docker-cn.com”添加到 /etc/docker/daemon.json 中的 registry-mirrors 组,以便从中国的镜像库镜像中进行拉取。

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

保存文件并重启 Docker 以使更改生效。

镜像库, on-prem, 镜像, 标签, 镜像仓库, 分发版, 镜像, Hub, 空白, 高级