注册表作为拉取缓存
用例
如果您的环境中运行着多个 Docker 实例,例如多个物理机或虚拟机都运行 Docker,则每个守护进程都会访问互联网并从 Docker 存储库获取本地没有的映像。您可以运行本地注册表镜像并将所有守护进程指向那里,以避免额外的互联网流量。
笔记
Docker 官方镜像是 Docker 的知识产权。
备择方案
或者,如果您使用的图像集被很好地界定,您可以简单地手动提取它们并将它们推送到简单的本地私有注册表。
此外,如果您的映像都是内部构建的,则根本不使用 Hub 并完全依赖本地注册表是最简单的情况。
陷阱
目前无法镜像另一个私有注册表。只有中央集线器可以被镜像。
笔记
Docker Hub 的镜像仍然遵守 Docker 的 公平使用政策。
解决方案
注册表可以配置为拉取式缓存。在此模式下,注册表响应所有正常的 docker pull 请求,但将所有内容存储在本地。
它是如何工作的?
当您第一次从本地注册表镜像请求映像时,它会从公共 Docker 注册表中提取映像并将其存储在本地,然后再将其返回给您。根据后续请求,本地注册表镜像能够从其自己的存储中提供映像。
如果 Hub 上的内容发生变化怎么办?
当尝试使用标签进行拉取时,注册表会检查远程服务器以确保其是否具有所请求内容的最新版本。否则,它会获取并缓存最新内容。
我的磁盘呢?
在高流失率的环境中,过时的数据可能会在缓存中堆积。当作为拉取缓存运行时,注册表会定期删除旧内容以节省磁盘空间。对已删除内容的后续请求会导致远程获取和本地重新缓存。
为了确保最佳性能并保证正确性,注册表缓存应配置为使用filesystem
驱动程序进行存储。
将注册表作为拉取缓存运行
将注册表作为拉取缓存运行的最简单方法是运行官方
注册表映像。至少,您需要
按照以下小节中的描述proxy.remoteurl
进行指定。/etc/docker/registry/config.yml
可以在同一个后端部署多个注册表缓存。单个注册表缓存可确保并发请求不会提取重复数据,但此属性不适用于注册表缓存集群。
笔记
使用 Docker Hub 时,所有付费 Docker 订阅仅限每天 5000 次拉取。如果您需要更多的拉取次数,您可以购买增强服务帐户附加组件。有关更多详细信息,请参阅 服务帐户。
配置缓存
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
它告诉您该文件在本地缓存中尚不存在,正在从上游拉取。