利用服务器自建Docker Hub镜像加速服务
通过自建Docker镜像加速服务,既能解决限制问题,又能实现高效稳定的镜像管理。本文方案结合了Docker Registry代理和客户端配置,适用于个人开发者场景。未来还可扩展为多节点集群,进一步提升服务可靠性。希望这篇指南能帮助您高效搭建专属的Docker镜像加速服务!如有疑问,欢迎在评论区留言讨论。
背景与需求
五一假期期间,笔者尝试部署Milvus向量数据库时,发现难以从Docker Hub稳定拉取镜像。近年来,由于各种环境限制,开发者常面临镜像下载失败或速度缓慢的困扰。经过多次尝试更换公共代理未果后,最终决定基于已有服务器自建Docker镜像加速服务。本文将分享完整实现方案,助力下载Docker Hub提供的镜像。
准备工作
1. 服务器与域名
- 服务器选择:推荐使用阿里云、腾讯云的选择亚太-其他区域,配置最低1核1GB即可满足需求。
- 域名解析:绑定一个子域名(如
mirror.yourdomain.com)到云服务器的公网IP,需在域名服务商处添加A记录。
2. 基础环境配置——安装Docker
# 清理旧版本(如有)
sudo apt-get remove -y docker docker-engine docker.io containerd runc
# 安装依赖工具
sudo apt-get update && sudo apt-get install -y \
ca-certificates curl gnupg lsb-release
# 添加官方GPG密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 设置稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker引擎
sudo apt-get update && sudo apt-get install -y \
docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
# 权限优化(当前用户加入docker组)
sudo usermod -aG docker $USER && newgrp docker
验证命令
docker --version&&docker compose version
部署私有镜像仓库
1.创建个docker容器的共享网络
docker network create dockerhub_net
2. 使用Docker Registry镜像
为什么选择registry:2?
Docker官方提供的registry:2镜像是一个开源的容器镜像存储分发工具,专为私有化部署设计。相比早期版本,registry:2具有以下核心优势:
-
代理缓存能力:支持将远程仓库(如Docker Hub)的镜像自动缓存到本地,实现加速拉取。
-
分层存储优化:采用更高效的Blob存储机制,降低磁盘占用并提升并发性能。
-
安全增强:支持Token认证、TLS加密传输等安全特性(需配合反向代理)。
-
轻量化部署:镜像体积仅25MB左右,资源占用极低。
-
2.1 通过Docker官方提供的
registry:2镜像搭建私有仓库代理:
docker run -d \ # 后台运行容器(detached)
--network dockerhub_net \ # 连接到 dh_net 网络
--name registry-proxy \ # 容器名称设为 registry-proxy
-p 5000:5000 \ # 把宿主机 5000 端口映射到容器 5000 端口(这里如果VPS没有其他项目,也可以直接映射到80端口,我个人服务器上项目还是比较多的,所以还是用了5000,后续用nginx做转发)
-e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \ # 设置代理远程仓库地址(Docker Hub)
--restart unless-stopped \ # 随 Docker 启动一起启动容器,除非手动停止
registry:2 # 使用 registry:2 镜像启动
- 2.2 防火墙放行端口(如果有防火墙的话,需要注意服务器上放行,而且vps的控制台也需要放行端口, 如果已经禁止掉防火墙请忽略该操作)
# 若使用UFW(Ubuntu)
ufw allow 5000/tcp
- 2.3 API端点健康检查
本地使用cmd命令:
curl -I http://{vps_ip}:5000/v2/
预期返回:
HTTP/1.1 200 OK
Content-Length: 2
Content-Type: application/json; charset=utf-8
Docker-Distribution-Api-Version: registry/2.0
X-Content-Type-Options: nosniff
Date: Sun, 04 May 2025 18:07:18 GMT
或者直接使用浏览器访问http://{vps_ip}:5000/v2/,能够正常访问,且页面如下即可。
- 2.4 本地docker配置(我是运行在window的wsl2上的ubuntu操作系统中)
sudo vim /etc/docker/daemon.json
添加如下操作:
{
"insecure-registries": ["VPS_IP:5000"]
}
insecure-registries 的作用是允许 Docker 客户端通过非加密的 HTTP 协议访问指定的镜像仓库。
保存后,需要重启下docker
sudo systemctl restart docker
然后拉取 hello-world进行验证
docker pull VPS_IP:5000/hello-world
如果可以正常拉取,表示目前dockerhub代理镜像已经可以。这个时候,可以往docker的daemon.json文件中配置registry-mirrors
{
"insecure-registries": ["VPS_IP:5000"],
"registry-mirrors": ["http://VPS_IP:5000"]
}
这个时候就可以不用在镜像前添加VPS_IP:5000了,即可直接进行命令
docker pull hello-world
直接运行与域名绑定的取舍
若不绑定域名,可直接通过IP+端口使用Registry服务(如http://VPS_IP:5000),但是还是建议通过域名代理一层,省的直接暴露vps的ip。
优势与注意事项
核心优势
- 稳定性:自建服务避免公共镜像源不可用风险。
- 速度提升:通过缓存热门镜像减少网络延迟。
- 私有化扩展:可结合私有镜像仓库存储企业内部镜像。
注意事项
- 服务器区域:服务器区域,可以先采用按流量计费,在选定后,先curl,看下是否能够访问docker hub,如果不行,换个区域。
- 流量成本:高频率使用需关注VPS带宽费用。
- 合规性:遵守Docker Hub的服务条款,避免滥用。
总结
通过自建Docker镜像加速服务,既能解决限制问题,又能实现高效稳定的镜像管理。本文方案结合了Docker Registry代理、反向代理工具和客户端配置,适用于个人开发者与企业级场景。未来还可扩展为多节点集群,进一步提升服务可靠性。
希望这篇指南能帮助您高效搭建专属的Docker镜像加速服务!如有疑问,欢迎在评论区留言讨论。
更多推荐



所有评论(0)