使用Docker Registry容器搭建Docker镜像加速服务
summary
使用Docker Registry容器,可以搭建一个私有的Docker镜像加速服务。通过安装Docker、创建Registry容器、配置Docker客户端使用自建Registry作为镜像源,用户可以实现镜像的加速和本地缓存。支持对Docker Hub等上游仓库的代理缓存,并提供多种存储后端和安全配置选项,以满足不同需求。
date
Sep 5, 2025 03:57 PM
slug
docker-registry-acceleration
status
Published
type
Post
tags
Docker
https://www.wanpeng.life/2826.html
要使用 Docker Registry 容器搭建自己的 Docker 镜像加速服务,可以按照以下步骤进行操作:
1. 安装 Docker
首先确保你的系统上已经安装了 Docker。如果没有安装,可以参考官方文档或相关教程进行安装。
2. 创建 Docker Registry 容器
使用 Docker 官方提供的 registry 镜像来创建私有仓库。可以通过以下命令启动一个 registry 容器:
- -d:后台运行容器。
- -p 5000:5000:将容器的 5000 端口映射到主机的 5000 端口。
- --restart=always:确保容器在重启后自动启动。
- --name registry:为容器指定名称。
- registry:2:使用的镜像版本。
如果需要将镜像数据存储在主机的指定目录,可以使用 -v 参数进行挂载:
3. 配置镜像加速
为了实现镜像加速,需要配置 Docker 客户端使用自建的 registry 作为镜像源。编辑或创建 /etc/docker/daemon.json 文件,添加如下内容:
例如,如果服务器 IP 是 192.168.1.100,则配置如下:
保存文件后,重启 Docker 服务以使配置生效:
4. 配置代理(可选)
如果需要代理加速,可以在启动 registry 容器时设置环境变量 REGISTRY_PROXY_REMOTEURL,指向上游镜像源。例如,使用 Docker Hub 作为上游镜像源:
5. 使用 Docker Compose(可选)
为了简化配置和管理,可以使用 Docker Compose。创建一个 docker-compose.yml 文件,内容如下:
然后使用以下命令启动服务:
6. 验证配置
可以通过以下命令验证配置是否成功:
在输出信息中查找 Registry Mirrors 部分,确认配置的镜像加速地址已经生效。
7. 推送和拉取镜像
现在可以将镜像推送到私有仓库,并从私有仓库拉取镜像。例如,推送一个本地镜像到私有仓库:
拉取镜像时,同样需要指定私有仓库地址:
通过以上步骤,你就可以成功搭建并使用自己的 Docker 镜像加速服务了。
在搭建 Docker Registry 作为私有镜像仓库或加速服务时,可以通过 环境变量 来配置其行为。以下是常用的环境变量及其说明:
1. 基础配置
环境变量 | 默认值 | 说明 |
REGISTRY_HTTP_ADDR | :5000 | Registry 监听的地址和端口(格式 [host]:port)。 |
REGISTRY_HTTP_NET | tcp | 网络协议(tcp、unix)。 |
REGISTRY_HTTP_HOST | "" | HTTP 服务器的主机名(用于 URL 生成)。 |
REGISTRY_HTTP_SECRET | "" | JWT(JSON Web Token)签名密钥(用于安全通信)。 |
REGISTRY_HTTP_DEBUG_ADDR | "" | Debug/pprof HTTP 服务器地址(如 :6060)。 |
示例:
2. 存储后端
Registry 支持多种存储后端(如文件系统、S3、Azure Blob、Google Cloud Storage),相关环境变量如下:
文件系统存储(默认)
环境变量 | 默认值 | 说明 |
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY | /var/lib/registry | Registry 存储数据的根目录。 |
示例:
Amazon S3
环境变量 | 说明 |
REGISTRY_STORAGE=s3 | 使用 S3 存储。 |
REGISTRY_STORAGE_S3_ACCESSKEY | AWS Access Key ID。 |
REGISTRY_STORAGE_S3_SECRETKEY | AWS Secret Access Key。 |
REGISTRY_STORAGE_S3_REGION | S3 Bucket 所在区域(如 us-east-1)。 |
REGISTRY_STORAGE_S3_BUCKET | S3 Bucket 名称。 |
示例:
3. 认证与安全
基本认证(Basic Auth)
环境变量 | 说明 |
REGISTRY_AUTH=htpasswd | 启用 HTTP Basic Auth。 |
REGISTRY_AUTH_HTPASSWD_REALM | Realm(如 Registry Realm)。 |
REGISTRY_AUTH_HTPASSWD_PATH | .htpasswd 文件路径(存储用户名密码)。 |
示例:
TLS/HTTPS
环境变量 | 说明 |
REGISTRY_HTTP_TLS_CERTIFICATE | TLS 证书路径(.crt)。 |
REGISTRY_HTTP_TLS_KEY | TLS 私钥路径(.key)。 |
示例:
4. Redis 缓存
Registry 支持 Redis 缓存以提升性能:
环境变量 | 说明 |
REGISTRY_REDIS_ADDR | Redis 服务器地址(如 redis:6379)。 |
REGISTRY_REDIS_PASSWORD | Redis 密码(可选)。 |
示例:
5. Proxy 模式(镜像加速)
Registry 可以作为代理缓存上游仓库(如 Docker Hub)的镜像:
环境变量 | 说明 |
REGISTRY_PROXY_REMOTEURL | 上游仓库地址(如 [https://registry-1.docker.io](https://registry-1.docker.io))。 |
REGISTRY_PROXY_USERNAME | (可选)上游仓库用户名。 |
REGISTRY_PROXY_PASSWORD | (可选)上游仓库密码或 Token。 |
示例:
6. Garbage Collection(垃圾回收)
Registry 会积累未引用的数据,可以定期清理:
环境变量 | 说明 |
REGISTRY_STORAGE_DELETE_ENABLED=true | 允许删除镜像(默认 false)。 |
手动清理:
总结
通过环境变量可以灵活配置 Docker Registry:
- 存储方式(本地、S3、Azure、GCS)
- 认证方式(Basic Auth、TLS)
- 缓存优化(Redis)
- 代理模式(镜像加速)
- 垃圾回收
你可以根据需求组合这些配置,搭建高性能、安全的私有 Docker Registry。
Docker Registry Proxy 模式详解
Proxy 模式允许 Docker Registry 作为上游仓库(如 Docker Hub)的缓存代理,实现镜像加速和本地缓存功能。以下是 Proxy 模式的详细说明和配置方法。
Proxy 模式核心概念
- 工作原理:
- Registry 作为透明代理,首次请求时从上游拉取并缓存镜像
- 后续请求直接从本地缓存提供,大幅提升拉取速度
- 主要优势:
- 减少对外网依赖,提高内网拉取速度
- 降低上游仓库的请求压力(如避免 Docker Hub 限速)
- 可作为企业级内部统一镜像入口
Proxy 模式核心配置
基础代理配置
关键环境变量:
- REGISTRY_PROXY_REMOTEURL: (必需)指定上游仓库地址
Docker Hub 专用配置
附加环境变量:
- REGISTRY_PROXY_USERNAME: Docker Hub 用户名(用于认证)
- REGISTRY_PROXY_PASSWORD: Docker Hub 密码或个人访问令牌
注意:从 2021 年起,Docker Hub 对匿名拉取实施限速,建议配置认证信息
HTTPS 支持
Docker Compose 示例
Proxy 模式高级功能
1. Blob 缓存控制
通过以下变量控制缓存行为:
- REGISTRY_PROXY_BLOBCACHETTL: blob 缓存过期时间(默认无限制)
2. Manifest 缓存控制
控制 manifest 缓存行为:
- REGISTRY_PROXY_MANIFESTCACHETTL: manifest 缓存过期时间(默认无限制)
3. TLS 验证控制
控制上游 TLS 证书验证:
- REGISTRY_PROXY_TLS_INSECURE: true/false(默认 false)
4. Header 传递控制
控制哪些 HTTP 头传递给上游:
- REGISTRY_PROXY_PASSHEADERS: ["Authorization", "X-My-Custom-Header"]
Proxy 模式使用示例
- 客户端配置
在客户端机器的 /etc/docker/daemon.json 中添加:
然后重启 Docker 服务:
- 测试代理
拉取镜像时会自动通过代理:
检查是否命中缓存:
Proxy 模式注意事项
- 存储管理
- Proxy 模式会持续缓存拉取的镜像,需要定期清理或设置 TTL
- Volume 挂载建议:-v /data/docker-registry:/var/lib/registry
- 认证问题
- Docker Hub 从 2021 年 11 月起对匿名拉取实施限速(100 pulls/6 小时/IP)
- Proxy 模式下建议配置 Docker Hub 账号认证信息
- 性能优化
- Redis 缓存:可添加 Redis 提高性能(见前文 Redis 配置)
- CDN 集成:可结合 Nginx 等实现 CDN 加速
- 多级代理
graph LR
Client --> Edge-Registry --> Central-Registry --> Docker-Hub
可构建多级代理架构实现分层缓存
Proxy 模式特别适合企业内网环境、CI/CD 流水线等需要频繁拉取相同镜像的场景,能显著提升效率并降低对外网依赖。