使用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 模式核心概念

  1. 工作原理:
      • Registry 作为透明代理,首次请求时从上游拉取并缓存镜像
      • 后续请求直接从本地缓存提供,大幅提升拉取速度
  1. 主要优势:
      • 减少对外网依赖,提高内网拉取速度
      • 降低上游仓库的请求压力(如避免 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 模式使用示例

  1. 客户端配置
在客户端机器的 /etc/docker/daemon.json 中添加:
然后重启 Docker 服务:
  1. 测试代理
拉取镜像时会自动通过代理:
检查是否命中缓存:

Proxy 模式注意事项

  1. 存储管理
      • Proxy 模式会持续缓存拉取的镜像,需要定期清理或设置 TTL
      • Volume 挂载建议:-v /data/docker-registry:/var/lib/registry
  1. 认证问题
      • Docker Hub 从 2021 年 11 月起对匿名拉取实施限速(100 pulls/6 小时/IP)
      • Proxy 模式下建议配置 Docker Hub 账号认证信息
  1. 性能优化
      • Redis 缓存:可添加 Redis 提高性能(见前文 Redis 配置)
      • CDN 集成:可结合 Nginx 等实现 CDN 加速
  1. 多级代理
    1. graph LR Client --> Edge-Registry --> Central-Registry --> Docker-Hub
      可构建多级代理架构实现分层缓存
Proxy 模式特别适合企业内网环境、CI/CD 流水线等需要频繁拉取相同镜像的场景,能显著提升效率并降低对外网依赖。

© Lei Hao 2025