切換選單
切換偏好設定選單
切換個人選單
尚未登入
若您做出任何編輯,會公開您的 IP 位址。

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

出自md5.pw
於 2026年2月18日 (三) 07:08 由 Air留言 | 貢獻 所做的修訂 (添加分类目录)
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)

在國內網絡環境下,拉取 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