《60天AI学习计划启动 | Day 57: 长文技术总结输出(博客 / 文章)》
2025/12/17 14:31:56
#作者:西门吹雪
registry-mirrors后,开发者仍使用原有镜像名与工作流,无需更改命令,实现“无感化”加速。docker.io(Docker Hub)上游的缓存与加速,包含原理、部署、客户端配置、验证与排错;最后附上对“多上游仓库”的建议。+------------------+ +-------------------------+ +-------------------------+ | Docker 客户端 | 拉取 | 本地 Registry (缓存) | 未命中 | Docker Hub (docker.io)| | docker pull X +---------> http://<cache>:5000 +----------> registry-1.docker.io | | | | /var/lib/registry | | | | 第二次 pull | 命中 | 命中本地缓存直接返回 | | | +------------------+ +-------------------------+ +-------------------------+manifests与blobs持久化到本地。/var/lib/registry/docker/registry/v2/,包括:blobs/sha256/...(内容寻址存储)repositories/<namespace>/<name>/_manifests/...(清单、标签索引)文件:/Users/user/docker/config.yml(参考:/Users/userhome/docker/config.yml:10-11)
version:0.1log:level:infostorage:filesystem:rootdirectory:/var/lib/registryhttp:addr::5000proxy:remoteurl:https://registry-1.docker.ioproxy.remoteurl指向 Docker Hub 上游。storage.filesystem.rootdirectory为缓存落盘目录。示例文件(稳定版镜像):
services:registry:image:registry:2container_name:registry-proxyports:-"5000:5000"volumes:-/Users/userhome/docker/config.yml:/etc/docker/registry/config.yml-/Volumes/DockerSystem/registry:/var/lib/registryenvironment:HTTP_PROXY:"http://<proxy_host>:<proxy_port>"HTTPS_PROXY:"http://<proxy_host>:<proxy_port>"NO_PROXY:"localhost,127.0.0.1,registry-proxy,192.168.3.0/24,192.168.123.0/24,172.16.0.0/12,192.168.0.0/16"restart:unless-stoppedHTTP_PROXY/HTTPS_PROXY/NO_PROXY:让容器能通过公司代理访问上游;必要时注入公司 CA 并信任。registry:2。不使用registry:3192.168.3.7,下面会引用,确保客户端能访问该IP。启动与日志:
docker compose up -d docker compose logs -fgrafana/grafana:12.0.0),由引擎透明转发到你的缓存注册表。/etc/docker/daemon.json):{"registry-mirrors":["http://192.168.3.7:5000"],"insecure-registries":["192.168.3.7:5000","localhost:5000"]}重启引擎:
sudosystemctl restart docker{"registry-mirrors":["http://192.168.3.7:5000"],"insecure-registries":["192.168.3.7:5000","localhost:5000"]}点击 Apply & Restart。
docker pull grafana/grafana:12.0.0时,引擎将对docker.io的请求透明转发到你的缓存注册表。docker build、Dockerfile中的FROM alpine:latest等场景全部保持原样;对开发者“无感”。curlhttp://localhost:5000/v2/# 应返回 200 OKlibrary/前缀):docker pull grafana/grafana:12.0.0# 无感模式(通过 registry-mirrors)# 或显式前缀(直接走你的缓存注册表)docker pull localhost:5000/grafana/grafana:12.0.0library/前缀):docker pull alpine:latest# 无感模式docker pull localhost:5000/library/alpine:latestcurl-s http://localhost:5000/v2/_catalogcurl-s http://localhost:5000/v2/grafana/grafana/tags/listcurl-s http://localhost:5000/v2/library/alpine/tags/list/Volumes/DockerSystem/registry/docker/registry/v2/ ├── blobs/sha256/... └── repositories/grafana/grafana/_manifests/tags/12.0.0/.../var/lib/registry映射到宿主机 SSD 目录,避免容器重建导致缓存丢失。REGISTRY_PROXY_USERNAME/REGISTRY_PROXY_PASSWORD使用有额度账号。registry:2优先。registry:3使用中遇到问题。insecure-registries时做好边界控制。proxy.remoteurl仅能指向一个上游。ghcr.io、quay.io等:# 启动与日志docker compose up -d docker compose logs -f# 健康检查curlhttp://localhost:5000/v2/# 拉取(无感模式)docker pull grafana/grafana:12.0.0# 拉取(显式前缀)docker pull localhost:5000/grafana/grafana:12.0.0 docker pull localhost:5000/library/alpine:latest# 查看标签curl-s http://localhost:5000/v2/grafana/grafana/tags/listcurl-s http://localhost:5000/v2/library/alpine/tags/list