如何在搬瓦工伺服器上搭建私有鏡像加速器
更多語言
更多操作
在國內網絡環境下,拉取 Docker Hub 的官方鏡像經常遇到速度極慢、連接超時,甚至完全無法下載的情況。雖然可以使用阿里雲、騰訊雲等公共加速器,但它們有時也會因為種種原因不穩定。
現在有個比較穩妥的方案,就是用你手中線路優秀的 搬瓦工 ( CN2 GIA 線路),搭建一個屬於自己的 Docker Registry Proxy(鏡像緩存代理)。
它的工作原理是:
- 本地(NAS/電腦)請求你的 VPS。
- VPS 幫你去 Docker Hub 拉取鏡像。
- VPS 將鏡像緩存在本地硬碟。
- 下次再拉取同樣的鏡像,直接從 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。