打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

如何在搬瓦工服务器上搭建私有镜像加速器

来自md5.pw
Doris留言 | 贡献2026年2月18日 (三) 01:37的版本 (如何在搬瓦工服务器上搭建私有镜像加速器)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

在国内网络环境下,拉取 Docker Hub 的官方镜像经常遇到速度极慢、连接超时,甚至完全无法下载的情况。虽然可以使用阿里云、腾讯云等公共加速器,但它们有时也会因为种种原因不稳定。

现在有个比较稳妥的方案,就是用你手中线路优秀的 搬瓦工 ( CN2 GIA 线路),搭建一个属于自己的 Docker Registry Proxy(镜像缓存代理)

它的工作原理是:

  1. 本地(NAS/电脑)请求你的 VPS。
  2. VPS 帮你去 Docker Hub 拉取镜像。
  3. VPS 将镜像缓存在本地硬盘。
  4. 下次再拉取同样的镜像,直接从 VPS 缓存读取,速度飞快。

这篇教程将教你在一台全新的 Debian/Ubuntu VPS 上,从零开始部署这个神器。

准备工作

  • 服务器:一台 搬瓦工 VPS(推荐 Debian 11/12 或 Ubuntu 20.04/22.04)。
  • 端口:确保防火墙放行 5000 端口。

第一步:系统初始化与环境安装

作为一台全新的机器,首先要确保系统软件是最新的,并安装必要的基础工具。

# 1. 更新软件包列表并升级系统
sudo apt update && sudo apt upgrade -y

# 2. 安装基础工具 (vim, curl, wget, git)
sudo apt install -y vim curl wget git apache2-utils

注意:apache2-utils 是为了后续生成密码文件使用,它包含 htpasswd 工具。


第二步:安装 Docker 环境

我们需要官方最新版的 Docker Engine 来运行 Registry 容器。

# 1. 卸载可能存在的旧版本
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

# 2. 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# 3. 添加 Docker 软件源
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/$(. /etc/os-release && echo "$ID") \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4. 更新源并安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 5. 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

第三步:规划目录与配置 Registry

我们将使用官方的 registry:2 镜像。核心在于修改它的配置文件,使其工作在“Proxy(代理)”模式,而不是普通的存储模式。

1. 创建工作目录

sudo mkdir -p /opt/docker-registry/data
sudo mkdir -p /opt/docker-registry/config
cd /opt/docker-registry

2. 编写 Registry 配置文件

使用 vim 创建配置文件:

sudo vim config/config.yml

i 进入编辑模式,粘贴以下内容:

version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /var/lib/registry
  delete:
    enabled: true
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
# 核心配置:代理模式
proxy:
  # 目标地址:Docker Hub 官方地址
  remoteurl: https://registry-1.docker.io

配置解读:

  • storage: 镜像缓存存储的位置。
  • proxy: 这一段告诉 Registry,如果在本地找不到镜像,就去 remoteurl 拉取并缓存下来。

保存并退出(按 Esc,输入 :wq,回车)。


第四步:配置访问密码(可选但推荐)

如果不设置密码,互联网上任何人都能通过你的 IP 消耗你的 VPS 流量。为了安全,我们设置一个简单的 Basic Auth。

1. 生成密码文件

your_username 替换为你想要的用户名(例如 admin):

# 在 config 目录下生成 htpasswd 文件
cd /opt/docker-registry/config
sudo htpasswd -Bc htpasswd your_username

系统会提示你输入并确认密码。

2. 修改 config.yml 启用认证

再次编辑配置文件:

sudo vim config.yml

http: 字段下增加 auth 配置,注意缩进格式:

http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
  # 新增以下内容
  auth:
    htpasswd:
      realm: basic-realm
      path: /etc/docker/registry/htpasswd

保存并退出 (:wq)。


第五步:编写 Docker Compose 启动文件

回到 /opt/docker-registry 根目录,创建启动文件。

cd /opt/docker-registry
sudo vim compose.yaml

粘贴以下内容:

version: '3'
services:
  registry:
    restart: always
    image: registry:2
    ports:
      - "5000:5000"
    volumes:
      # 挂载我们刚才写的配置文件
      - ./config/config.yml:/etc/docker/registry/config.yml
      # 挂载密码文件
      - ./config/htpasswd:/etc/docker/registry/htpasswd
      # 挂载数据目录(缓存的镜像存这)
      - ./data:/var/lib/registry

保存并退出 (:wq)。


第六步:启动服务与测试

# 启动容器
sudo docker compose up -d

# 查看日志确保没有报错
sudo docker compose logs -f

如果看到 listening on [::]:5000 字样,说明服务启动成功。按 Ctrl+C 退出日志查看。


第七步:在客户端(本机/NAS)使用

由于我们搭建的是 HTTP 服务(没有配置 SSL 证书),Docker 默认禁止连接非 HTTPS 的仓库。我们需要在客户端配置“不安全的注册表”。

1. 修改客户端 Docker 配置

在你的本地电脑、NAS 或另一台国内服务器上:

编辑 /etc/docker/daemon.json (Linux) 或在 Docker Desktop 设置中找到 Daemon 配置。

加入 "insecure-registries" 字段:

{
  "registry-mirrors": [],
  "insecure-registries": [
    "你的VPS_IP:5000"
  ]
}

重启本地 Docker:

sudo systemctl restart docker

2. 测试拉取镜像

现在,尝试通过你的 IP 拉取一个镜像。假设你的 VPS IP 是 1.2.3.4,用户名是 admin,密码是 123456

先登录(如果设置了密码):

docker login 1.2.3.4:5000 -u admin -p 123456

拉取镜像: 原本的命令是 docker pull nginx,现在需要加上你的 IP 前缀:

docker pull 1.2.3.4:5000/library/nginx

注意:官方镜像(如 nginx, mysql)属于 library 组,所以要加上 /library/。如果是第三方镜像(如 mysql/mysql-server),则直接替换为 1.2.3.4:5000/mysql/mysql-server