docker:registrymirror

Docker镜像加速器搭建

搭建 Docker Registry Mirror(镜像加速器服务器)的核心是部署带代理缓存功能的私有 Registry,本质是让私有 Registry 拉取并缓存官方镜像,供本地 / 内网 Docker 客户端使用,从而提升拉取速度。以下是基于 Docker 官方 Registry 镜像 + 缓存配置的完整搭建步骤。

服务器要求

  • 一台可联网的 Linux 服务器(推荐 CentOS/Ubuntu),已安装 Docker 和 Docker Compose。
  • 开放 5000 端口(Registry 默认端口),或自定义端口。

核心原理

客户端请求拉取镜像时,先访问私有 Mirror → 若 Mirror 已有缓存,则直接返回;若无,则从 Docker Hub 拉取并缓存,再返回给客户端。

1、 创建 Registry 配置文件

创建配置目录和 config.yml 文件,配置缓存策略、上游镜像源(Docker Hub)等参数。

# 创建配置目录
mkdir -p /opt/docker-registry/{conf,data}
cd /opt/docker-registry/conf

新建 config.yml 文件,写入以下内容:

version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory  # 内存缓存镜像描述信息
  filesystem:
    rootdirectory: /var/lib/registry  # 镜像数据存储路径
http:
  addr: :5000  # 监听端口
  headers:
    X-Content-Type-Options: [nosniff]
proxy:
  remoteurl: https://registry-1.docker.io  # 上游镜像源(Docker Hub)
  username: [你的Docker Hub用户名]  # 可选,拉取私有镜像时需要
  password: [你的Docker Hub密码]    # 可选
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

注意:

proxy.remoteurl 固定为 Docker Hub 官方地址,不可修改。

若需缓存 Docker Hub 私有镜像,才需要填写 username 和 password;仅缓存公有镜像可省略这两项。(如果使用公共仓镜像,删除username和password这2行。)

2、 编写 Docker Compose 文件

在 /opt/docker-registry 目录下创建 docker-compose.yml,简化部署和管理:

# version: '3' # 在 Compose v2 及以上版本中,这个字段已经不再强制要求,且官方明确该字段会被逐步废弃
services:
  registry:
    image: registry:2  # 官方Registry 2.x镜像
    container_name: docker-registry-mirror
    restart: always
    ports:
      - "5000:5000"  # 宿主机端口:容器端口
    volumes:
      - ./conf/config.yml:/etc/docker/registry/config.yml  # 挂载配置文件
      - ./data:/var/lib/registry  # 挂载数据目录,持久化缓存的镜像
    environment:
      - REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io  # 与配置文件一致,双重保障

3、 启动 Registry Mirror 服务

# 启动服务
docker-compose up -d
# 有的linux是执行:
docker compose up -d

# 查看运行状态
docker-compose ps
# 有的linux是执行:
docker ps

配置 Docker 客户端使用 Mirror

客户端需要修改 daemon.json,指定搭建的 Mirror 地址,步骤如下:

1、编辑客户端的 /etc/docker/daemon.json:

{
  "registry-mirrors": [
    "http://[你的服务器IP]:5000",  # 替换为 Mirror 服务器的IP或URL和端口
    "http://[你的服务器IP]:5000"   # 第二台加速服务器
  ]
}

2、重启 Docker 服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

3、验证配置:

docker info

输出中 Registry Mirrors 字段显示你的服务器地址,即为配置成功。

1、在客户端拉取一个未缓存的镜像,例如 nginx:alpine:

docker pull nginx:alpine

2、查看 Mirror 服务器的镜像缓存目录,确认数据已存储:

ls -lh /opt/docker-registry/data/docker/registry/v2/repositories/library/nginx/

若存在相关目录和文件,说明缓存成功。

3、再次拉取 nginx:alpine,速度会显著提升(直接从 Mirror 读取)。

1、配置 HTTPS(推荐)

Docker 默认要求 Registry 使用 HTTPS,若使用 HTTP,需在客户端 daemon.json 中添加 insecure-registries:

{
  "registry-mirrors": ["http://[服务器IP]:5000"],
  "insecure-registries": ["[服务器IP]:5000"]
}

生产环境建议配置 SSL 证书,将 http 改为 https。

实测不按照上面修改也能正常使用。

2、设置缓存清理策略

Registry 不会自动清理过期缓存,可通过 registry garbage-collect 命令清理:

docker exec docker-registry-mirror registry garbage-collect /etc/docker/registry/config.yml

可添加定时任务(crontab)定期执行。

3、多上游源支持

若需缓存其他镜像源(如阿里云、华为云镜像),可部署多个 Registry 实例,分别配置不同的 proxy.remoteurl。

  • docker/registrymirror.1766567920.txt.gz
  • 最后更改: 2025/12/24 17:18
  • admin